Como trabalhar com endpoints do proxy do Amazon RDS - Amazon Aurora

Como trabalhar com endpoints do proxy do Amazon RDS

A seguir, você aprenderá sobre endpoints para proxy do RDS e como usá-los. Ao usar endpoints de proxy, é possível utilizar os seguintes recursos:

  • Você pode usar vários endpoints com um proxy para monitorar e solucionar problemas de conexões de diferentes aplicações de forma independente.

  • Você pode usar endpoints de leitor com clusters de bancos de dados Aurora para melhorar a escalabilidade de leitura e a alta disponibilidade para suas aplicações com uso intenso de consultas.

  • Você pode usar um endpoint entre VPCs para permitir o acesso a bancos de dados em uma VPC a partir de recursos, como as instâncias do Amazon EC2 em uma VPC diferente.

Visão geral dos endpoints de proxy

Trabalhar com endpoints de proxy do RDS envolve os mesmos tipos de procedimentos usados com cluster de bancos de dados Aurora, endpoints de leitor e endpoints de instâncias RDS. Se você não tem familiaridade com os endpoints do Aurora, encontre mais informações em Conexões de endpoints do Amazon Aurora.

Por padrão, o endpoint ao qual você se conecta quando usa o proxy do RDS com um cluster do Aurora tem capacidade de leitura/gravação. Como resultado, esse endpoint envia todas as solicitações à instância do gravador do cluster. Todas essas conexões são consideradas no valor max_connections da instância do gravador. Se o seu proxy estiver associado a um cluster de bancos de dados Aurora, você pode criar endpoints adicionais de leitura/gravação ou somente leitura para esse proxy.

Você pode usar um endpoint somente leitura com seu proxy para consultas somente leitura. Você faz isso da mesma forma que usa o endpoint do leitor para um cluster provisionado do Aurora. Fazer isso ajuda você a aproveitar a escalabilidade de leitura de um cluster do Aurora com uma ou mais instâncias de banco de dados do leitor. Você pode executar mais consultas simultâneas e fazer mais conexões simultâneas usando um endpoint somente leitura e adicionando mais instâncias de banco de dados do leitor ao cluster do Aurora, conforme necessário.

dica

Quando você cria um proxy para um cluster do Aurora usando o AWS Management Console, pode fazer com que o RDS Proxy crie automaticamente um endpoint do leitor. Para obter informações sobre os benefícios de um endpoint de leitor, consulte Uso de endpoints de leitor com clusters do Aurora.

Para um endpoint de proxy criado, você também pode associar o endpoint a uma Virtual Private Cloud (VPC) diferente daquela que o próprio proxy usa. Ao fazer isso, você pode se conectar ao proxy de uma VPC diferente, por exemplo, uma VPC usada por uma aplicação diferente dentro de sua organização.

Para obter informações sobre limites associados aos endpoints de proxy, consulte Limitações de endpoints de proxy.

Nos logs do RDS Proxy, cada entrada é prefixada com o nome do endpoint de proxy associado. Esse nome pode ser o que você especificou para um endpoint definido pelo usuário. Ou pode ser o nome especial default para o endpoint padrão de um proxy que realiza solicitações de leitura/gravação.

Cada endpoint de proxy tem seu próprio conjunto de métricas do CloudWatch. Você pode monitorar as métricas de todos os endpoints de um proxy. Você também pode monitorar métricas de um endpoint específico ou para todos os endpoints de leitura/gravação ou somente leitura de um proxy. Para obter mais informações, consulte Monitorar métricas do proxy do RDS com o Amazon CloudWatch.

Um endpoint de proxy usa o mesmo mecanismo de autenticação que o proxy associado. O proxy do RDS configura automaticamente permissões e autorizações para o endpoint definido pelo usuário, consistentes com as propriedades do proxy associado.

Para saber como os endpoints de proxy funcionam para clusters de banco de dados em um banco de dados global do Aurora, consulte Como os endpoints do RDS Proxy funcionam com bancos de dados globais.

Limitações de endpoints de proxy

Os endpoints do RDS Proxy têm as seguintes limitações:

  • Cada proxy tem um endpoint padrão que você pode modificar, mas não criar ou excluir.

  • O número máximo de endpoints definidos pelo usuário para um proxy é 20. Assim, um proxy pode ter até 21 endpoints: o endpoint padrão e mais 20 que você cria.

  • Quando você associa endpoints adicionais a um proxy, o proxy do RDS determina automaticamente quais instâncias de banco de dados em seu cluster usar para cada endpoint. Você não pode escolher instâncias específicas da mesma maneira que escolhe endpoints personalizados do Aurora.

Uso de endpoints de leitor com clusters do Aurora

Você pode criar e se conectar a endpoints somente leitura chamados endpoints de leitor quando usa o proxy do RDS com clusters do Aurora. Esses endpoints de leitor ajudam a melhorar a escalabilidade de leitura de suas aplicações com uso intensivo de consultas. Os endpoints de leitor também ajudam a melhorar a disponibilidade de suas conexões, se uma instância de banco de dados do leitor no cluster ficar indisponível.

nota

Quando você especifica que um novo endpoint é somente leitura, é necessário para o proxy do RDS que o cluster do Aurora tenha uma ou mais instâncias de banco de dados do leitor. Em alguns casos, é possível alterar o destino do proxy para um cluster do Aurora que contenha um único gravador. Se fizer isso, qualquer solicitação para o endpoint do leitor falhará com um erro. As solicitações também falham se o destino do proxy for uma instância do RDS em vez de um cluster do Aurora.

Se um cluster do Aurora tem instâncias de leitor, mas essas instâncias não estão disponíveis, o proxy do RDS aguarda para enviar a solicitação em vez de retornar um erro imediatamente. Se nenhuma instância de leitor ficar disponível dentro do tempo limite de empréstimo da conexão, a solicitação falhará com um erro.

Como os endpoints de leitor ajudam a disponibilidade das aplicações

Em alguns casos, uma ou mais instâncias de leitor no cluster podem ficar indisponíveis. Nesses casos, as conexões que usam um endpoint leitor de um proxy de banco de dados podem se recuperar mais rapidamente do que aquelas que usam o endpoint leitor do Aurora. O proxy do RDS roteia conexões somente para as instâncias de leitor disponíveis no cluster. Não há um atraso causado pelo cache de DNS quando uma instância fica indisponível.

Se a conexão for multiplexada, o proxy do RDS direciona as consultas subsequentes para uma instância de banco de dados de leitor diferente, sem qualquer interrupção na aplicação. Durante a alternância automática para uma nova instância de leitor, o proxy do RDS verifica o atraso de replicação das instâncias antigas e novas do leitor. O proxy do RDS garante que a nova instância do leitor esteja atualizada com as mesmas alterações que a instância do leitor anterior. Dessa forma, sua aplicação nunca vê dados obsoletos quando o proxy do RDS muda de uma instância de banco de dados do leitor para outra.

Se a conexão estiver fixada, a próxima consulta na conexão retornará um erro. Porém, sua aplicação pode se reconectar imediatamente ao mesmo endpoint. O proxy do RDS roteia a conexão para uma instância de banco de dados de leitor diferente que esteja no estado available. Quando você se reconecta manualmente, o proxy do RDS não verifica o atraso de replicação entre as instâncias antigas e novas do leitor.

Se o seu cluster do Aurora não tiver nenhuma instância de leitor disponível, o proxy do RDS verificará se essa condição é temporária ou permanente. O comportamento em cada caso é o seguinte:

  • Suponha que seu cluster tenha uma ou mais instâncias de banco de dados do leitor, mas nenhuma delas esteja no estado Available. Por exemplo, todas as instâncias do leitor podem estar reinicializando ou com problemas. Nesse caso, as tentativas de se conectar a um endpoint de leitor aguardam até que uma instância de leitor fique disponível. Se nenhuma instância de leitor ficar disponível dentro do tempo limite de empréstimo da conexão, a tentativa de conexão falhará. Se uma instância de leitor ficar disponível, a tentativa de conexão será bem-sucedida.

  • Suponha que seu cluster não tenha instâncias de banco de dados de leitor. Nesse caso, o proxy do RDS retorna um erro imediatamente se você tentar se conectar a um endpoint de leitor. Para resolver esse problema, adicione uma ou mais instâncias de leitor ao cluster antes de se conectar ao endpoint de leitor.

Como os endpoints de leitor contribuem para a escalabilidade da consulta

