PostgreSQL 9.6 застрял в рекавери - PullRequest
0 голосов
/ 24 октября 2019

Существует главный сервер (9.6) и одна реплика. Уже более 1 года работает нормально. Нам пришлось перенастроить число процессоров на главном компьютере и забыть применить его к реплике, что фактически привело к его поломке из-за отсутствия архивированных файлов pg_xlog (мы храним только небольшое количество). Мы попытались реинициализировать реплику (событие с переустановкой VM + PostgreSQL) как обычно, но в итоге мы получили:

FATAL: the database system is starting up.

Проверенная конфигурация как на главном, так и на ведомом устройствах - выглядит хорошо. Он восстанавливал последовательные сегменты, не застрял здесь. Свободное дисковое пространство доступно как на главном, так и на ведомом устройствах. Невозможно подключиться к базе данных через psql.

strace в том процессе, который восстанавливает сегменты:

lseek(907, 0, SEEK_END)                 = 429228032
read(6, 0x7ffffb3dafc7, 1)              = -1 EAGAIN (Resource temporarily unavailable)
lseek(3, 11747328, SEEK_SET)            = 11747328
read(3, "\223\320\1\0\2\0\0\0\0@\263\272V\25\0\0y\v\0\0\0\0\0\0\0\210\20\33\0008@["..., 8192) = 8192
read(6, 0x7ffffb3dafc7, 1)              = -1 EAGAIN (Resource temporarily unavailable)
lseek(808, 0, SEEK_END)                 = 44916736
lseek(3, 11755520, SEEK_SET)            = 11755520
read(3, "\223\320\1\0\2\0\0\0\0`\263\272V\25\0\0\325\10\0\0\0\0\0\00025400041"..., 8192) = 8192
read(6, 0x7ffffb3dafc7, 1)              = -1 EAGAIN (Resource temporarily unavailable)
lseek(840, 0, SEEK_END)                 = 860676096
read(6, 0x7ffffb3dafc7, 1)              = -1 EAGAIN (Resource temporarily unavailable)
lseek(855, 0, SEEK_END)                 = 302235648
read(6, 0x7ffffb3dafc7, 1)              = -1 EAGAIN (Resource temporarily unavailable)

Мысль о:

  • разрешениях наrecovery.conf (значение 600)
  • PostgreSQL не читает postgresql.conf (маловероятно)
  • проблема с сетью
  • повреждение мастера
  • транзакции при восстановлении главной блокировкина ведомом устройстве

Есть идеи?

Реплика инициализируется с помощью:

pg_basebackup -D /var/lib/pgsql/9.6/data -P --xlog-method=stream -R --checkpoint=fast -U replica -W -h IP

pg_log как раз перед тем, как она столкнулась с отсутствием файлов pg_xlog и начала принимать соединения:

< 2019-10-24 14:02:52.930 CEST > FATAL:  the database system is shutting down
< 2019-10-24 14:03:32.169 CEST > LOG:  shutting down
< 2019-10-24 14:03:57.270 CEST > LOG:  database system is shut down
< 2019-10-24 14:04:55.694 CEST > LOG:  00000: database system was shut down in recovery at 2019-10-24 14:03:57 CEST
< 2019-10-24 14:04:55.694 CEST > LOCATION:  StartupXLOG, xlog.c:6060
< 2019-10-24 14:04:55.694 CEST > LOG:  00000: entering standby mode
< 2019-10-24 14:04:55.694 CEST > LOCATION:  StartupXLOG, xlog.c:6135
< 2019-10-24 14:04:55.712 CEST > LOG:  00000: redo starts at 1553/E2012790
< 2019-10-24 14:04:55.712 CEST > LOCATION:  StartupXLOG, xlog.c:6833
< 2019-10-24 14:06:02.320 CEST > FATAL:  57P03: the database system is starting up
< 2019-10-24 14:06:02.320 CEST > LOCATION:  ProcessStartupPacket, postmaster.c:2221
< 2019-10-24 14:12:43.461 CEST > LOG:  00000: received fast shutdown request
< 2019-10-24 14:12:43.461 CEST > LOCATION:  pmdie, postmaster.c:2679
< 2019-10-24 14:14:17.410 CEST > LOG:  00000: shutting down
< 2019-10-24 14:14:17.410 CEST > LOCATION:  ShutdownXLOG, xlog.c:8095
< 2019-10-24 14:15:41.730 CEST > LOG:  00000: database system is shut down
< 2019-10-24 14:15:41.730 CEST > LOCATION:  UnlinkLockFiles, miscinit.c:763
< 2019-10-24 14:17:13.492 CEST > LOG:  00000: database system was shut down in recovery at 2019-10-24 14:15:40 CEST
< 2019-10-24 14:17:13.492 CEST > LOCATION:  StartupXLOG, xlog.c:6060
< 2019-10-24 14:17:13.553 CEST > LOG:  00000: entering standby mode
< 2019-10-24 14:17:13.553 CEST > LOCATION:  StartupXLOG, xlog.c:6135
< 2019-10-24 14:17:15.654 CEST > LOG:  00000: redo starts at 1555/C0019B8
< 2019-10-24 14:17:15.654 CEST > LOCATION:  StartupXLOG, xlog.c:6833
< 2019-10-24 14:17:29.507 CEST > FATAL:  57P03: the database system is starting up
< 2019-10-24 14:17:29.507 CEST > LOCATION:  ProcessStartupPacket, postmaster.c:2221
< 2019-10-24 14:29:46.171 CEST > LOG:  00000: consistent recovery state reached at 1557/5A30CB8
< 2019-10-24 14:29:46.171 CEST > LOCATION:  CheckRecoveryConsistency, xlog.c:7647
< 2019-10-24 14:29:46.171 CEST > LOG:  00000: database system is ready to accept read only connections
< 2019-10-24 14:29:46.171 CEST > LOCATION:  sigusr1_handler, postmaster.c:5023
< 2019-10-24 14:29:46.386 CEST > LOG:  00000: started streaming WAL from primary at 1557/6000000 on timeline 2
< 2019-10-24 14:29:46.386 CEST > LOCATION:  WalReceiverMain, walreceiver.c:384

1 Ответ

0 голосов
/ 27 октября 2019

Наконец-то мы его запустили. Вот что мы сделали: переместили неиспользуемые данные на отдельный архивный сервер баз данных, сделали vacuum full для некоторых больших таблиц, а также reindex несколько индексов в несколько сотен гигабайт. Мы также изменили effective_io_concurrency (увеличено), так как это может оказать некоторое влияние из-за конфигурации нашего гибридного диска (отличается на главном компьютере и реплике). Теперь вместо часов ожидания при ответе на журнал, база данных начинает принимать соединения в течение минуты с репликацией, работающей нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...