Pular para o conteúdo principal
O motor é baseado no motor Atomic. Ele oferece suporte à replicação de metadados por meio do log DDL gravado no ZooKeeper e executado em todas as réplicas de um determinado banco de dados. Um servidor ClickHouse pode ter vários bancos de dados replicados em execução e sendo atualizados ao mesmo tempo. Mas não pode haver várias réplicas do mesmo banco de dados replicado.

Criando um banco de dados

Parâmetros do motor
  • zoo_path — Caminho do ZooKeeper. O mesmo caminho no ZooKeeper corresponde ao mesmo banco de dados.
  • shard_name — Nome do shard. As réplicas do banco de dados são agrupadas em shards por shard_name.
  • replica_name — Nome da réplica. Os nomes das réplicas devem ser diferentes entre todas as réplicas do mesmo shard.
Os parâmetros podem ser omitidos; nesse caso, os parâmetros ausentes são substituídos pelos valores padrão. Se zoo_path contiver a macro {uuid}, será necessário especificar um UUID explícito ou adicionar ON CLUSTER à instrução CREATE para garantir que todas as réplicas usem o mesmo UUID para esse banco de dados. Para tabelas ReplicatedMergeTree, se nenhum argumento for fornecido, serão usados os argumentos padrão: /clickhouse/tables/{uuid}/{shard} e {replica}. Eles podem ser alterados nas configurações do servidor default_replica_path e default_replica_name. A macro {uuid} é expandida para o UUID da tabela; {shard} e {replica} são expandidas para valores da configuração do servidor, e não dos argumentos do motor do banco de dados. No futuro, porém, será possível usar shard_name e replica_name do banco de dados Replicated. Também há suporte a um cluster ZooKeeper auxiliar para armazenar os metadados de um banco de dados replicado, em vez de usar o cluster ZooKeeper padrão. Podemos usar SQL para criar o banco de dados replicado com um cluster ZooKeeper auxiliar da seguinte forma:

Especificidades e recomendações

As consultas DDL com um banco de dados Replicated funcionam de forma semelhante às consultas ON CLUSTER, mas com pequenas diferenças. Primeiro, a solicitação DDL tenta ser executada no iniciador (o host que recebeu originalmente a solicitação do usuário). Se a solicitação não for concluída, o usuário receberá um erro imediatamente, e os outros hosts não tentarão concluí-la. Se a solicitação for concluída com sucesso no iniciador, todos os outros hosts tentarão novamente automaticamente até concluí-la. O iniciador tentará aguardar a conclusão da consulta nos outros hosts (por no máximo distributed_ddl_task_timeout) e retornará uma tabela com os status de execução da consulta em cada host. O comportamento em caso de erros é controlado pela configuração distributed_ddl_output_mode; para um banco de dados Replicated, é melhor defini-la como null_status_on_timeout — ou seja, se alguns hosts não tiverem tempo de executar a solicitação dentro de distributed_ddl_task_timeout, não gere uma exceção, mas mostre o status NULL deles na tabela. A tabela de sistema system.clusters contém um cluster com o mesmo nome do banco de dados replicado, composto por todas as réplicas do banco de dados. Esse cluster é atualizado automaticamente ao criar/excluir réplicas e pode ser usado para tabelas Distributed. Ao criar uma nova réplica do banco de dados, essa réplica cria as tabelas por conta própria. Se a réplica tiver ficado indisponível por muito tempo e estiver atrasada em relação ao log de replicação, ela verificará seus metadados locais em relação aos metadados atuais no ZooKeeper, moverá as tabelas extras com dados para um banco de dados separado não replicado (para não excluir acidentalmente nada desnecessário), criará as tabelas ausentes e atualizará os nomes das tabelas, caso tenham sido renomeadas. Os dados são replicados no nível do ReplicatedMergeTree, ou seja, se a tabela não for replicada, os dados não serão replicados (o banco de dados é responsável apenas pelos metadados). As consultas ALTER TABLE FREEZE|ATTACH|FETCH|DROP|DROP DETACHED|DETACH PARTITION|PART são permitidas, mas não são replicadas. O motor do banco de dados apenas adicionará/buscará/removerá a partição/parte na réplica atual. No entanto, se a própria tabela usar um motor de tabela Replicated, os dados serão replicados após o uso de ATTACH. Caso você precise apenas configurar um cluster sem manter a replicação das tabelas, consulte o recurso Cluster Discovery.

Exemplo de uso

Para criar um cluster com três hosts:
Criando um banco de dados no cluster com parâmetros implícitos:
Executando a consulta DDL:
Exibindo a tabela do sistema:
Criando uma tabela distribuída e inserindo os dados:
Adicionando uma réplica em outro host:
Adicionando uma réplica em outro host se a macro {uuid} for usada em zoo_path:
A configuração do cluster ficará assim:
A tabela distribuída também receberá dados do novo host:

Configurações

As seguintes configurações são suportadas: Os valores padrão podem ser substituídos no arquivo de configuração
Última modificação em 3 de julho de 2026