Operações de O&M, como switchovers na sua instância ApsaraDB RDS for MySQL, podem causar quedas de conexão que afetam suas aplicações. O recurso de conexão persistente evita essas interrupções ao manter as conexões ativas durante essas operações, o que melhora a disponibilidade e reduz os custos de O&M.
Visão geral
O recurso de conexão persistente do proxy de banco de dados para ApsaraDB RDS for MySQL garante que as conexões entre sua aplicação e o proxy permaneçam ativas durante eventos como switchovers de instância. Isso evita que as aplicações conectadas por meio de um endpoint de proxy de banco de dados recebam mensagens de erro de conexão, conforme ilustram as figuras a seguir.


Como funciona
Um proxy de banco de dados utiliza dois tipos de conexão: conexões de frontend entre o proxy e o seu cliente, e conexões de backend entre o proxy e o banco de dados. Durante um switchover de instância, o proxy mantém a conexão de frontend mesmo quando a conexão de backend é interrompida. Esse mecanismo permite que o proxy forneça conexões persistentes.
Para as conexões de backend com uma instância ApsaraDB RDS for MySQL, a chave para a persistência é restaurar o estado da conexão após uma interrupção.
O estado da conexão para o ApsaraDB RDS for MySQL geralmente inclui variáveis do sistema, variáveis definidas pelo usuário, tabelas temporárias, codificação do conjunto de caracteres, status da transação e informações de instruções preparadas. Este tópico usa set names utf8mb4 como exemplo para explicar como funciona o recurso de conexão persistente do ApsaraDB RDS for MySQL.
Switchover
Durante um switchover, o proxy de banco de dados do ApsaraDB RDS for MySQL mantém uma conexão persistente em três etapas:
As operações de O&M que envolvem um switchover incluem:
Switchover primário/secundário
atualize a versão secundária do mecanismo
Alteração de parâmetro que exige a reinicialização da instância
Alteração de configuração da instância primária
-
Início do switchover: bloquear novas conexões e requisições
O proxy não consegue preservar transações. Por isso, ele lida com as sessões de formas diferentes, dependendo do estado delas:
Para sessões com transações ativas durante o período de bloqueio, o proxy encaminha as requisições para a instância primária de backend para execução.
Para sessões que iniciam novas transações durante o período de bloqueio, o proxy bloqueia as requisições. O cliente então aguarda uma resposta do servidor.
Para sessões com transações ainda ativas após o término do período de bloqueio, o proxy encerra a conexão. O banco de dados de backend então reverte as transações não confirmadas.

-
Durante o switchover: alternar conexões existentes
Durante o switchover, o proxy modifica o estado das conexões existentes:
O proxy encerra as conexões que não podem ser mantidas.
O proxy alterna as conexões viáveis para a nova instância de banco de dados.
O proxy remove as conexões com a instância primária original do pool de conexões.

-
Após o switchover: restaurar conexões
Para as conexões mantidas com sucesso, o proxy estabelece conexões com a nova instância primária e restaura o estado da conexão.

