Сервисы RX не могут подключиться ни к одному серверу базы
Ошибка Npgsql «No suitable host was found» в логах Directum RX: ни один сервер PostgreSQL из строки подключения не принял соединение. Почему так бывает при переключении и перезапуске базы и что проверить.
Что это значит
Сервисы Directum RX ходят в PostgreSQL через драйвер Npgsql. Когда в строке подключения указано несколько серверов или требуется только ведущий (Target Session Attributes=primary), драйвер перебирает их по очереди. Если ни один не ответил или ни один не оказался ведущим, появляется эта ошибка. Пользователи в этот момент получают ошибки при любом действии.
Чаще всего она идёт всплеском на несколько минут: база перезапускалась, реплика становилась ведущей, плавающий адрес переезжал на другой сервер. Если ошибка держится дольше, база недоступна по-настоящему.
Как проверить
- Внутреннее исключение в той же записи лога: там видно, на каком адресе и почему не получилось (отказ в соединении, таймаут,
57P03). - Жива ли база и кто сейчас ведущий:
select pg_is_in_recovery();
false означает ведущий сервер.
- С сервера приложений проверить порт:
nc -zv <адрес базы> 5432
- Если используется плавающий адрес (VIP), он должен стоять на ведущем сервере, а не на реплике.
Что сделать
- Если ошибки совпали с перезапуском или переключением базы, сервисы переподключатся сами. Достаточно убедиться, что всплеск закончился.
- Если база жива, а ошибка продолжается: проверить сеть и межсетевой экран между сервером приложений и базой,
listen_addressesиpg_hba.conf. - Если при переключении адрес остаётся на старом ведущем, сервисы будут упираться в реплику. Это настраивается в том, что управляет адресом (keepalived, Patroni и подобные).
- Поставить алерт на доступность базы и на число таких ошибок в логах: всплеск после переключения нормален, ровный поток нет.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать