“Excepção PDO: php_network_getaddresses: getaddrinfo falhou” depois de alterar os resolvedores de DNS, com o DB rodando no AWS

No nosso aplicativo Laravel 5.2, temos uma configuração DB executada no AWS, usando vários servidores de leitura (e múltiplas conexões DB).

À noite, mudamos os resolvers de DNS para todos os servidores web para o Google DNS (8.8.8.8 e 8.8.4.4). Então, os servidores começaram a cuspir estes:

PDOException: Exceção ‘PDOException’ com mensagem ‘ SQLSTATE [HY000] [2002] php_network_getaddresses: getaddrinfo falhou: Nome ou serviço desconhecido ‘ em /home/forge/studydrive.net/releases/20170320162143/vendor/laravel/framework/src/Illuminate /Database/Connectors/Connector.php:55

O código no Connector.php:55 é simplesmente o construtor PDO:

 public function createConnection($dsn, array $config, array $options) { $username = Arr::get($config, 'username'); $password = Arr::get($config, 'password'); try { $pdo = new PDO($dsn, $username, $password, $options); // tryAgainIfCausedByLostConnection( $e, $dsn, $username, $password, $options ); } return $pdo; } 

A configuração .env para o AWS (com as partes sessitive mudaram):

 DB_HOST=myapp-cluster.cluster-123abc.eu-west-2.rds.amazonaws.com DB_HOST_WRITE=myapp-cluster.cluster-123abc.eu-west-2.rds.amazonaws.com DB_HOST_READ=myapp-cluster.cluster-ro-123abc.eu-west-2.rds.amazonaws.com 

Então, parece que o PDO do PHP de repente não pode resolver o nome DB_HOST .

Observe que não podemos usar um IP para o DB_HOST , pois o nome do host (no lado AWS) é mapeado para 3 servidores READ DB_HOST database diferentes.

Além disso, antes de mudar os resolvers, tudo estava funcionando bem.

Alguém tem alguma idéia do que pode estar causando o erro PDO, ou como resolvê-lo?

Este é um erro na libc, de acordo com:

https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1674733

php_network_getaddresses: getaddrinfo falhou: Nome ou serviço desconhecido ubuntu

A partir de 20 de março, muitos usuários do Ubuntu em toda a Web estavam de repente com problemas de resolução de DNS pop-up em suas aplicações devido a uma atualização incorreta enviada pela Canonical (os mantenedores do Ubuntu) que quebra a resolução do DNS após algumas horas de tempo de atividade. Aqui está o relatório de erros onde a questão foi relatada e triada:

https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/1674532

Isso pode resultar em falhas no seu CMS para atualizar / instalar plugins / instalar temas, falhas para se conectar a APIs externas e / ou mensagens de erro semelhantes às seguintes:

Aviso: file_get_contents (): php_network_getaddresses: getaddrinfo falhou: Nenhum endereço associado ao hostname Não foi possível resolver o host: downloads.wordpress.org CURL error 6: Não foi possível resolver o host: example.com in …. Felizmente, a Canonical conseguiu resolver o problema, mas os sistemas afetados devem atualizar para adquirir a correção. Para fazer isso, você precisará do DNS funcionando, então, se estiver atualmente abaixo, primeiro reinicie seu Droplet. Uma vez que a resolução DNS está funcionando como normal, execute:

 sudo apt-get update sudo apt-get upgrade 

Então você pode verificar suas versões para garantir que você tenha os direitos. Isso pode ser feito com:

 # sudo dpkg -l | grep "GNU C Library" | awk '{print $3}' 

Se você estiver no Ubuntu 16.X, você deve ver a saída similar à seguinte:

 # sudo dpkg -l | grep "GNU C Library" | awk '{print $3}' 2.23-0ubuntu7 2.23-0ubuntu7 2.23-0ubuntu7 

Se você estiver no Ubuntu 14.X, você deve ver a saída semelhante à seguinte:

 # sudo dpkg -l | grep "GNU C Library" | awk '{print $3}' 2.19-0ubuntu6.11 2.19-0ubuntu6.11 

Se você vir versões mais antigas desses pacotes, você precisará atualizar as instruções anteriores para evitar esse problema.