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


Como funciona
O database proxy utiliza dois tipos de conexão: conexões de frontend entre o proxy e o 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 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 ApsaraDB RDS for MySQL geralmente inclui variáveis de sistema, variáveis definidas pelo usuário, tabelas temporárias, codificação de conjunto de caracteres, status de transação e informações de prepared statement. Este tópico usa set names utf8mb4 como exemplo para explicar o funcionamento do recurso de conexão persistente para ApsaraDB RDS for MySQL.
Switchover
Durante um switchover, o database proxy para 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
Atualização de versão secundária do mecanismo
Alteração de parâmetro que exige reinicialização da instância
Alteração de configuração da instância primária
-
Início do switchover: Bloqueio de novas conexões e solicitações
O proxy não consegue preservar transações. Por isso, trata as sessões de forma diferente com base em seus estados:
Sessões com transações ativas durante o período de bloqueio: o proxy encaminha as solicitações à instância primária de backend para execução.
Sessões que iniciam novas transações durante o período de bloqueio: o proxy bloqueia as solicitações e o cliente aguarda uma resposta do servidor.
Sessões com transações ainda ativas após o término do período de bloqueio: o proxy encerra a conexão e o banco de dados de backend reverte as transações não confirmadas.

-
Durante o switchover: Alternância das conexões existentes
Durante o switchover, o estado das conexões existentes é modificado:
Conexões que não podem ser mantidas: o proxy encerra toda a conexão.
Conexões que podem ser mantidas: o proxy as alterna para a nova instância de banco de dados.
Limpeza do pool: o proxy remove as conexões com a instância primária original do pool de conexões.

-
Após o switchover: Restauração das conexões
Para 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 no qual uma falha do sistema faz com que uma instância ApsaraDB RDS promova automaticamente uma instância secundária para se tornar a nova primária.
O proxy armazena em cache as instruções SQL em execução no banco de dados ou pendentes de encaminhamento. Quando ocorre uma falha no banco de dados, a conexão de backend entre o proxy e o banco de dados é interrompida. Após detectar o failover, o proxy não se desconecta imediatamente do cliente. Em vez disso, ele encaminha solicitações de leitura com falha para uma instância de banco de dados disponível e restaura o estado da conexão.
Para solicitações de gravação com falha, o proxy não consegue determinar se as gravações no banco de dados foram bem-sucedidas. Portanto, a persistência de sessão durante um failover não oferece suporte a solicitações de gravação.
Ativar conexões persistentes
A partir de 9 de janeiro de 2024, o recurso de conexão persistente é ativado por padrão para instâncias ApsaraDB RDS for MySQL elegíveis ao ativar o database proxy. É possível 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 nuvem ou Premium Local SSDs
Tipo de proxy: uso geral ou dedicado
O database proxy 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 nuvem ou Premium Local SSDs
-
Tipo de proxy: dedicado
NotaO database proxy de uso geral oferece suporte a conexões persistentes apenas para switchovers. O database proxy dedicado oferece suporte a conexões persistentes tanto para switchovers quanto para failovers.
O database proxy 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, localize 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 database proxy está ativado.
O recurso de conexão persistente está ativado para o database proxy.
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, localize 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 database proxy de destino conforme os requisitos do seu negócio. Para obter mais informações, consulte Configurar uma política de acesso para um endpoint de database proxy. Defina Read/Write Attributes como Read/Write (Read/Write Splitting).
Solicite um endpoint interno ou público para o database proxy conforme os requisitos do seu negócio. Para obter mais informações, consulte Definir um endpoint de database proxy.
Na aplicação, use o endpoint interno ou público e o número da porta do database proxy para se conectar ao banco de dados.
Quando uma operação de O&M envolvendo um switchover ocorrer na instância de banco de dados, o database proxy manterá a conexão automaticamente. A conexão da aplicação com o proxy não será interrompida ao usar o endpoint de database proxy.
Limitações
Durante um switchover, o recurso de conexão persistente não consegue manter conexões nos seguintes cenários:
Conexões com um conjunto de resultados incompleto, nas quais o servidor MySQL ainda não terminou de enviar todos os dados.
Conexões com transações não confirmadas.
Conexões que usaram uma instrução
change user.Conexões que usaram uma instrução
LOAD DATA.Conexões com tabelas temporárias.
Conexões usadas para assinar logs binários por meio do endpoint de database proxy.
Chamadas às funções
FOUND_ROWS(),ROW_COUNT()eLAST_INSERT_ID()não são suportadas. Embora essas funções possam ser chamadas, a precisão dos resultados retornados não pode ser garantida. O MySQL não recomenda mais o uso deSELECT FOUND_ROWS(). Recomendamos substituirSELECT FOUND_ROWS()porSELECT COUNT(*) FROM tb1nas consultas. Para obter mais informações, consulte FOUND_ROWS().
Observações de uso
Como as conexões podem se reconectar, o ID de thread da conexão atual retornado pela consulta
select connection_id()pode mudar.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.Se uma conexão possuir variáveis definidas pelo usuário, ela poderá ser mantida, mas as 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, localize 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.
Teste do recurso
Este tópico fornece resultados de teste 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ões de uma instância ApsaraDB RDS for MySQL em diferentes cenários de O&M. A retenção de conexões é a porcentagem de conexões que permanecem ativas após uma operação de O&M.
Execute o seguinte comando de teste:
sysbench --db-driver=mysql --mysql-host=127.X.X.1 --mysql-port=3306 --mysql-user=username --mysql-password='' --tables=100 --table-size=40000 --threads=128 --mysql-db=sbtest --report-interval=5 --time=600 oltp_read_write run
A tabela a seguir descreve os principais parâmetros no comando de teste.
db-driver: Especifica o mecanismo de banco de dados.
mysql-host: Especifica o endpoint de database proxy.
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 atingiu 100% de retenção de conexões.
|
Cenário de switchover |
Retenção |
|
Atualização de 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 de API
|
API |
Descrição |
|
Modifica o recurso de database proxy para uma instância ApsaraDB RDS. |
|
|
Consulta os detalhes do database proxy para uma instância ApsaraDB RDS. |