Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Set read/write attributes and read weights

Última atualização: Jun 26, 2026

O atributo de leitura/gravação e o peso de leitura de um endpoint de proxy de banco de dados para ApsaraDB RDS for MySQL determinam como as requisições são processadas. Ajuste essas configurações para atender às necessidades do seu negócio. Este tópico explica a lógica de processamento dos atributos de leitura/gravação e fornece instruções sobre como configure-los e seus respectivos pesos de leitura, usando o console do ApsaraDB RDS e chamando operações de API.

Pré-requisitos

Atributos de leitura/gravação

O atributo de leitura/gravação pode ser definido como Read/Write ou Read-only.

  • Read/Write: Use este modo para ative a separação de leitura/gravação e dimensionar seus serviços de forma linear.

    Neste modo, a política de acesso do endpoint do proxy de banco de dados (anteriormente conhecido como terminal de proxy) deve incluir pelo menos uma instância primária e uma instância somente leitura. Todas as requisições de gravação são enviadas à instância primária. Este modo oferece suporte a recursos de separação de leitura/gravação, como divisão de transações e pool de conexões.

  • Read-only: Indicado para cargas de trabalho somente leitura, como geração de relatórios.

    Neste modo, a política de acesso do endpoint do proxy de banco de dados deve incluir pelo menos uma instância somente leitura. A instância primária não participa do roteamento de requisições e a divisão de transações não é compatível.

    Quando o atributo de leitura/gravação de uma política de acesso de endpoint do proxy de banco de dados é definido como Read-only, o ApsaraDB RDS distribui as conexões em round-robin entre as instâncias somente leitura especificadas na política de acesso do endpoint. Cada conexão de cliente é mapeada para uma conexão em uma única instância somente leitura. A instância primária não participa dessa distribuição. O número total de conexões disponíveis é a soma das conexões de todas as instâncias somente leitura configuradas.

Nota
  • Para uma instância ApsaraDB RDS for MySQL Cluster Edition, se o atributo de leitura/gravação for definido como Read/Write, as requisições de gravação serão enviadas somente ao nó primário. Se o atributo for definido como Read-only, o nó primário não participa do roteamento, e o ApsaraDB RDS distribui as conexões em round-robin para os nós secundários especificados na política de acesso do endpoint.

  • A lista de permissões de IP do proxy de banco de dados é sincronizada com a lista de permissões de IP da instância primária.

  • Para evitar um ponto único de falha, crie pelo menos duas instâncias somente leitura para uma instância primária e distribua-as em diferentes zonas de disponibilidade. Para reduzir a latência de rede causada por acesso entre zonas, ative o recurso de acesso mais próximo. Para mais informações, consulte Configure o acesso mais próximo.

Lógica de processamento dos atributos de leitura/gravação

Atributo de leitura/gravação

Método de distribuição de peso

Peso de leitura da instância primária

Operação normal

Última instância somente leitura excluída

Todas as instâncias somente leitura com falha

Read-only

distribuição automática ou personalizada

O peso de leitura da instância primária não pode ser definido.

  • Instância primária: sem leitura nem gravação (sem encaminhamento).

  • Política de acesso ao proxy: leitura permitida, gravação não permitida.

  • Instância primária: sem leitura nem gravação (sem encaminhamento).

  • Política de acesso ao proxy: sem leitura nem gravação (erro de conexão).

  • Instância primária: sem leitura nem gravação (sem encaminhamento).

  • Política de acesso ao proxy: sem leitura nem gravação (erro de conexão).

Read/Write

distribuição automática

Igual a 0

Para mais informações, consulte Regras padrão de distribuição de peso de leitura.

  • Instância primária: sem leitura, mas com gravação.

  • Política de acesso ao proxy: leitura e gravação permitidas.

  • Instância primária: leitura e gravação permitidas.

  • Política de acesso ao proxy: leitura e gravação permitidas.

  • Instância primária: leitura e gravação permitidas.

  • Política de acesso ao proxy: leitura e gravação permitidas.

personalizado

