Pré-requisitos
- Seu serviço precisa de 2 ou mais réplicas. Em um serviço com apenas uma réplica, não há nada ao que se vincular.
- Disponível no Enterprise por padrão quando o recurso estiver em GA.
- Compatível com os serviços padrão do ClickHouse Cloud. O BYOC ainda não é compatível.
Configurando o roteamento com reconhecimento de réplicas
session_id até receber a confirmação; X-ClickHouse-Replica-Tag não fornecerá roteamento sticky até que o rollout chegue ao seu serviço. Não é necessário reiniciar.
Roteamento baseado em HTTP
- X-ClickHouse-Replica-Tag (preferido)
- session_id (legado)
Para direcionar uma workload a uma réplica específica, envie o header Para clickhouse-go (v2), defina
X-ClickHouse-Replica-Tag na interface HTTPS. O proxy usa hash consistente do valor do header; assim, as requests que compartilham esse valor são direcionadas à mesma réplica enquanto o número de réplicas permanecer inalterado. Um valor diferente recebe um hash independente e pode ser direcionado à mesma réplica ou a outra, mas você não escolhe a qual réplica um valor é mapeado.Use o hostname do service existente. Não são necessários hostnames sticky especiais nem alterações de DNS. O valor do header pode ser qualquer string à sua escolha, como o nome de uma aplicação, o ID de um usuário ou o label da workload. Requests sem o header continuam usando o load balancing normal.Defina o header X-ClickHouse-Replica-Tag em cada request:Protocol: clickhouse.HTTP e passe o cabeçalho usando a opção de conexão HttpHeaders.X-ClickHouse-Replica-Tag fornece afinidade com a réplica sem criar uma sessão HTTP do ClickHouse. Solicitações simultâneas podem reutilizar a mesma tag sem encontrar SESSION_IS_LOCKED.Consistência de leitura após gravação
Em um serviço com várias réplicas, uma gravação em uma réplica pode não ficar visível nas demais até que a replicação seja concluída. Envie a gravação com um cabeçalhoX-ClickHouse-Replica-Tag e reutilize o mesmo valor do cabeçalho nas leituras subsequentes. O proxy encaminha ambas para a mesma réplica, para que você leia sua própria gravação mesmo enquanto as outras réplicas ainda estiverem atrasadas. Esse padrão é adequado para workloads que gravam e, em seguida, leem imediatamente os mesmos dados, como aplicações interativas ou jobs de ETL que validam inserts antes de continuar.Para obter garantias mais amplas em todas as réplicas, também é possível definir select_sequential_consistency como 1 no ClickHouse Cloud.Verifique qual réplica foi acessada
Execute novamente o exemploSELECT hostName() com o mesmo valor de X-ClickHouse-Replica-Tag. Você deverá obter o mesmo hostname enquanto o número de réplicas permanecer inalterado. Um valor de cabeçalho diferente pode ser mapeado para outra réplica.Roteamento baseado em subdomínio legado
Como funciona o roteamento baseado em subdomínio legado
Como funciona o roteamento baseado em subdomínio legado
Anteriormente, habilitar o roteamento com reconhecimento de réplicas permitia usar um subdomínio curinga sobre o hostname do serviço. Para um serviço com o host name
abcxyz123.us-west-2.aws.clickhouse.cloud, qualquer hostname correspondente a *.sticky.abcxyz123.us-west-2.aws.clickhouse.cloud (por exemplo, aaa.sticky.abcxyz123.us-west-2.aws.clickhouse.cloud) era mapeado pelo Envoy, via hash, para uma réplica consistente. O hostname original continuava usando balanceamento de carga LEAST_CONNECTION, o algoritmo de roteamento padrão.Limitações do roteamento com reconhecimento de réplicas
A afinidade muda quando a contagem de réplicas muda
O roteamento com reconhecimento de réplicas não é isolamento de workload
Private Link e o método de subdomínio legado
*.sticky.*, e uma configuração incorreta pode desequilibrar a carga entre as réplicas.
O roteamento com reconhecimento de réplicas exige o protocolo HTTP
Solução de problemas
- Confirme que você está usando o método de roteamento disponível para seu serviço: o header
X-ClickHouse-Replica-Tagou o parâmetro de consulta de URL legadosession_id. - Confirme que cada solicitação usa exatamente o mesmo valor de roteamento.
- Aguarde um pouco após a ativação. Pode levar menos de um minuto para surtir efeito.
- Verifique se o número de réplicas mudou recentemente; é esperado que haja remapeamento após o escalonamento. Use
SELECT hostName()para descobrir o novo mapeamento.