Comutação
O Switchover altera a direção primária-em espera sem perda de dados. Utilize-o quando o cluster primário atual ainda estiver acessível ou quando precisar de mover o tráfego para manutenção.
Este guia assume que a topologia atual é:
cluster-a (primary) -> cluster-b (standby)
Após o switchover, a topologia torna-se:
cluster-b (primary) -> cluster-a (standby)
Quando usar o switchover
Use o switchover quando:
- Você está fazendo manutenção no primário atual.
- O primário está parcialmente degradado, mas ainda pode responder às solicitações.
- É necessário RPO = 0 e não é possível aceitar a perda de dados.
Não utilize o switchover se o primário estiver completamente indisponível. Nesse caso, use o Failover.
Antes de começar
Verifique o seguinte antes de começar:
- Ambos os clusters estão acessíveis.
- A replicação do CDC está íntegra.
- O atraso do CDC é baixo o suficiente para sua meta de tempo de recuperação.
- As gravações de aplicativos podem ser pausadas ou tentadas novamente durante a mudança de função.
- Você preparou a nova configuração de topologia.
A alternância não garante perda de dados, mas o tempo de operação depende da quantidade de dados que ainda precisam ser replicados.
Criar a nova topologia
Crie uma configuração de substituição completa em que cluster-b se torna a origem e cluster-a se torna o destino.
# If you followed Set Up CDC Replication, cluster A is the original source cluster,
# and cluster B is the original target cluster.
cluster_a_id = source_cluster_id
cluster_a_addr = source_cluster_addr
cluster_a_client_addr = source_client_addr
cluster_a_token = source_cluster_token
cluster_a_pchannels = source_cluster_pchannels
cluster_b_id = target_cluster_id
cluster_b_addr = target_cluster_addr
cluster_b_client_addr = target_client_addr
cluster_b_token = target_cluster_token
cluster_b_pchannels = target_cluster_pchannels
switchover_config = {
"clusters": [
{
"cluster_id": cluster_a_id,
"connection_param": {
"uri": cluster_a_addr,
"token": cluster_a_token,
},
"pchannels": cluster_a_pchannels,
},
{
"cluster_id": cluster_b_id,
"connection_param": {
"uri": cluster_b_addr,
"token": cluster_b_token,
},
"pchannels": cluster_b_pchannels,
},
],
"cross_cluster_topology": [
{
"source_cluster_id": cluster_b_id,
"target_cluster_id": cluster_a_id,
}
],
}
Aplicar a nova topologia
Aplique a mesma configuração aos dois clusters. Envie a solicitação para o primário atual primeiro e, em seguida, envie-a para o standby. Se, mais tarde, você voltar, inverta a ordem, pois cluster-b é o primário atual.
from pymilvus import MilvusClient
client_a = MilvusClient(uri=cluster_a_client_addr, token=cluster_a_token)
client_b = MilvusClient(uri=cluster_b_client_addr, token=cluster_b_token)
try:
client_a.update_replicate_configuration(**switchover_config)
client_b.update_replicate_configuration(**switchover_config)
finally:
client_a.close()
client_b.close()
O primário antigo é despromovido a standby e rejeita novas gravações. O standby antigo aguarda os dados replicados restantes, promove-se a primário e, em seguida, aceita gravações.
Se o pedido falhar devido a um erro transitório de rede ou de serviço, tente novamente com a mesma configuração.
Redirecionar o tráfego de aplicações
Depois que cluster-b se tornar primário:
- Aponte o tráfego de gravação para
cluster-b. - Confirme se as leituras e gravações são bem-sucedidas em
cluster-b. - Confirme que
cluster-ajá não está a receber escritas de aplicações. - Continue a monitorizar a replicação de
cluster-bparacluster-a.
Verificar o resultado
Verifique se cluster-b está servindo como o novo primário e se os dados permanecem consistentes. As verificações comuns incluem:
- Comparar a contagem de linhas para coleções importantes.
- Consultar chaves primárias conhecidas de ambos os clusters.
- Executar uma pesquisa representativa no novo primário e no antigo standby.
- Executar uma pequena gravação em
cluster-be confirmar que ela é replicada paracluster-a.
Voltar atrás
Para voltar a alternar mais tarde, aplique a topologia original novamente:
cluster-a -> cluster-b
Use o mesmo fluxo de comutação. Certifique-se de que o primário atual está acessível e que a replicação é saudável antes de voltar atrás.
PERGUNTAS FREQUENTES
O switchover perde dados?
Não. O switchover aguarda que os dados restantes sejam replicados antes que o standby se torne primário.
Preciso de parar as gravações da aplicação?
Você deve pausar as gravações ou fazer com que elas possam ser tentadas novamente durante a mudança de função. As gravações enviadas para o antigo primário depois de este ser despromovido são rejeitadas.
Por que é que a transição demora mais tempo do que o esperado?
A razão mais comum é o atraso do CDC. O novo primário deve receber os dados restantes antes de poder assumir o controlo com segurança com RPO = 0.
Posso tentar novamente um pedido de comutação falhado?
Sim. Tente novamente com a mesma topologia de destino.
O que acontece com o primário antigo?
O primário antigo torna-se um standby. Ele não deve mais receber gravações de aplicativos.