Configuración de sharding
Con el sharding, OpenKM puede distribuir los ficheros del repositorio en distintas ubicaciones. Esta funcionalidad puede ayudar en caso de que el disco principal esté lleno, de modo que los documentos nuevos se ubicarán en otro disco.
Todos los documentos se almacenarán en el shard principal hasta que se cree un nuevo shard y se establezca como shard actual. Los shards pueden gestionarse desde la administración, y estas opciones están disponibles:
- Crear un nuevo shard
- Establecer un shard como actual
Por defecto, solo hay un shard, y se necesita una configuración específica para hacer uso de esta nueva funcionalidad.
Para configurar el sharding, use esta propiedad de configuración:
repository.cache.home=${repository.home}/${shard.id}/${tenant.id}/cacherepository.datastore.home=${repository.home}/${shard.id}/${tenant.id}/datastorerepository.extraction.home=${repository.home}/${shard.id}/${tenant.id}/extractionLa clave es la variable “shard.id”, que OpenKM sustituirá por el shard actualmente habilitado. Así, si está en el shard nº 1 y el tenant nº 2, la ubicación del datastore será ${repository.home}/shard_1/tenant_1/datastore.
Esta es una distribución de directorio de repository de ejemplo:
- index
- shard_1
- tenant_1
- cache
- datastore
- extraction
- tenant_1
- shard_2
- tenant_1
- cache
- datastore
- extraction
- tenant_1
- tenant_1
- ocr_template
Sharding y Docker
Sección titulada «Sharding y Docker»Si está usando Docker para desplegar OpenKM, recomendamos externalizar el fichero de configuración openkm.properties para poder configurar el sharding.
Esta es una definición de Docker Compose de ejemplo para la versión 8.1.13 (cambie el valor de versión para otras builds de Docker):
services:
openkm_mysql: image: docker.openkm.com/private/professional:8.1.13 container_name: openkm_mysql_shard hostname: openkm ports: - 8080:8080 volumes: - ${PWD}/openkm.properties:/opt/tomcat/openkm.properties - ${PWD}/repository:/opt/tomcat/repository environment: - TZ=Europe/Madrid entrypoint: [ "wait-for-it.sh", "mysql:3306", "--timeout=0", "--strict", "--", "entrypoint.sh" ] links: - mysql:mysql networks: skynet: ipv4_address: 172.28.1.1
mysql: image: mysql:8.0.18 container_name: okmdb_mysql_shard hostname: mysql command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8 --collation-server=utf8_bin volumes: - ${PWD}/mysql:/var/lib/mysql environment: - MYSQL_DATABASE=okmdb - MYSQL_USER=openkm - MYSQL_PASSWORD=openkm - MYSQL_ROOT_PASSWORD=openkm security_opt: - seccomp:unconfined networks: skynet: ipv4_address: 172.28.1.2
volumes: openkm_mysql_shard: okmdb_mysql_shard:
networks: skynet: ipam: driver: default config: - subnet: 172.28.0.0/16Y este es el correspondiente openkm.properties (shards sin tenants):
# OpenKM Hibernate configuration valuesspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://mysql:3306/okmdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=CET&nullNamePatternMatchesAll=truespring.datasource.username=openkmspring.datasource.password=openkm
# JPA stuffspring.jpa.hibernate.ddl-auto=create-onlyspring.jpa.properties.hibernate.dialect=com.openkm.db.dialect.MySQL5InnoDBDialect
# Logging configspring.output.ansi.enabled=always
# Extrarepository.datastore.home=/opt/tomcat/repository/${shard.id}/datastore