Skip to main content
Neste exemplo, você aprenderá a configurar um cluster ClickHouse simples que oferece replicação e escalabilidade. Ele consiste em dois shards e duas réplicas, com um cluster ClickHouse Keeper de 3 nós para gerenciar a coordenação e manter o quórum no cluster.
A arquitetura do cluster que você configurará é mostrada abaixo:
Embora seja possível executar o ClickHouse Server e o ClickHouse Keeper juntos no mesmo servidor, recomendamos fortemente usar hosts dedicados para o ClickHouse Keeper em ambientes de produção, e essa é a abordagem que demonstraremos neste exemplo.Os servidores do Keeper podem ser menores, e 4 GB de RAM geralmente bastam para cada servidor do Keeper até que seus servidores ClickHouse atinjam grande porte.

Pré-requisitos

1

Configurar a estrutura de diretórios e o ambiente de teste

Arquivos de exemploAs etapas a seguir vão orientar você na configuração do cluster do zero. Se preferir pular essas etapas e ir direto para executar o cluster, você pode obter os arquivos de exemplo no repositório de exemplos, no diretório ‘docker-compose-recipes’.
Neste tutorial, você usará o Docker compose para configurar o cluster do ClickHouse. Esta configuração pode ser adaptada para funcionar em máquinas locais separadas, máquinas virtuais ou instâncias de nuvem também.Execute os seguintes comandos para configurar a estrutura de diretórios deste exemplo:
Adicione o seguinte arquivo docker-compose.yml ao diretório clickhouse-cluster:
docker-compose.yml
Crie os seguintes subdiretórios e arquivos:
  • O diretório config.d contém o arquivo de configuração do servidor ClickHouse config.xml, no qual é definida a configuração personalizada de cada nó do ClickHouse. Essa configuração é combinada com o arquivo de configuração padrão config.xml do ClickHouse, incluído em toda instalação do ClickHouse.
  • O diretório users.d contém o arquivo de configuração de usuários users.xml, no qual é definida a configuração personalizada dos usuários. Essa configuração é combinada com o arquivo de configuração padrão users.xml do ClickHouse, incluído em toda instalação do ClickHouse.
Diretórios de configuração personalizadosÉ uma prática recomendada usar os diretórios config.d e users.d ao criar sua própria configuração, em vez de modificar diretamente a configuração padrão em /etc/clickhouse-server/config.xml e etc/clickhouse-server/users.xml.A linha
garante que as seções de configuração definidas nos diretórios config.d e users.d substituam as seções de configuração padrão definidas nos arquivos padrão config.xml e users.xml.
2

Configurar nós do ClickHouse

Configuração do servidor

Agora modifique cada arquivo de configuração vazio config.xml localizado em fs/volumes/clickhouse-{}/etc/clickhouse-server/config.d. As linhas que estão destacadas abaixo precisam ser alteradas para serem específicas a cada nó:
Cada seção do arquivo de configuração acima é explicada com mais detalhes a seguir.

Rede e logging

A comunicação externa pela interface de rede é habilitada ao ativar a configuração listen_host. Isso garante que o host do servidor ClickHouse possa ser acessado por outros hosts:
A porta da API HTTP está configurada como 8123:
A porta TCP usada para comunicação pelo protocolo nativo do ClickHouse entre clickhouse-client e outras ferramentas nativas do ClickHouse, e entre clickhouse-server e outros clickhouse-servers é definida como 9000:
A configuração de logging é definida no bloco <logger>. Esta configuração de exemplo gera um log de depuração que será rotacionado em 1000M três vezes:
Para mais informações sobre a configuração de logging, consulte os comentários incluídos no arquivo de configuração padrão do ClickHouse.

Configuração do cluster

A configuração do cluster é definida no bloco <remote_servers>. Aqui é definido o nome do cluster cluster_2S_2R.O bloco <cluster_2S_2R></cluster_2S_2R> define o layout do cluster, utilizando as configurações <shard></shard> e <replica></replica>, e serve como template para consultas de DDL distribuído, que são queries executadas em todo o cluster por meio da cláusula ON CLUSTER. Por padrão, as consultas de DDL distribuído são permitidas, mas também podem ser desativadas com a configuração allow_distributed_ddl_queries.internal_replication está definido como true para que os dados sejam gravados em apenas uma das réplicas.
A seção <cluster_2S_2R></cluster_2S_2R> define o layout do cluster e serve como template para queries de DDL distribuído, que são queries executadas em todo o cluster usando a cláusula ON CLUSTER.

Configuração do Keeper

A seção <ZooKeeper> informa ao ClickHouse onde o ClickHouse Keeper (ou ZooKeeper) está em execução. Como estamos usando um cluster do ClickHouse Keeper, cada <node> do cluster precisa ser especificado, junto com seu hostname e número de porta, por meio das tags <host> e <port>, respectivamente.A configuração do ClickHouse Keeper é explicada na próxima etapa do tutorial.
Embora seja possível executar o ClickHouse Keeper no mesmo servidor que o ClickHouse Server, em ambientes de produção, recomendamos fortemente que o ClickHouse Keeper seja executado em servidores dedicados.