Maior que 0

  • Instância primária: leitura e gravação permitidas.

  • Política de acesso ao proxy: leitura e gravação permitidas.

  • Instância primária: leitura e gravação permitidas.

  • Política de acesso ao proxy: leitura e gravação permitidas.

  • Instância primária: leitura e gravação permitidas.

  • Política de acesso ao proxy: leitura e gravação permitidas.

Igual a 0

  • Instância primária: sem leitura, mas com gravação.

  • Política de acesso ao proxy: leitura e gravação permitidas.

  • Instância primária: leitura e gravação permitidas.

  • Política de acesso ao proxy: leitura e gravação permitidas.

  • Instância primária: leitura e gravação permitidas.

  • Política de acesso ao proxy: leitura e gravação permitidas.

Nota
  • Sem encaminhamento: no modo Read-only, a instância primária não participa do encaminhamento de requisições de leitura.

  • Erro de conexão: no modo Read-only, se a política de acesso ao proxy não permitir leitura nem gravação, as conexões falham com erro.

  • No modo Read/Write, quando o peso de leitura da instância primária é definido como 0, as requisições de leitura não são encaminhadas à instância primária por padrão. Contudo, serão encaminhadas à instância primária se todas as instâncias somente leitura ficarem indisponíveis, se um hint forçar o roteamento ou se a divisão de transações estiver ativada.

Impacto das alterações de peso nas operações

Nota

Para visualize a versão secundária do motor do proxy de banco de dados, consulte Visualizar a versão secundária do motor do proxy de banco de dados. Para atualizar a versão secundária do motor, consulte Atualizar a versão secundária do motor do proxy de banco de dados.

Ação

Versão do motor 2.8.41 ou posterior

Versão do motor anterior à 2.8.41

Ao iniciar uma nova sessão, ela se conecta a um nó com peso de leitura igual a 0?

Não

Não

Se o peso de leitura de um nó for alterado de um valor diferente de zero para 0, o nó é removido das sessões existentes?

Não

Não

Se o peso de leitura de um nó for alterado de um valor diferente de zero para 0, as requisições nas sessões existentes são roteadas com base no novo peso?

Não

  • PS protocol: No

  • Text protocol: Yes

Se o peso de leitura de um nó for alterado de 0 para um valor diferente de zero, o nó é adicionado às sessões existentes?

Não

Sim

Se o peso de leitura de um nó for alterado de 0 para um valor diferente de zero, as requisições nas sessões existentes são roteadas com base no novo peso?

Não

  • PS protocol: No

  • Text protocol: Yes

Remover um nó somente leitura com peso de leitura diferente de zero causa uma conexão transitória nas sessões existentes?

Não

Nota

Embora as versões do proxy de banco de dados da série 2.x ofereçam o mecanismo retry_failed_reads, remover um nó somente leitura enquanto um conjunto de resultados está sendo retornado pode ainda causar uma conexão transitória.

Sim

Remover um nó somente leitura com peso de leitura igual a 0 causa uma conexão transitória nas sessões existentes?

Não

Uma conexão transitória ocorre somente se o nó estiver processando requisições ativas.

Ao encerrar uma conexão em um nó somente leitura com peso de leitura igual a 0, a conexão é terminada?

Sim

Para versões do proxy de banco de dados da série 1.x, a conexão é terminada se o número de sessões ativas (active_session) não cair para 0. Caso contrário, a conexão não é terminada e a conexão encerrada é reestabelecida automaticamente.

Ao encerrar uma conexão em um nó somente leitura com peso de leitura diferente de zero, a conexão é terminada?

Algoritmos de balanceamento de carga

Versões anteriores à 2.25.4: apenas o balanceamento de carga baseado em peso é compatível.

As versões 2.25.4 e posteriores adicionam suporte ao balanceamento de carga baseado no número de requisições ativas. As duas políticas de roteamento a seguir são compatíveis:

  • Balanceamento de carga baseado no número de requisições ativas (versão 2.25.4 e posteriores)

  • Balanceamento de carga baseado em peso (todas as versões)

Recomendamos o balanceamento de carga baseado no número de requisições ativas, pois oferece melhor desempenho em picos e reduz o impacto de uma falha em um único nó sobre todo o cluster.

Balanceamento de carga baseado em peso

As requisições de leitura são distribuídas com base na proporção de peso dos nós. Este método utiliza um algoritmo de round-robin ponderado suave e o valor current_weight de cada nó para distribuir as requisições de leitura conforme seus pesos. O processo é o seguinte:

  1. Regra de seleção: em cada rodada de agendamento, o nó com o maior valor de current_weight é selecionado. Se vários nós tiverem o mesmo peso mais alto, o nó que aparece primeiro na lista de configuração tem prioridade.

  2. Acumulação de peso: após cada rodada de agendamento, o valor de current_weight de cada nó aumenta pelo seu próprio peso atribuído.

  3. Redefinição de peso: se um nó for selecionado, seu current_weight é reduzido pela soma dos pesos de todos os nós.

Exemplo:

O peso de leitura do nó primário é 100, o peso de leitura do nó somente leitura 1 é 200 e o peso de leitura do nó somente leitura 2 é 200.

Rodada

current_weight do nó primário

current_weight do nó somente leitura 1

current_weight do nó somente leitura 2

Nó roteado

1

0

0

0

Primary node

2

-400

200

200

Read-only node 1

3

-300

-100

400

Read-only node 2

4

-200

100

100

Read-only node 1

5

-100

-200

300

Read-only node 2

6

0

0

0

Primary node

Balanceamento de carga baseado no número de requisições ativas

As requisições são priorizadas para os nós com menor carga. A regra é rotear requisições para o nó com o menor valor de (Number of active requests / Node weight).

Exemplo:

O peso de leitura do nó primário é 100, o peso de leitura do nó somente leitura 1 é 200 e o peso de leitura do nó somente leitura 2 é 200.

Rodada

Requisições ativas no nó primário

Requisições ativas no nó somente leitura 1

Requisições ativas no nó somente leitura 2

Nó roteado

1

1

(Number of active requests / Node weight) = 1/100 = 0.01

5

(Number of active requests / Node weight) = 5/200 = 0.025

6

(Number of active requests / Node weight) = 6/200 = 0.03

Primary node

2

2

4

6

Read-only node 1

3

2

5

3

Read-only node 2

4

1

2

3

Read-only node 1

5

1

2

1

Read-only node 2

6

0

3

3

Primary node

Procedimento

  1. Acesse a página RDS Instances, selecione uma região na barra de navegação superior e clique em no ID da instância de destino.

  2. No painel de navegação à esquerda, clique em Database Proxy.

  3. Na seção Connection Information, localize o endpoint do proxy de banco de dados de destino e clique em Modify Configuration na coluna Actions.

  4. Na caixa de diálogo exibida, ao lado de Read/Write Attributes, selecione Read/Write (Read/Write Splitting) ou Read-only (Primary Instance Not Connected to Receive Write Requests).

  5. Na seção Read Weight Allocation, selecione Automatic ou Custom.

    • Automatic: O sistema distribui automaticamente um peso de leitura para cada instância com base em suas especificações. Novas instâncias somente leitura adicionadas à instância primária recebem automaticamente um peso de leitura conforme a regra de distribuição do sistema e são incluídas na configuração de separação de leitura/gravação.

    • Custom: Defina manualmente um peso de leitura para cada instância. O valor deve estar no intervalo de 0 a 10.000. Novas instâncias somente leitura têm peso de leitura padrão igual a 0 e precisam ser configuradas manualmente.

