"Исключение PDO: сетевые getaddresses php: ошибка getaddrinfo" после изменения преобразователей DNS с БД, работающей на AWS


В нашем приложении Laravel 5.2 у нас есть настройка БД, работающая на AWS, с использованием нескольких серверов чтения (и нескольких подключений к БД).

Ночью мы изменили распознаватели DNS для всех веб-серверов на DNS Google (8.8.8.8 и 8.8.4.4). Затем серверы начали выплевывать следующее:

Исключение PDOException: Исключение "Исключение PDOException" с сообщением "СОСТОЯНИЕ SQLSTATE[HY000] [2002] php_network_getaddresses: ошибка getaddrinfo: Имя или служба неизвестны' в /home/forge/studydrive.net/releases/20170320162143/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:55

Код в Connector.php:55 - это просто конструктор 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); // <== THIS ONE
    } catch (Exception $e) {
        $pdo = $this->tryAgainIfCausedByLostConnection(
            $e, $dsn, $username, $password, $options
        );
    }

        return $pdo;
    }

Конфигурация .env для AWS (с измененными частями sesnsitive):

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

Итак, похоже, что PDO PHP внезапно не может разрешить имя DB_HOST.

Обратите внимание, что мы не можем использовать IP-адрес для DB_HOST, так как имя хоста (на стороне AWS) сопоставляется с 3 различными считываемыми базами данных серверы.

Кроме того, до того, как мы поменяли преобразователи, все работало нормально.

У кого-нибудь есть какие-либо идеи о том, что может быть причиной ошибки PDO или как ее устранить?

Author: lesssugar, 2017-03-21

3 answers

Это ошибка в libc, согласно:

Https://bugs .launchpad.net/ubuntu /+источник/glibc/+ошибка/1674733

Php_network_getaddresses: ошибка getaddrinfo: Имя или служба неизвестны ubuntu

 5
Author: Aymen Fitati, 2017-03-21 16:23:02

По состоянию на 20 марта у многих пользователей Ubuntu в Интернете внезапно возникли проблемы с разрешением DNS в их приложениях из-за плохого обновления, выпущенного Canonical (сопровождающими Ubuntu), которое нарушает разрешение DNS после нескольких часов безотказной работы. Вот отчет об ошибке, в котором сообщалось о проблеме и ее сортировке:

Https://bugs .launchpad.net/ubuntu /+источник/eglibc/+ошибка/1674532

Это могло привести к сбоям в обновлении/установке вашей CMS плагины/темы установки, сбои при подключении к внешним API и/или сообщения об ошибках, подобные следующим:

Предупреждение: file_get_contents(): php_network_getaddresses: ошибка getaddrinfo: Нет адреса, связанного с именем хоста Не удалось разрешить хост: downloads.wordpress.org Ошибка завитка 6: Не удалось разрешить узел: example.com в.... К счастью, Canonical с тех пор смогла устранить проблему, но затронутые системы должны обновиться, чтобы получить исправление. Для этого вам понадобится работающий DNS, поэтому, если в настоящее время он отключен, пожалуйста, сначала перезагрузите свой Droplet. Как только разрешение DNS заработает в обычном режиме, пожалуйста, запустите:

sudo apt-get update
sudo apt-get upgrade

Затем вы можете проверить свои версии, чтобы убедиться, что у вас есть правильные. Это можно сделать с помощью:

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

Если вы используете Ubuntu 16.X, вы должны увидеть вывод, подобный следующему:

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

Если вы используете Ubuntu 14.X, вы должны увидеть вывод, подобный следующему:

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

Если вы видите более старые версии этих пакетов, вам потребуется выполнить обновление в соответствии с предыдущие инструкции, чтобы избежать этой проблемы.

 4
Author: Pablo Martinez, 2017-03-23 09:58:49

Я также столкнулся с этой проблемой после восстановления своего экземпляра и попытался восстановить снимок базы данных. И перезапуск серверов приложений решил эту проблему за меня. Сработало как по волшебству!:)

 0
Author: dexterb, 2018-03-21 13:34:04