Configuração de macros

Além disso, a seção <macros> é usada para definir substituições de parâmetros para tabelas replicadas. Elas são listadas em system.macros e permitem o uso de substituições como {shard} e {replica} em queries.

Configuração de usuário

Agora modifique cada arquivo de configuração vazio users.xml localizado em fs/volumes/clickhouse-{}/etc/clickhouse-server/users.d com o seguinte conteúdo:
/users.d/users.xml
Neste exemplo, o usuário padrão é configurado sem senha para simplificar. Na prática, isso não é recomendado.
Neste exemplo, o arquivo users.xml é idêntico em todos os nós do cluster.
3

Configurar o ClickHouse Keeper

Em seguida, você vai configurar o ClickHouse Keeper, que é usado para coordenação.

Configuração do Keeper

Para que a replicação funcione, é necessário configurar e implantar um cluster do ClickHouse Keeper. O ClickHouse Keeper fornece o sistema de coordenação para a replicação de dados, atuando como um substituto direto do ZooKeeper, que também pode ser usado. No entanto, o ClickHouse Keeper é recomendado, pois oferece melhores garantias e confiabilidade, além de usar menos recursos do que o ZooKeeper. Para alta disponibilidade e para manter o quórum, recomenda-se executar pelo menos três nós do ClickHouse Keeper.
O ClickHouse Keeper pode ser executado em qualquer nó do cluster junto com o ClickHouse, embora seja recomendável executá-lo em um nó dedicado, o que permite escalar e gerenciar o cluster do ClickHouse Keeper independentemente do cluster do banco de dados.
Crie os arquivos keeper_config.xml para cada nó do ClickHouse Keeper usando o comando abaixo a partir da raiz da pasta de exemplo:
Modifique os arquivos de configuração vazios criados em cada diretório de nó fs/volumes/clickhouse-keeper-{}/etc/clickhouse-keeper. As linhas destacadas abaixo precisam ser ajustadas para cada nó:
/clickhouse-keeper/keeper_config.xml
Cada arquivo de configuração conterá a seguinte configuração exclusiva (mostrada abaixo). O server_id usado deve ser exclusivo para esse nó específico do ClickHouse Keeper no cluster e corresponder ao <id> do servidor definido na seção <raft_configuration>. tcp_port é a porta usada pelos clientes do ClickHouse Keeper.
A seção a seguir é usada para configurar os servidores que participam do quórum do algoritmo de consenso Raft:
ClickHouse Cloud simplifica o gerenciamentoClickHouse Cloud elimina a carga operacional associada ao gerenciamento de shards e réplicas. A plataforma cuida automaticamente da alta disponibilidade, da replicação e do escalonamento. Compute e armazenamento são separados e escalam conforme a demanda, sem exigir configuração manual nem manutenção contínua.Leia mais
4

Teste a configuração

Verifique se o Docker está em execução na sua máquina. Inicie o cluster com o comando docker-compose up a partir da raiz do diretório cluster_2S_2R:
Você deverá ver o Docker começar a baixar as imagens do ClickHouse e do Keeper, e depois iniciar os contêineres:
Para verificar se o cluster está em execução, conecte-se a qualquer um dos nós e execute a consulta a seguir. O comando para se conectar ao primeiro nó é o seguinte:
Se tudo ocorrer conforme esperado, você verá o prompt do ClickHouse client:
Execute a seguinte consulta para verificar quais topologias de cluster estão definidas em quais hosts:
Query
Response
Execute a seguinte consulta para verificar o status do cluster do ClickHouse Keeper:
Query
Response
O comando mntr também é comumente usado para verificar se o ClickHouse Keeper está em execução e para obter informações de estado sobre a relação entre os três nós do Keeper. Na configuração usada neste exemplo, há três nós trabalhando juntos. Os nós elegerão um líder, e os nós restantes serão seguidores.O comando mntr fornece informações relacionadas ao desempenho e indica se um determinado nó é seguidor ou líder.
Talvez seja necessário instalar o netcat para enviar o comando mntr ao Keeper. Consulte a página nmap.org para obter informações de download.
Execute o comando abaixo em um shell no clickhouse-keeper-01, clickhouse-keeper-02 e clickhouse-keeper-03 para verificar o status de cada nó do Keeper. O comando para clickhouse-keeper-01 é mostrado abaixo:
A resposta abaixo mostra um exemplo de resposta de um nó seguidor:
Response
A resposta abaixo mostra um exemplo de resposta de um nó líder:
Response
Com isso, você configurou com sucesso um cluster do ClickHouse com dois shards e duas réplicas. Na próxima etapa, você criará uma tabela no cluster.
5