Os endpoints de leitor para um proxy ajudam contribuem para a escalabilidade da consulta do Aurora das seguintes maneiras:

  • À medida que você adiciona instâncias de leitor ao cluster do Aurora, o proxy do RDS pode rotear novas conexões para todos os endpoints de leitor para as diferentes instâncias do leitor. Dessa forma, as consultas realizadas usando uma conexão de endpoint de leitor não retardam as consultas realizadas usando outra conexão de endpoint de leitor. As consultas são executadas em instâncias de banco de dados separadas. Cada instância de banco de dados tem seus próprios recursos de computação, cache de buffer e assim por diante.

  • Onde for prático, o proxy do RDS usa a mesma instância de banco de dados de leitor para todos os problemas de consultas usando uma conexão de endpoint de leitor específica. Dessa forma, um conjunto de consultas relacionadas nas mesmas tabelas pode aproveitar o cache, a otimização do plano e assim por diante em uma instância de banco de dados específica.

  • Se uma instância de banco de dados de leitor ficar indisponível, o efeito sobre a aplicação dependerá se a sessão for multiplexada ou fixada. Se a sessão for multiplexada, o proxy do RDS roteia todas as consultas subsequentes para uma instância de banco de dados de leitor diferente sem qualquer ação de sua parte. Se a sessão estiver fixada, a aplicação receberá um erro e deverá se reconectar. Você pode se reconectar ao endpoint de leitor imediatamente e o proxy do RDS roteará a conexão para uma instância de banco de dados de leitor disponível. Para obter mais informações sobre multiplexação e fixação para sessões de proxy, consulte Visão geral dos conceitos do RDS Proxy.

  • Quanto mais instâncias de banco de dados de leitor você tiver no cluster, mais conexões simultâneas você poderá fazer usando endpoints de leitor. Por exemplo, suponha que seu cluster tenha quatro instâncias de banco de dados de leitor, cada uma configurada para permitir 200 conexões simultâneas. Suponha que seu proxy esteja configurado para usar 50% das conexões máximas. Aqui, o número máximo de conexões que você pode fazer através dos endpoints de leitor no proxy é 100 (50% de 200) para o leitor 1. Também é 100 para leitor 2, e assim por diante, até um total de 400. Se você dobrar o número de instâncias de banco de dados do leitor no cluster para oito, o número máximo de conexões através dos endpoints do leitor também será duplicado para 800.

Exemplos de uso de endpoints de leitor

O exemplo do Linux a seguir mostra como você pode confirmar que está conectado a um cluster do Aurora MySQL através de um endpoint de leitor. A configuração innodb_read_only está definida como habilitada. Tentativas de executar operações de gravação, como CREATE DATABASE, falham com um erro. E você pode confirmar se você está conectado a uma instância de banco de dados do leitor ao verificar o nome da instância de banco de dados usando a variável aurora_server_id.

dica

Não confie apenas na verificação do nome da instância de banco de dados para determinar se a conexão é leitura/gravação ou somente leitura. Lembre-se de que as instâncias de banco de dados em um cluster do Aurora podem alterar as funções entre o gravador e o leitor quando os failovers ocorrem.

$ mysql -h endpoint-demo-reader.endpoint.proxy-demo.us-east-1.rds.amazonaws.com -u admin -p ... mysql> select @@innodb_read_only; +--------------------+ | @@innodb_read_only | +--------------------+ | 1 | +--------------------+ mysql> create database shouldnt_work; ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement mysql> select @@aurora_server_id; +---------------------------------------+ | @@aurora_server_id | +---------------------------------------+ | proxy-reader-endpoint-demo-instance-3 | +---------------------------------------+

O exemplo a seguir mostra como sua conexão com um endpoint de leitor de proxy pode continuar funcionando mesmo quando a instância de banco de dados do leitor é excluída. Neste exemplo, o cluster do Aurora tem duas instâncias de leitor, instance-5507 e instance-7448. A conexão com o endpoint de leitor começa a usar uma das instâncias do leitor. Durante o exemplo, essa instância do leitor é excluída por meio de um comando delete-db-instance. O proxy do RDS alterna para uma instância de leitor diferente para consultas subsequentes.

$ mysql -h reader-demo.endpoint.proxy-demo.us-east-1.rds.amazonaws.com -u my_user -p ... mysql> select @@aurora_server_id; +--------------------+ | @@aurora_server_id | +--------------------+ | instance-5507 | +--------------------+ mysql> select @@innodb_read_only; +--------------------+ | @@innodb_read_only | +--------------------+ | 1 | +--------------------+ mysql> select count(*) from information_schema.tables; +----------+ | count(*) | +----------+ | 328 | +----------+

Enquanto a sessão do mysql continua em execução, o comando a seguir exclui a instância do leitor à qual o endpoint de leitor está conectado.

aws rds delete-db-instance --db-instance-identifier instance-5507 --skip-final-snapshot

As consultas da sessão mysql continuam funcionando sem a necessidade de reconexão. O proxy do RDS alterna automaticamente para uma instância de banco de dados de leitor diferente.

mysql> select @@aurora_server_id; +--------------------+ | @@aurora_server_id | +--------------------+ | instance-7448 | +--------------------+ mysql> select count(*) from information_schema.TABLES; +----------+ | count(*) | +----------+ | 328 | +----------+

Acesso aos bancos de dados do Aurora e do RDS entre VPCs

Por padrão, os componentes da pilha de tecnologia do RDS e do Aurora estão todos na mesma Amazon VPC. Por exemplo, suponha que uma aplicação em execução em uma instância do Amazon EC2 se conecta a uma instância de banco de dados do Amazon RDS ou cluster de banco de dados doAurora. Nesse caso, o servidor da aplicação e o banco de dados devem estar dentro da mesma VPC.

Com o RDS Proxy, é possível configurar o acesso a um cluster de banco de dados do Aurora em uma VPC a partir de recursos em outra VPC, como instâncias do EC2. Por exemplo, sua organização pode ter várias aplicações que acessam os mesmos recursos de banco de dados. Cada aplicação pode estar em sua própria VPC.

Para habilitar o acesso entre VPCs, crie um novo endpoint para o proxy. O proxy em si reside na mesma VPC que o cluster de bancos de dados Aurora ou instância do RDS. No entanto, o endpoint entre VPCs reside na outra VPC, juntamente com os outros recursos, como as instâncias do EC2. O endpoint entre VPC está associado a sub-redes e grupos de segurança da mesma VPC que o EC2 e outros recursos. Essas associações permitem que você se conecte ao endpoint a partir das aplicações que, de outra forma, não podem acessar o banco de dados devido às restrições da VPC.

As etapas a seguir explicam como criar e acessar um endpoint entre VPCs com o RDS Proxy:

  1. Crie duas VPCs ou escolha duas VPCs para as quais você já usa para trabalhar com o Aurora e o RDS. Cada VPC deve ter os próprios recursos de rede associados, como um gateway da Internet, tabelas de roteamento, sub-redes e grupos de segurança. Se você tiver apenas uma VPC, consulte Conceitos básicos do Amazon Aurora para ver as etapas de configuração de outra VPC, a fim de usar o Aurora com êxito. Também é possível examinar a VPC existente no console do Amazon EC2 para ver quais tipos de recursos podem ser conectados.

  2. Crie um proxy de banco de dados associado ao cluster de bancos de dados Aurora ou instância do RDS aos quais você deseja se conectar. Siga o procedimento em Criar um RDS Proxy.

  3. Na página Details (Detalhes) do seu proxy no console do RDS, na seção Proxy endpoints (Endpoints de proxy), escolha Create endpoint (Criar endpoint). Siga o procedimento em Criação de um endpoint de proxy.

  4. Escolha se deseja criar o endpoint entre VPCs como leitura/gravação ou somente leitura.

  5. Em vez de aceitar o padrão da mesma VPC que o cluster de bancos de dados Aurora ou instância do RDS, escolha uma VPC diferente. Essa VPC deve estar na mesma região da AWS que a VPC, onde o proxy reside.

  6. Agora, em vez de aceitar os padrões para sub-redes e grupos de segurança da mesma VPC que o cluster de bancos de dados Aurora ou instância do RDS, faça novas seleções. Faça-as com base nas sub-redes e grupos de segurança da VPC que você escolheu.

  7. Você não precisa alterar nenhuma das configurações para os segredos do Secrets Manager. As mesmas credenciais funcionam para todos os endpoints de proxy, independentemente da VPC em que cada endpoint esteja.

  8. Aguarde até que o novo endpoint alcance o estado Available (Disponível).

  9. Anote o nome completo do endpoint. Esse é o valor que termina em Region_name.rds.amazonaws.com, que você fornece como parte da string de conexão para sua aplicação de banco de dados.

  10. Acesse o novo endpoint por meio de um recurso na mesma VPC que o endpoint. Uma maneira simples de testar esse processo é criar uma nova instância do EC2 nessa VPC. Depois, faça login na instância do EC2 e execute os comandos mysql ou psql para se conectar usando o valor do endpoint na string de conexão.