Configuración de sharding
Con sharding, OpenKM puede distribuir los ficheros del repositorio en distintas ubicaciones. Esta característica puede ser útil cuando el disco principal está lleno, de forma que los nuevos documentos se almacenará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 Administration y están disponibles las siguientes opciones:
- Crear un nuevo shard
- Establecer un shard como actual
Por defecto solo existe un shard y se necesita una configuración específica para utilizar esta nueva característica.
Para configurar el sharding, utilice esta propiedad de configuración:
repository.datastore.home=${repository.home}/${shard.id}/${tenant.id}/datastoreLa clave es la variable “shard.id”, que OpenKM sustituirá por el shard habilitado actualmente. Así, si se encuentra 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
- datastore
- tenant_1
- shard_2
- tenant_1
- datastore
- tenant_1
- tenant_1
- cache
- extraction
Sharding y Docker
Sección titulada «Sharding y Docker»Si utiliza Docker para desplegar OpenKM, le 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 7.1.47 (cambie el valor de la versión para otras compilaciones de Docker):
services:
openkm_mysql: image: docker.openkm.com/private/professional:7.1.47 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 openkm.properties correspondiente (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