Criar um banco de dados

Agora que você verificou que o cluster está configurado corretamente e em execução, você recriará a mesma tabela usada no tutorial do conjunto de dados de exemplo preços de imóveis no Reino Unido. Ela contém cerca de 30 milhões de linhas com os valores pagos por imóveis na Inglaterra e no País de Gales desde 1995.Conecte-se ao cliente de cada host executando cada um dos comandos a seguir em abas ou janelas de terminal separadas:
Você pode executar a consulta abaixo no clickhouse-client de cada host para confirmar que ainda não foi criado nenhum banco de dados, além dos bancos de dados padrão:
Query
Response
No cliente clickhouse-01, execute a seguinte consulta DDL distribuída usando a cláusula ON CLUSTER para criar um novo banco de dados chamado uk:
Você pode executar novamente a mesma consulta de antes a partir do cliente de cada host para confirmar que o banco de dados foi criado em todo o cluster, apesar de a consulta ter sido executada apenas a partir de clickhouse-01:
6

Crie uma tabela no cluster

Agora que o banco de dados foi criado, você criará uma tabela com replicação.Execute a seguinte consulta em qualquer um dos clientes host:
Observe que ela é idêntica à consulta usada na instrução CREATE original do tutorial do conjunto de dados de exemplo preços de imóveis do Reino Unido, exceto pela cláusula ON CLUSTER e pelo uso do motor ReplicatedMergeTree.A cláusula ON CLUSTER foi projetada para a execução distribuída de consultas DDL (Data Definition Language), como CREATE, DROP, ALTER e RENAME, garantindo que essas alterações no esquema sejam aplicadas em todos os nós de um cluster.O motor ReplicatedMergeTree funciona exatamente como o motor de tabela MergeTree comum, mas também replica os dados. Ele exige a especificação de dois parâmetros:
  • zoo_path: O path do Keeper/ZooKeeper para os metadados da tabela.
  • replica_name: O nome da réplica da tabela.

O parâmetro zoo_path pode ser definido como qualquer valor de sua escolha, embora seja recomendável seguir a convenção de usar o prefixo
onde:
  • {database} e {table} serão substituídos automaticamente.
  • {shard} e {replica} são macros que foram definidas anteriormente no arquivo config.xml de cada nó do ClickHouse.
Você pode executar a consulta abaixo no cliente de cada host para confirmar que a tabela foi criada em todo o cluster:
Query
Response
7

Inserir dados em uma tabela distribuída

Para inserir dados na tabela, ON CLUSTER não pode ser usado, pois não se aplica a consultas DML (Data Manipulation Language), como INSERT, UPDATE e DELETE. Para inserir dados, é necessário usar o motor de tabela Distributed. Como você viu no guia para configurar um cluster com 2 shards e 1 réplica, tabelas distribuídas são tabelas que têm acesso a shards localizados em diferentes hosts e são definidas com o motor de tabela Distributed. A tabela distribuída atua como a interface entre todos os shards do cluster.Em qualquer um dos clientes nos hosts, execute a consulta a seguir para criar uma tabela distribuída usando a tabela replicada existente que criamos no passo anterior:
Em cada host, agora você verá as seguintes tabelas no banco de dados uk:
Os dados podem ser inseridos na tabela uk_price_paid_distributed em qualquer um dos clientes host usando a seguinte consulta:
Execute a seguinte consulta para confirmar que os dados inseridos foram distribuídos de forma uniforme entre os nós do nosso cluster:

Conclusão

A vantagem desta topologia de cluster com 2 shards e 2 réplicas é que ela oferece escalabilidade e tolerância a falhas. Os dados são distribuídos entre hosts separados, reduzindo os requisitos de armazenamento e E/S por nó, enquanto as consultas são processadas em paralelo nos dois shards para melhorar o desempenho e a eficiência de memória. O mais importante é que o cluster pode tolerar a perda de um nó e continuar atendendo consultas sem interrupção, já que cada shard tem uma réplica de backup disponível em outro nó. A principal desvantagem desta topologia de cluster é o aumento da sobrecarga de armazenamento — ela exige o dobro da capacidade de armazenamento em comparação com uma configuração sem réplicas, já que cada shard é duplicado. Além disso, embora o cluster possa suportar a falha de um único nó, a perda simultânea de dois nós pode torná-lo inoperante, dependendo de quais nós falhem e de como os shards estejam distribuídos. Essa topologia equilibra disponibilidade e custo, tornando-a adequada para ambientes de produção em que algum nível de tolerância a falhas é necessário sem o custo de fatores de replicação mais altos. Para saber como o ClickHouse Cloud processa consultas, oferecendo escalabilidade e tolerância a falhas, consulte a seção “Parallel Replicas”.
Última modificação em 23 de julho de 2026