En este ejemplo, aprenderá a configurar un clúster sencillo de ClickHouse que replica y escala. Consta de dos segmentos y dos réplicas, con un clúster de 3 nodos de ClickHouse Keeper para gestionar la coordinación y mantener el cuórum en el clúster.La arquitectura del clúster que va a configurar se muestra a continuación:
Aunque es posible ejecutar ClickHouse Server y ClickHouse Keeper juntos en el mismo servidor,
recomendamos encarecidamente usar hosts dedicados para ClickHouse Keeper en entornos de producción,
que es el enfoque que mostraremos en este ejemplo.Los servidores Keeper pueden ser más pequeños, y 4 GB de RAM suele ser suficiente para cada servidor Keeper
hasta que los servidores ClickHouse alcancen un tamaño considerable.
Requisitos previos
- Ya has configurado previamente un servidor ClickHouse local
- Estás familiarizado con conceptos básicos de configuración de ClickHouse, como los archivos de configuración
- Tienes Docker instalado en tu equipo
1
Configurar la estructura de directorios y el entorno de prueba
En este tutorial, utilizará Docker compose para
configurar el clúster de ClickHouse. Esta configuración puede adaptarse para funcionar
también con máquinas locales independientes, máquinas virtuales o instancias en la nube.Ejecute los siguientes comandos para configurar la estructura de directorios de este ejemplo:Añada el siguiente archivo Cree los siguientes subdirectorios y archivos:
docker-compose.yml al directorio clickhouse-cluster:docker-compose.yml
- El directorio
config.dcontiene el archivo de configuración del servidor ClickHouseconfig.xml, en el que se define la configuración personalizada de cada nodo de ClickHouse. Esta configuración se combina con el archivo de configuración predeterminadoconfig.xmlde ClickHouse, incluido en cada instalación de ClickHouse. - El directorio
users.dcontiene el archivo de configuración de usuariosusers.xml, en el que se define la configuración personalizada para los usuarios. Esta configuración se combina con el archivo de configuración predeterminadousers.xmlde ClickHouse, incluido en cada instalación de ClickHouse.
2
Configurar nodos de ClickHouse
Configuración del servidor
Ahora modifique cada archivo de configuración vacíoconfig.xml ubicado en
fs/volumes/clickhouse-{}/etc/clickhouse-server/config.d. Las líneas resaltadas
a continuación deben ajustarse para que sean específicas de cada nodo:Cada sección del archivo de configuración anterior se explica con más detalle a continuación.
Redes y logging
La comunicación externa a través de la interfaz de red se habilita al activar la configuración de listen host. Esto garantiza que el host del servidor ClickHouse sea accesible desde otros hosts:8123:9000:<logger>. Esta configuración de ejemplo
genera un log de depuración que rotará cada 1000 M un máximo de tres veces:Configuración del clúster
La configuración del clúster se establece en el bloque<remote_servers>.
Aquí se define el nombre del clúster cluster_2S_2R.El bloque <cluster_2S_2R></cluster_2S_2R> define el layout del clúster
mediante las configuraciones <shard></shard> y <replica></replica>, y actúa como
plantilla para las consultas DDL distribuidas, es decir, consultas que se ejecutan en todo el
clúster mediante la cláusula ON CLUSTER. De forma predeterminada, las consultas DDL distribuidas
están permitidas, pero también se pueden deshabilitar con la configuración allow_distributed_ddl_queries.internal_replication se establece en true para que los datos se escriban en una única réplica.<cluster_2S_2R></cluster_2S_2R> define la estructura del cluster
y actúa como plantilla para las distributed DDL queries, es decir, queries que se ejecutan
en todo el cluster mediante la cláusula ON CLUSTER.Configuración de Keeper
La sección<ZooKeeper> indica a ClickHouse dónde se está ejecutando ClickHouse Keeper (o ZooKeeper).
Como estamos utilizando un cluster de ClickHouse Keeper, es necesario especificar cada <node> del cluster,
junto con su hostname y número de puerto mediante las etiquetas <host> y <port> respectivamente.La configuración de ClickHouse Keeper se explica en el siguiente paso del tutorial.Aunque es posible ejecutar ClickHouse Keeper en el mismo servidor que ClickHouse Server,
en entornos de producción recomendamos encarecidamente ejecutar ClickHouse Keeper en servidores dedicados.
Configuración de macros
Además, la sección<macros> se utiliza para definir sustituciones de parámetros para
tablas replicadas. Estas aparecen listadas en system.macros y permiten usar sustituciones
como {shard} y {replica} en las consultas.Configuración de usuario
Ahora modifique cada archivo de configuración vacíousers.xml ubicado en
fs/volumes/clickhouse-{}/etc/clickhouse-server/users.d con el siguiente contenido:/users.d/users.xml
default está configurado sin contraseña para simplificar.
En la práctica, esto no es recomendable.En este ejemplo, cada archivo
users.xml es idéntico en todos los nodos del clúster.3
Configurar ClickHouse Keeper
A continuación, configure ClickHouse Keeper, que se usa para la coordinación.Cree los archivos Modifique los archivos de configuración vacíos que se crearon en el
directorio de cada nodo La siguiente sección se utiliza para configurar los servidores que participan en el
quórum del algoritmo de consenso Raft:
Configuración de Keeper
Para que la replicación funcione, es necesario configurar un clúster de ClickHouse Keeper. ClickHouse Keeper proporciona el sistema de coordinación para la replicación de datos y actúa como reemplazo directo de ZooKeeper, que también podría utilizarse. No obstante, se recomienda ClickHouse Keeper, ya que ofrece mejores garantías y fiabilidad, además de utilizar menos recursos que ZooKeeper. Para lograr alta disponibilidad y mantener el quorum, se recomienda ejecutar al menos tres nodos de ClickHouse Keeper.ClickHouse Keeper puede ejecutarse en cualquier nodo del clúster junto con ClickHouse, aunque
se recomienda hacerlo en un nodo dedicado, lo que permite escalar y
administrar el clúster de ClickHouse Keeper de forma independiente del clúster de base de datos.
keeper_config.xml para cada nodo de ClickHouse Keeper
con el siguiente comando desde la raíz de la carpeta de ejemplo:fs/volumes/clickhouse-keeper-{}/etc/clickhouse-keeper. Las
líneas resaltadas a continuación deben modificarse para que sean específicas de cada nodo:/clickhouse-keeper/keeper_config.xml
Cada archivo de configuración contendrá la siguiente configuración única (que se muestra a continuación).
El
server_id utilizado debe ser único para ese nodo específico de ClickHouse Keeper
en el clúster y coincidir con el <id> del servidor definido en la sección <raft_configuration>.
tcp_port es el puerto que utilizan los clientes de ClickHouse Keeper.4
Prueba la configuración
Asegúrate de que Docker esté ejecutándose en tu equipo.
Inicia el clúster con el comando Deberías ver que docker empieza a descargar las imágenes de ClickHouse y Keeper,
y, a continuación, inicia los contenedores:Para verificar que el clúster está funcionando, conéctese a cualquiera de los nodos y ejecute la
siguiente consulta. A continuación se muestra el comando para conectarse al primer nodo:Si todo ha ido bien, verás el indicador del cliente de ClickHouse:Ejecute la siguiente consulta para comprobar qué topologías de clúster están definidas en qué
hosts:Ejecute la siguiente consulta para comprobar el estado del clúster de ClickHouse Keeper:El comando A continuación se muestra un ejemplo de respuesta de un nodo seguidor:A continuación se muestra un ejemplo de respuesta de un nodo líder:Con esto, has configurado correctamente un clúster de ClickHouse con dos segmentos y dos réplicas.
En el siguiente paso, crearás una tabla en el clúster.
docker-compose up desde la raíz del directorio cluster_2S_2R:Query
Response
Query
Response
mntr también se usa habitualmente para verificar que ClickHouse Keeper
está en ejecución y para obtener información sobre el estado de la relación entre los tres nodos de Keeper.
En la configuración utilizada en este ejemplo, hay tres nodos que trabajan juntos.
Los nodos elegirán un líder y los nodos restantes serán followers.El comando mntr proporciona información relacionada con el rendimiento y con si un nodo
determinado es follower o leader.Ejecute el siguiente comando desde un shell en clickhouse-keeper-01, clickhouse-keeper-02 y
clickhouse-keeper-03 para comprobar el estado de cada nodo de Keeper. El comando
para clickhouse-keeper-01 se muestra a continuación:Response
Response
5
Crear una base de datos
Ahora que ha verificado que el clúster está correctamente configurado y en funcionamiento,
volverá a crear la misma tabla que se usa en el tutorial del conjunto de datos de ejemplo de precios de propiedades del Reino Unido.
Consta de alrededor de 30 millones de filas con precios pagados
por propiedades inmobiliarias en Inglaterra y Gales desde 1995.Conéctese al cliente de cada host ejecutando cada uno de los siguientes comandos desde pestañas o ventanas de terminal
independientes:Puedes ejecutar la consulta siguiente desde Desde el cliente Puedes volver a ejecutar la misma consulta que antes desde el cliente de cada host
para confirmar que la base de datos se ha creado en todo el clúster, a pesar de haber ejecutado
la consulta solo desde
clickhouse-client de cada host para confirmar que todavía no se ha creado ninguna base de datos,
aparte de las predeterminadas:Query
Response
clickhouse-01, ejecute la siguiente consulta DDL distribuida con la cláusula
ON CLUSTER para crear una nueva base de datos llamada uk:clickhouse-01:6
Crear una tabla en el clúster
Ahora que ya se ha creado la base de datos, el siguiente paso es crear una tabla con replicación.Ejecute la siguiente consulta desde cualquiera de los clientes host:Observe que es idéntica a la consulta utilizada en la instrucción
El parámetrodonde:
CREATE original del tutorial del
conjunto de datos de ejemplo precios de propiedades del Reino Unido,
excepto por la cláusula ON CLUSTER y el uso del motor ReplicatedMergeTree.La cláusula ON CLUSTER está diseñada para la ejecución distribuida de consultas DDL (Data Definition Language)
como CREATE, DROP, ALTER y RENAME, lo que garantiza que estos
cambios de esquema se apliquen en todos los nodos de un clúster.El motor
ReplicatedMergeTree
funciona igual que el motor de tabla MergeTree convencional, pero también replicará los datos.
Requiere que se especifiquen dos parámetros:zoo_path: La ruta de Keeper/ZooKeeper a los metadatos de la tabla.replica_name: El nombre de la réplica de la tabla.
El parámetro
zoo_path puede establecerse con cualquier valor que elija, aunque se recomienda seguir
la convención de usar el prefijo{database}y{table}se reemplazarán automáticamente.{shard}y{replica}son macros que se definieron previamente en el archivoconfig.xmlde cada nodo de ClickHouse.
Query
Response
7
Insertar datos en una tabla distribuida
Para insertar datos en la tabla, no se puede usar En cada host verá ahora las siguientes tablas de la base de datos Los datos se pueden insertar en la tabla Ejecute la siguiente consulta para confirmar que los datos insertados se han distribuido de forma uniforme
entre los nodos de nuestro clúster:
ON CLUSTER, ya que no
se aplica a consultas DML (lenguaje de manipulación de datos) como INSERT, UPDATE
y DELETE. Para insertar datos, es necesario utilizar el
motor de tablas
Distributed.
Como aprendió en la guía para configurar un clúster con 2 segmentos y 1 réplica, las tablas distribuidas son tablas que pueden acceder a segmentos ubicados en distintos
hosts y se definen mediante el motor de tablas Distributed.
La tabla distribuida actúa como la interfaz entre todos los segmentos del clúster.Desde cualquiera de los clientes de los hosts, ejecute la siguiente consulta para crear una tabla distribuida
utilizando la tabla replicada existente que creamos en el paso anterior:uk:uk_price_paid_distributed desde cualquiera de los
clientes host mediante la siguiente consulta: