Cada endpoint de proxy de banco de dados do ApsaraDB RDS for MySQL possui duas configurações que controlam o roteamento do tráfego SQL: um read/write attribute (define quais nós processam gravações e leituras) e um peso de leitura (determina como o tráfego de leitura é distribuído entre esses nós). A configuração correta desses parâmetros permite dimensionar o throughput de leitura, isolar cargas de trabalho de relatórios e executar manutenções com segurança, sem interromper o service.
Pré-requisitos
Antes de começar, verifique se você tem:
Enabled the database proxy para sua instância RDS
-
Uma instância executando a High-availability Edition ou Cluster Edition
High-availability Edition: Create at least one read-only instance para ativar a separação de leitura/gravação
Cluster Edition: Os nós primário e secundário gerenciam a separação de leitura/gravação nativamente
Atributos de leitura/gravação
Escolha um modo
|
Modo |
Mais indicado para |
Solicitações de gravação |
Solicitações de leitura |
|
Leitura/Gravação |
Dimensionar o throughput de leitura nas instâncias primária e somente leitura |
Sempre roteadas para a instância primária |
Distribuídas pelos nós configurados com base no peso |
|
Somente leitura |
Isolar cargas de trabalho somente leitura, como relatórios |
Não aceitas — os clientes recebem um erro de conexão |
Distribuídas entre as instâncias somente leitura em round-robin |
O modo Leitura/Gravação exige pelo menos uma instância primária e uma instância somente leitura na política de acesso do proxy. Ele oferece suporte a transaction splitting e connection pools.
O modo Somente leitura requer pelo menos uma instância somente leitura. A instância primária não participa do roteamento e não há suporte para separação de transações. Cada conexão de cliente mapeia para uma única conexão em uma instância somente leitura. A capacidade total de conexões equivale à soma das conexões de todas as instâncias somente leitura configuradas.
Para instâncias da Cluster Edition, o modo Leitura/Gravação envia gravações apenas ao nó primário, enquanto o modo Somente leitura roteia as leituras para os nós secundários em round-robin. A lista de permissões de IP do proxy de banco de dados permanece sincronizada automaticamente com a lista de permissões da instância primária.
Comportamento de roteamento em casos extremos
A tabela abaixo mostra o que acontece no modo Leitura/Gravação quando as instâncias somente leitura ficam indisponíveis e no modo Somente leitura em todos os cenários de peso.
|
Modo |
Método de peso |
Peso da primária |
Operação normal |
Última instância somente leitura excluída |
Todas as instâncias somente leitura falham |
|
Somente leitura |
Atribuído pelo sistema ou Personalizado |
Não pode ser definido |
Primária: sem leituras ou gravações (sem encaminhamento). Proxy: legível, não gravável |
Primária: sem leituras ou gravações. Proxy: erro de conexão |
Primária: sem leituras ou gravações. Proxy: erro de conexão |
|
Leitura/Gravação |
Atribuído pelo sistema |
0 (padrão) |
Primária: apenas gravações, sem leituras. Proxy: leituras e gravações |
Primária: leituras e gravações. Proxy: leituras e gravações |
Primária: leituras e gravações. Proxy: leituras e gravações |
|
Leitura/Gravação |
Personalizado |
Maior que 0 |
Primária: leituras e gravações. Proxy: leituras e gravações |
Primária: leituras e gravações. Proxy: leituras e gravações |
Primária: leituras e gravações. Proxy: leituras e gravações |
|
Leitura/Gravação |
Personalizado |
0 |
Primária: apenas gravações, sem leituras. Proxy: leituras e gravações |
Primária: leituras e gravações. Proxy: leituras e gravações |
Primária: leituras e gravações. Proxy: leituras e gravações |
No modo Somente leitura, "sem encaminhamento" significa que a instância primária não aceita solicitações de leitura. Se o proxy não tiver instâncias legíveis, os clientes receberão um erro de conexão.
No modo Leitura/Gravação com o peso da primária definido como 0, as leituras não são enviadas à instância primária por padrão. As leituras vão para a instância primária apenas se um nó somente leitura estiver íntegro, se um hint forçar o roteamento para ela ou se a separação de transações estiver ativada.
Algoritmos de balanceamento de carga
O proxy oferece suporte a dois algoritmos para distribuir solicitações de leitura entre os nós.
Versões anteriores à 2.25.4: Apenas o balanceamento de carga baseado em peso está disponível.
Versões 2.25.4 e posteriores: Ambos os algoritmos estão disponíveis. Use o balanceamento de carga baseado em solicitações ativas, a menos que tenha um motivo específico para preferir a distribuição estrita por peso — ele oferece melhor desempenho de pico para clusters e reduz o impacto da falha de um único nó.
Balanceamento de carga baseado em solicitações ativas (recomendado)
Roteia cada solicitação para o nó com a menor proporção (Active Requests / Node Weight). Esse método se adapta em tempo real a cargas desiguais e sofre menos impacto de nós lentos.
Exemplo com peso da primária 100, peso do nó somente leitura 1 igual a 200 e peso do nó somente leitura 2 igual a 200:
|
Rodada |
Solicitações ativas da primária |
Solicitações ativas do nó somente leitura 1 |
Solicitações ativas do nó somente leitura 2 |
Roteado para |
|
1 |
1 (proporção: 0,01) |
5 (proporção: 0,025) |
6 (proporção: 0,03) |
Nó primário |
|
2 |
2 |
4 |
6 |
Nó somente leitura 1 |
|
3 |
2 |
5 |
3 |
Nó somente leitura 2 |
|
4 |
1 |
2 |
3 |
Nó somente leitura 1 |
|
5 |
1 |
2 |
1 |
Nó somente leitura 2 |
|
6 |
0 |
3 |
3 |
Nó primário |
Balanceamento de carga baseado em peso
Distribui as solicitações de leitura estritamente pela proporção de peso usando um algoritmo round-robin. Cada rodada de agendamento seleciona o nó com o maior valor de current_weight e depois ajusta os pesos da seguinte forma:
Seleção: O nó com o maior
current_weighté selecionado. Empates são resolvidos pela posição na lista de configuração.Acumulação: Após cada rodada, o
current_weightde cada nó aumenta pelo seu próprio peso.Redefinição: O
current_weightdo nó selecionado é reduzido pela soma dos pesos de todos os nós.
Exemplo com peso da primária 100, peso do nó somente leitura 1 igual a 200 e peso do nó somente leitura 2 igual a 200:
|
Rodada |
**current_weight da primária** |
**current_weight do nó somente leitura 1** |
**current_weight do nó somente leitura 2** |
Roteado para |
|
1 |
0 |
0 |
0 |
Nó primário |
|
2 |
−400 |
200 |
200 |
Nó somente leitura 1 |
|
3 |
−300 |
−100 |
400 |
Nó somente leitura 2 |
|
4 |
−200 |
100 |
100 |
Nó somente leitura 1 |
|
5 |
−100 |
−200 |
300 |
Nó somente leitura 2 |
|
6 |
0 |
0 |
0 |
Nó primário |
Configure atributos de leitura/gravação e pesos de leitura
Acesse a página RDS Instances. Na barra de navegação superior, selecione uma região e clique em no ID da instância de destino.
No painel de navegação à esquerda, clique em Database Proxy.
Na seção Connection Information, localize o endpoint de proxy de destino e clique em Modify Configuration na coluna Actions.
-
Na caixa de diálogo, defina Read/Write Attributes como uma das opções a seguir:
Read/Write (Read/Write Splitting)
Read-only (Primary Instance Not Connected to Receive Write Requests)
-
Na seção Read Weight Allocation, selecione um método de peso:
Método
Comportamento
Quando usar
Automatic Distribution
O sistema atribui pesos com base no tipo de instância. Novas instâncias somente leitura são incluídas automaticamente com system-assigned weights — nenhuma atualização manual necessária.
Clusters homogêneos em que a capacidade das instâncias é semelhante
Custom
Defina um peso explícito (0–10.000) para cada instância. Novas instâncias somente leitura têm peso padrão 0 e devem ser configuradas manualmente.
Clusters heterogêneos em que você deseja controle preciso sobre a distribuição de tráfego
Como funcionam os pesos: Um peso maior significa mais solicitações de leitura. Por exemplo, se a primária tiver peso 0 e três instâncias somente leitura tiverem pesos 100, 200 e 200, as leituras serão distribuídas na proporção 1:2:2. A primária ainda recebe todas as gravações.
O peso de leitura controla como o proxy distribui as leituras para os bancos de dados de back-end e é independente do recurso nearest access . Use ambos juntos para minimizar a latência.
Instâncias com replication delay configurado não podem ter seu peso definido.
Excluir uma instância somente leitura remove seu peso automaticamente. Os pesos das outras instâncias permanecem inalterados.
As alterações de peso entram em vigor imediatamente, sem interrupção do service. As conexões existentes não são desconectadas; tanto as novas quanto as existentes são roteadas com base nos pesos atualizados.
Antes de remover uma instância somente leitura do proxy: Defina seu peso como 0 primeiro, aguarde as sessões ativas serem drenadas e então remova-a. Consulte Tire uma instância somente leitura de operação sem interrupção do service para obter o procedimento completo.
Efeito das alterações de peso nas sessões existentes
O comportamento das alterações de peso nas sessões ativas depende da versão do mecanismo do proxy de banco de dados. Para verificar ou atualizar sua versão, consulte View the minor engine version of a database proxy e Upgrade the minor engine version of a database proxy.
|
Cenário |
Versão do mecanismo 2.8.41 e posterior |
Anterior à 2.8.41 |
|
Nova sessão se conecta a um nó com peso 0? |
Não |
Não |
|
Peso alterado de diferente de zero para 0: nó removido das sessões existentes? |
Não |
Não |
|
Peso alterado de diferente de zero para 0: sessões existentes roteadas pelo novo peso? |
Não |
Protocolo PS (Prepared Statement): Não. Protocolo baseado em texto: Sim |
|
Peso alterado de 0 para diferente de zero: nó adicionado às sessões existentes? |
Não |
Sim |
|
Peso alterado de 0 para diferente de zero: sessões existentes roteadas pelo novo peso? |
Não |
Protocolo PS: Não. Protocolo baseado em texto: Sim |
|
Remover um nó somente leitura com peso diferente de zero causa conexões transitórias? |
Não. O proxy possui um mecanismo |
Sim |
|
Remover um nó somente leitura com peso 0 causa conexões transitórias? |
Não |
Sim, se houver solicitações sendo executadas nesse nó no momento da remoção; caso contrário, Não |
|
Encerrar uma conexão em um nó somente leitura com peso 0: a conexão é terminada? |
Sim |
Proxy 1.x: terminada apenas se existirem sessões ativas; caso contrário, a conexão não é terminada e é restabelecida automaticamente |
|
Encerrar uma conexão em um nó somente leitura com peso diferente de zero: a conexão é terminada? |
— |
— |
Práticas recomendadas
Tire uma instância somente leitura de operação sem interrupção do service
Para remover uma instância somente leitura (por exemplo, a instância C em um cluster com a primária A e as instâncias somente leitura B e C) sem interromper o tráfego:
Acesse a página RDS Instances, selecione a região e clique em no ID da instância primária A.
No painel de navegação à esquerda, clique em Database Proxy. Na seção Connection Topology Management, clique em Modify Configuration.
Na caixa de diálogo Modify Proxy Endpoint (Terminal) Configuration, defina o peso de leitura do nó somente leitura C como 0.
-
Acesse a página Monitoring and Alerts da instância somente leitura C. Na seção Session Connection, monitore a métrica
active_sessione aguarde até que ela caia para 0.Se
active_sessionnão chegar a 0 após uma espera razoável, encerre as sessões restantes manualmente. Na aba Database Proxy da instância primária A, remova a instância somente leitura C do endpoint de proxy.
Roteie instruções SQL específicas com hints
Use hints SQL para forçar a execução de uma instrução em um nó específico — útil para gravações dentro de um SELECT ou consultas que devem sempre usar uma instância somente leitura.
Instâncias da High-availability Edition:
/*FORCE_MASTER*/— roteia a instrução para a instância primária, mesmo que seu peso de leitura seja 0/*FORCE_SLAVE*/— roteia a instrução para uma instância somente leitura
Instâncias da Cluster Edition:
/*FORCE_MASTER*/— roteia a instrução para o nó primário, mesmo que seu peso de leitura seja 0/*FORCE_SLAVE*/— roteia a instrução para um nó secundário
Adicione o hint no início da instrução:
/*FORCE_MASTER*/ SELECT * FROM table_name;
Reduza a latência entre zonas
Para evitar um ponto único de falha, crie pelo menos duas instâncias somente leitura para uma instância primária e implante-as em zonas diferentes. Ative o recurso nearest access para minimizar a latência de rede do tráfego entre zonas. O recurso de acesso mais próximo controla como sua aplicação se conecta ao proxy; os pesos de leitura controlam como o proxy roteia as solicitações para os bancos de dados de back-end. Configure ambos juntos para obter desempenho ideal.
Perguntas frequentes
A instância primária ainda é legível após eu adicionar instâncias somente leitura?
Após a adição de instâncias somente leitura, a instância primária permanece legível e gravável o tempo todo. Adicionar instâncias somente leitura não afeta a capacidade de leitura ou gravação da instância primária.
A instância primária possui seu próprio endpoint de conexão direta. Esse endpoint conecta-se diretamente à instância primária sem passar pelo proxy de banco de dados, portanto, a instância primária é sempre legível e gravável por meio desse endpoint, independentemente da configuração de peso de leitura.
O endpoint do proxy de banco de dados é usado para separação de leitura/gravação. Quando conectado por meio do endpoint de proxy, as solicitações de leitura e gravação são roteadas com base nos pesos de leitura configurados. Quando o peso de leitura da instância primária é definido como 0, o proxy não encaminha solicitações de leitura para a instância primária por padrão. No entanto, a própria instância primária permanece legível e gravável por meio de seu endpoint de conexão direta. Quando todas as instâncias somente leitura apresentam latência superior ao limiar ou ficam indisponíveis, as solicitações de leitura são roteadas automaticamente de volta para a instância primária para garantir a continuidade dos negócios.
Para controlar o roteamento de leitura/gravação por meio do endpoint de proxy, ajuste os pesos de leitura na configuração do Database Proxy.
Referência de API
|
Operação de API |
Descrição |
|
Consulta os detalhes do proxy de banco de dados de uma instância RDS |
|
|
Consulta a política de acesso de um endpoint de proxy de banco de dados |
|
|
Modifica a política de acesso de um endpoint de proxy de banco de dados |
Próximos passos
Configure nearest access — reduza a latência roteando as conexões da aplicação para o nó de proxy mais próximo
Use the transaction splitting feature — melhore o throughput de leitura para transações mistas de leitura/gravação
Set the connection pool type — reduza a sobrecarga de conexão para cargas de trabalho de alta concorrência
Default read weight allocation rules — entenda como o sistema atribui pesos no modo Automatic Distribution