Configuración de sharding
Con el sharding, OpenKM puede distribuir los ficheros del repositorio en distintas ubicaciones. Esta funcionalidad puede ayudar en el caso de que el disco principal esté lleno, para que los nuevos documentos se coloquen 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 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 usar 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 #1 y el tenant #2, la ubicación del datastore será ${repository.home}/shard_1/tenant_1/datastore.
Este es un ejemplo de distribución del directorio repository:
- 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.
Este es un ejemplo de definición de Docker Compose 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