Failover
Um failover é um evento não planejado em que uma falha no sistema faz a instância ApsaraDB RDS promover automaticamente uma instância secundária a primária.
O proxy armazena em cache as instruções SQL em execução no banco de dados ou pendentes de encaminhamento. Uma falha no banco de dados interrompe a conexão de backend entre o proxy e o banco de dados. Após detectar o failover, o proxy não se desconecta imediatamente do cliente. Em vez disso, ele encaminha as requisições de leitura com falha para uma instância de banco de dados disponível e restaura o estado da conexão.
Em requisições de gravação com falha, o proxy não consegue determinar se o banco de dados executou as gravações com sucesso. Portanto, a persistência de sessão durante um failover não oferece suporte a requisições de gravação.
ative conexões persistentes
A partir de 9 de janeiro de 2024, as instâncias qualificadas do ApsaraDB RDS for MySQL têm o recurso de conexão persistente ativado por padrão ao habilitar o proxy de banco de dados. Você pode desativar esse recurso a qualquer momento.
Pré-requisitos
Conexões persistentes para switchovers
A instância ApsaraDB RDS deve atender aos seguintes requisitos:
Versão do mecanismo: MySQL 5.6, 5.7, 8.0 ou 8.4
Edição: RDS High-availability Edition ou RDS Cluster Edition
Tipo de armazenamento: disco em cloud ou Premium Local SSDs
Tipo de proxy: uso geral ou dedicado
O proxy de banco de dados está ativado, e a versão do proxy é 1.14.5_20231207 ou posterior.
Conexões persistentes para failovers
A instância ApsaraDB RDS deve atender aos seguintes requisitos:
Versão do mecanismo: MySQL 5.6, 5.7 ou 8.0
Edição: RDS High-availability Edition ou RDS Cluster Edition
Tipo de armazenamento: disco em cloud ou Premium Local SSDs
-
Tipo de proxy: dedicado
NotaO proxy de banco de dados de uso geral oferece suporte a conexões persistentes apenas para switchovers. O proxy de banco de dados dedicado oferece suporte a conexões persistentes tanto para switchovers quanto para failovers.
O proxy de banco de dados está ativado, e a versão do proxy é 2.9.1 ou posterior.
Procedimento
acesse a página ApsaraDB RDS Instances. Na barra de navegação superior, selecione a região onde a instância está localizada. Em seguida, encontre a instância e clique em seu id.
No painel de navegação à esquerda, clique em Database Proxy.
-
Na seção Basic Information, clique em Enable ao lado de Persistent Connection.
NotaSe o texto 'persistent connection' não for exibido, significa que sua instância não atende aos requisitos para ativar conexões persistentes.
Usar conexões persistentes
Pré-requisitos
O proxy de banco de dados está ativado.
O recurso de conexão persistente está ativado para o proxy de banco de dados.
Procedimento
acesse a página ApsaraDB RDS Instances. Na barra de navegação superior, selecione a região onde a instância está localizada. Em seguida, encontre a instância e clique em seu id.
No painel de navegação à esquerda, clique em Database Proxy.
configure uma política de acesso para o endpoint de proxy de banco de dados de destino conforme os requisitos do seu negócio. Para mais informações, consulte Configurar uma política de acesso para um endpoint de proxy de banco de dados. defina Read/Write Attributes como Read/Write (Read/Write Splitting).
Solicite um endpoint interno ou público para o proxy de banco de dados conforme os requisitos do seu negócio. Para mais informações, consulte defina um endpoint de proxy de banco de dados.
Na sua aplicação, use o endpoint interno ou público e o número da porta do proxy de banco de dados para se conectar ao banco de dados.
Quando a instância de banco de dados passa por uma operação de O&M com switchover, o proxy de banco de dados mantém a conexão automaticamente. O uso do endpoint do proxy de banco de dados evita a interrupção da conexão da sua aplicação com o proxy.
Limitações
Durante um switchover, o recurso de conexão persistente não consegue manter as conexões nos seguintes cenários:
Conexões com conjunto de resultados incompleto, nas quais o servidor MySQL ainda não enviou todos os dados.
Conexões com transações não confirmadas.
Conexões que usaram a instrução
change user.Conexões que usaram a instrução
LOAD DATA.Conexões com tabelas temporárias.
Conexões usadas para assinar logs binários por meio do endpoint do proxy de banco de dados.
O sistema não oferece suporte a chamadas para as funções
FOUND_ROWS(),ROW_COUNT()eLAST_INSERT_ID(). Embora você possa chamar essas funções, não há garantia de precisão nos resultados retornados. O MySQL não recomenda mais o uso deSELECT FOUND_ROWS(). Recomendamos substituirSELECT FOUND_ROWS()porSELECT COUNT(*) FROM tb1nas consultas. Para mais informações, consulte FOUND_ROWS().
Notas de uso
Como as conexões podem se reconectar, a consulta
select connection_id()pode retornar um id de thread diferente para a conexão atual.Devido ao restabelecimento das conexões, o endereço IP e a porta exibidos em
show processlistou no SQL Explorer podem não corresponder ao endereço IP e à porta reais do cliente.O proxy pode manter uma conexão com variáveis definidas pelo usuário, mas essas variáveis se tornarão inválidas.
Desativar conexões persistentes
acesse a página ApsaraDB RDS Instances. Na barra de navegação superior, selecione a região onde a instância está localizada. Em seguida, encontre a instância e clique em seu id.
No painel de navegação à esquerda, clique em Database Proxy.
Na seção Basic Information, clique em Disable ao lado de Persistent Connection.
Testes do recurso
Este tópico fornece resultados de testes apenas para cenários de switchover.
Ambiente de teste
-
Instância ApsaraDB RDS for MySQL de teste:
MySQL 8.0, RDS High-availability Edition
Tipo de instância: mysql.x2.xlarge.2c (dedicada, 8 vCPUs, 16 GB de memória)
Ferramenta de teste: Sysbench
-
Dados de teste:
100 tabelas, com 40.000 linhas em cada tabela.
Número de threads simultâneas: 128.
Método de teste
Teste a retenção de conexão de uma instância ApsaraDB RDS for MySQL em diferentes cenários de O&M. A retenção de conexão é a porcentagem de conexões que permanecem ativas após uma operação de O&M.
Execute o seguinte comando de teste:
A tabela a seguir descreve os principais parâmetros do comando de teste.
db-driver: especifica o mecanismo de banco de dados.
mysql-host: especifica o endpoint do proxy de banco de dados.
tables: especifica o número de tabelas no banco de dados.
table-size: especifica o número de registros em cada tabela.
threads: especifica o número de threads simultâneas.
time: especifica a duração do teste em segundos.
Resultados do teste
Nos cenários de O&M testados, a instância ApsaraDB RDS for MySQL alcançou 100% de retenção de conexão.
|
Cenário de switchover |
Retenção |
|
atualize a versão secundária do mecanismo |
100% |
|
Switchover primário/secundário |
100% |
|
Alteração de configuração da instância primária |
100% |
|
Alteração de parâmetro que exige reinicialização |
100% |
Referência da API
|
API |
Descrição |
|
Modifica o recurso de proxy de banco de dados para uma instância ApsaraDB RDS. |
|
|
Consulta os detalhes do proxy de banco de dados para uma instância ApsaraDB RDS. |