Nota
  • O recurso de acesso mais próximo garante que as requisições sejam encaminhadas do aplicativo ao proxy de banco de dados. A configuração de peso de leitura garante que as requisições sejam encaminhadas do proxy de banco de dados aos bancos de dados de backend, sem interferência do recurso de acesso mais próximo. Use os dois recursos em conjunto para minimizar a latência de acesso.

  • Quanto maior o peso de leitura de uma instância, mais requisições de leitura ela processa. Por exemplo, considere uma instância primária com três instâncias somente leitura cujos pesos de leitura são 0, 100, 200 e 200, respectivamente. Isso indica que a instância primária não processa requisições de leitura (as requisições de gravação ainda são enviadas automaticamente à instância primária). As três instâncias somente leitura processam requisições de leitura na proporção de 1:2:2.

  • Ao excluir uma instância somente leitura, seu peso de leitura é removido automaticamente, enquanto os pesos das demais instâncias permanecem inalterados.

  • Não é possível defina um peso de leitura para uma instância que tenha um atraso de replicação configurado.

  • A alteração entra em vigor imediatamente e não causa interrupções de serviço. O impacto dos novos pesos nas conexões existentes, porém, depende da versão do motor do proxy de banco de dados. Para mais detalhes, consulte a seção "Impacto das alterações de peso nas operações".

APIs relacionadas

API

Descrição

DescribeDBProxy

Consulta os detalhes do proxy de banco de dados de uma instância rds.

DescribeDBProxyEndpoint

Consulta a configuração de um endpoint do proxy de banco de dados de uma instância ApsaraDB RDS.

ModifyDBProxyEndpoint

Modifique a configuração de um endpoint do proxy de banco de dados de uma instância ApsaraDB RDS.

Apêndice 1: Rotear instruções SQL com hints

Além de usar o sistema de distribuição de peso de separação de leitura/gravação, você pode usar hints de SQL para rotear instruções SQL específicas para as instâncias primária e somente leitura de uma instância High-availability Edition, ou para os nós primário e secundário de uma instância Cluster Edition.

Os seguintes formatos de hint são compatíveis com a separação de leitura/gravação do ApsaraDB RDS:

Para instâncias ApsaraDB RDS for MySQL High-availability Edition:

  • /*FORCE_MASTER*/: Roteia a instrução SQL subsequente para a instância primária.

  • /*FORCE_SLAVE*/: Roteia a instrução SQL subsequente para uma instância somente leitura.

Para instâncias ApsaraDB RDS for MySQL Cluster Edition:

  • /*FORCE_MASTER*/: Roteia a instrução SQL subsequente para o nó primário.

  • /*FORCE_SLAVE*/: Roteia a instrução SQL subsequente para um nó secundário.

Nota
  • Para uma instância ApsaraDB RDS for MySQL High-availability Edition, ao usar o hint /FORCE_MASTER/, a instrução SQL é roteada para a instância primária mesmo que o peso de leitura da instância primária seja 0.

  • Para uma instância ApsaraDB RDS for MySQL Cluster Edition, ao usar o hint /FORCE_MASTER/, a instrução SQL é roteada para o nó primário mesmo que o peso de leitura do nó primário seja 0.

Por exemplo, para uma instância ApsaraDB RDS for MySQL High-availability Edition, ao adicionar o hint no início da instrução a seguir, ela é roteada para a instância primária independentemente das configurações de peso de leitura.

/*FORCE_MASTER*/ SELECT * FROM table_name;

Apêndice 2: Retirar uma instância somente leitura do ar sem interrupção

Suponha que você tenha um ambiente de separação de leitura/gravação composto por uma instância primária A e duas instâncias somente leitura B e C. Para retirar a instância somente leitura C do ar sem interrupção de serviço, siga estas etapas:

  1. Acesse a página RDS Instances, selecione uma região e clique em no ID da instância A.

  2. No painel de navegação à esquerda, clique em Database Proxy. Na seção Connection Topology Management, clique em Modify Configuration.

  3. Na caixa de diálogo Modify Proxy Endpoint (Terminal) Configuration, defina o peso de leitura da instância somente leitura C como 0.

    Selecione Custom para o método de distribuição de peso de leitura e defina o peso de leitura da instância somente leitura C como 0.

  4. Na página Monitoring and Alerts da instância somente leitura C, monitore o gráfico Session Connection e aguarde a métrica active_session cair para 0.

    Nota

    Verifique apenas se active_session é igual a 0. Se o valor não cair para 0 após um longo período, encerre as sessões manualmente.

  5. Na guia Database Proxy da instância primária A, remova a instância somente leitura C do endpoint do proxy de banco de dados.