Ir al contenido

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:

Ventana de terminal
repository.cache.home=${repository.home}/${shard.id}/${tenant.id}/cache
repository.datastore.home=${repository.home}/${shard.id}/${tenant.id}/datastore
repository.extraction.home=${repository.home}/${shard.id}/${tenant.id}/extraction

La 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
  • shard_2
    • tenant_1
      • cache
      • datastore
      • extraction
  • tenant_1
    • ocr_template

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/16

Y este es el correspondiente openkm.properties (shards sin tenants):

# OpenKM Hibernate configuration values
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://mysql:3306/okmdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=CET&nullNamePatternMatchesAll=true
spring.datasource.username=openkm
spring.datasource.password=openkm
# JPA stuff
spring.jpa.hibernate.ddl-auto=create-only
spring.jpa.properties.hibernate.dialect=com.openkm.db.dialect.MySQL5InnoDBDialect
# Logging config
spring.output.ansi.enabled=always
# Extra
repository.datastore.home=/opt/tomcat/repository/${shard.id}/datastore