Skip to content

Креш при попытке выполнить полный бэкап #256

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
ykurenkov opened this issue Sep 9, 2020 · 16 comments
Closed

Comments

@ykurenkov
Copy link

CentOS7, PostgreSQL 11.8, pg_probackup 2.4.2

INFO: Progress: (11035/11360). Process file "base/8511489/8519451"
pg_probackup: could not receive data from WAL stream: server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
ERROR: Problem in receivexlog
ERROR: interrupted during backup
ERROR: Data files transferring failed, time elapsed: 48m:39s
WARNING: backup in progress, stop backup
WARNING: Backup QGEM4Z is running, setting its status to ERROR

При этом в postgresql.log только

2020-09-10 00:20:25 +05 [unknown] postgres@[local] PID:40447 LOG:  terminating walsender process due to replication timeout
2020-09-10 00:20:29 +05 postgres postgres@[local] PID:40407 LOG:  could not send data to client: Broken pipe
2020-09-10 00:20:29 +05 postgres postgres@[local] PID:40407 FATAL:  connection to client lost

Конфигурация pg_probackup

# Backup instance information
pgdata = /var/lib/pgsql/11/data
system-identifier = 6866009253976847796
xlog-seg-size = 16777216
# Connection parameters
pgdatabase = postgres
pgport = 5432
# Replica parameters
replica-timeout = 10min
# Archive parameters
archive-timeout = 10min
# Logging parameters
log-level-console = INFO
log-level-file = INFO
log-filename = pg_probackup-ngp-%a.log
log-rotation-age = 1d
# Retention parameters
retention-redundancy = 2
retention-window = 7

@gsmolk
Copy link
Contributor

gsmolk commented Sep 9, 2020

Добрый день.
Не было ли каких-то сетевых проблем в этот момент времени?

@gsmolk gsmolk added the question label Sep 9, 2020
@ykurenkov
Copy link
Author

Затрудняюсь сказать, но архивация wal в это время работает.

@gsmolk
Copy link
Contributor

gsmolk commented Sep 9, 2020

Ну архивация вполне может и не заметить сетевых проблем, если они кратковременные.
На наличие сетевых проблем так же косвенно указывает вот эта ошибка:

2020-09-10 00:20:29 +05 postgres postgres@[local] PID:40407 LOG:  could not send data to client: Broken pipe
2020-09-10 00:20:29 +05 postgres postgres@[local] PID:40407 FATAL:  connection to client lost

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

@ykurenkov
Copy link
Author

Но это был локальный бэкап. Бэкап в пределах хоста на СХД, подключенное по NFS.

@ykurenkov
Copy link
Author

Архивация WAL работает нормально (при удалении сбойных архивов удалились и более ранние WALы)


ARCHIVE INSTANCE 'ngp'
================================================================================================================================
 TLI  Parent TLI  Switchpoint  Min Segno                 Max Segno                 N segments  Size   Zratio  N backups  Status
================================================================================================================================

1    0           0/0          0000000100000132000000B4  0000000100000132000000BA  7           112MB  1.00    1          OK

На сети вроде спокойно. Ещё раз запустил полный бэкап. Жду....

@gsmolk
Copy link
Contributor

gsmolk commented Sep 10, 2020

Можете выполнить запрос ниже?

show wal_sender_timeout;

@ykurenkov
Copy link
Author

postgres=# show wal_sender_timeout;
 wal_sender_timeout
--------------------
 1min
(1 row)

@gsmolk
Copy link
Contributor

gsmolk commented Sep 10, 2020

Как временное решение, я бы предложил увеличить этот параметр до, скажем, 10 минут.

@ykurenkov
Copy link
Author

postgres=# show wal_sender_timeout;
 wal_sender_timeout
--------------------
 10min
(1 row)

10 дней буду без компа - будет время для проверки и сбора статистики.

@gsmolk
Copy link
Contributor

gsmolk commented Sep 10, 2020

Мы со своей клиентской стороны по идее можем этот параметр переопределять при подключении.
Надо изучить этот вопрос.

@ykurenkov
Copy link
Author

Еще раз обращу внимание: это был локальный бэкап, не удаленный.

@gsmolk
Copy link
Contributor

gsmolk commented Sep 10, 2020

Еще раз обращу внимание: это был локальный бэкап, не удаленный.

Я понял. У меня есть одна догадка о причинах происходящего, но её нужно проверить.

@gsmolk
Copy link
Contributor

gsmolk commented Sep 11, 2020

Сервер PostgreSQL, а конкретно wal_sender, который обслуживает клиента, периодически отсылает keepalive сообщения. Если от клиента не поступал ответ в течении времени, превыщающем wal_sender_timeout, то коннект терминируется.
Если pg_probackup запускается локально, то клиент(pg_probackup) может не отвечать, например, в результате высокой нагрузки на машине, т.е. клиент просто не успел получить свой cpu time slice.

@ykurenkov
Copy link
Author

Что делать в подобных случаях? Каковы методы предотвращения появления их?

@gsmolk
Copy link
Contributor

gsmolk commented Sep 11, 2020

Как временное решение - задать значение параметр wal_sender_timeout побольше.
Я надеюсь, что мы в ближайшее время возьмемся за перепил нашего libpq интерфейса, и тогда сможем сами при открытии коннекта задавать этот параметр, не дергая юзера.

@gsmolk
Copy link
Contributor

gsmolk commented Apr 27, 2021

Будет исправлено в рамках #350

@gsmolk gsmolk closed this as completed Apr 27, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants