Ir al contenido
Otras versiones

Cargando…

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:

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

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

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

Y este es el openkm.properties correspondiente (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