![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Наблюдаю странную ситуацию при попытке добавить вторую ноду в кластер percona galera.
После длительной заливки файлов посредством xtrabackup-v2 (3,5ТБ данных и около 1 000 000 файлов) и успешно пройденных всех этапов, судя по логу - вторая нода падает с абсолютно неинформативной ошибкой:
2017-08-29 07:24:51 14705 [Note] InnoDB: Using Linux native AIO
2017-08-29 07:24:51 14705 [Note] InnoDB: Using CPU crc32 instructions
2017-08-29 07:24:51 14705 [Warning] InnoDB: innodb_file_io_threads is deprecated. Please use innodb_read_io_threads and innodb_write_io_threads instead
2017-08-29 07:24:51 14705 [Note] InnoDB: Initializing buffer pool, size = 10.0G
2017-08-29 07:24:52 14705 [Note] InnoDB: Completed initialization of buffer pool
2017-08-29 07:24:52 14705 [Note] InnoDB: Highest supported file format is Barracuda.
2017-08-29 08:00:55 14705 [Note] WSREP: Created page /var/lib/mysql/gcache.page.000025 of size 134217728 bytes
2017-08-29 08:22:33 14705 [Note] WSREP: Created page /var/lib/mysql/gcache.page.000026 of size 134217728 bytes
2017-08-29 09:22:21 14705 [Note] WSREP: Created page /var/lib/mysql/gcache.page.000027 of size 134217728 bytes
2017-08-29 10:06:55 14705 [Note] InnoDB: 128 rollback segment(s) are active.
2017-08-29 10:06:55 14705 [Note] InnoDB: Waiting for purge to start
2017-08-29 10:06:55 14705 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.36-82.0 started; log sequence number 7347200454611
2017-08-29 10:06:55 14705 [ERROR] Aborting
2017-08-29 10:06:55 14705 [Note] WSREP: Signalling cancellation of the SST request.
2017-08-29 10:06:55 14705 [Note] WSREP: SST request was cancelled
2017-08-29 10:06:55 14705 [Note] WSREP: Closing send monitor...
2017-08-29 10:06:55 14705 [Note] WSREP: Closed send monitor.
2017-08-29 10:06:55 14705 [Note] WSREP: gcomm: terminating thread
2017-08-29 10:06:55 14705 [Note] WSREP: gcomm: joining thread
2017-08-29 10:06:55 14705 [Note] WSREP: gcomm: closing backend
2017-08-29 10:06:57 14705 [Note] WSREP: Service disconnected.
2017-08-29 10:06:57 14705 [Note] WSREP: Waiting to close threads......
2017-08-29 10:06:57 14705 [Note] WSREP: rollbacker thread exiting
Возможно кто-нибудь сталкивался и поможет советом. Логи прилагаю файлами
Отредактированно Stanislav (29.08.2017 16:40:23)
Неактивен

Пока непонятно. Когда снимаете strace, делайте, пожалуйста, -t -s 1024 -f, иначе очень сложно сопоставлять логи. Пока что кажется, что стрейс xtrabackup не соответствует error.log.
Из того, что нарыл:
write(2, "2017-08-29 10:06:55 14705 [Note]"..., 68) = 68
select(0, NULL, NULL, NULL, {0, 50000}) = 0 (Timeout)
Вот тут он пытается ждать
2017-08-29 10:06:55 14705 [Note] InnoDB: Waiting for purge to start
и таймаутится. Это, скорее всего, следствие какой-то причины, которую мы тут не видим.
Неактивен
Спасибо за ответ. Весь цикл восстановления занимает ~24h. Как сниму новый трейс, сразу выложу.
Сам Xtrabackup насколько я понимаю проходит успешно. Падает сам иннодб при попытке старта.
Кстати, может есть возможность не повторять весь процесс копирования каждый раз?
Отредактированно Stanislav (31.08.2017 09:43:31)
Неактивен

Насколько я знаю, нет. Ну то есть можно попробовать сэмулировать ситуацию как-то хитро. Все переналивки, насколько я помню галеру, живут в обычных шелл-скриптах. Можно первую переналивку просто закомментировать и надеяться, что позиции не передаются отдельно мимо файлов (вот это не уверен, но почему не попробовать?).
А на тех же серверах, но на какой-нибудь маленькой базе не воспроизводится? Это с кодом связано или с самим набором данных?
Неактивен
На маленьких базах не воспроизводится. Проблемы начинаются гдето с 1,3-1,7 ТБ размера и более 600К таблиц..
Хитро эмулировать боязно. При любой ошибке вторая нода утягивает на дно за собой первую, а старт занимает часы..
Неактивен
Присоединение strace под конец процесса привело к падению...
170901 07:27:41 >> log scanned up to (7389423472252)
170901 07:27:42 >> log scanned up to (7389423556002)
innobackupex: Error writing file 'UNOPENED' (Errcode: 32 - Broken pipe)
xb_stream_write_data() failed.
innobackupex: Error writing file 'UNOPENED' (Errcode: 32 - Broken pipe)
[01] xtrabackup: Error: xtrabackup_copy_datafile() failed.
[01] xtrabackup: Error: failed to copy datafile.
Есть смысл логи прикладывать?
Неактивен
Прикладываю свежие логи с -t -s 1024 -f
видно что какой-то таймаут был, но как обычно, без подробностей
Отредактированно Stanislav (02.09.2017 11:27:26)
Неактивен
вот этот кусок из трейса соответствует
2017-09-02 03:53:24 17707 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.36-82.0 started; log sequence number 7400309372985
2017-09-02 03:53:24 17707 [ERROR] Aborting
https://gyazo.com/9a294b65cedf8595c234218a3d1b0edd
Неактивен

Так, давайте тогда выливать еще мысли, пока ничего не вижу.
Из странного:
1. В логе joiner вижу, что где-то не подставилась переменная ${DATA}. Вот сомнительные строки:
WSREP_SST: [INFO] Evaluating innobackupex --no-version-check --use-memory=20G --apply-log $rebuildcmd ${DATA} &>${DATA}/innobackup.prepare.log (2017-09-01 23:57:26)
(cut)
rm: cannot remove ‘/var/lib/mysql//innobackup.prepare.log’: No such file or directory
2. Из этого же лога следует, что у Вас два компьютера в кластере, это плохо с точки зрения устойчивости, добавьте хотя бы одного арбитра (это не решит нашу проблему, но повысит выживаемость кластера).
3. Стрейсы на этот раз вообще не информативные — только куски строк ![]()
Давайте попробуем тогда адскую диагностику ![]()
https://github.com/percona/percona-xtra … ckup-v2.sh
Это башскрипт, его можно залогировать. Можно попробовать залогировать простым set -x, можно добавить какой-то еще диагностики. Я очень хочу убедиться, что DATA выставляется в правильное значение. После этого я бы попробовал «налить вручную» — запустить донорскую и джоинерскую команду лапами — просто посмотреть, докатится ли xtrabackup, и какие ошибки появятся в процессе:
2017-09-01 13:39:54 2692439 [Note] WSREP: Running: 'wsrep_sst_xtrabackup-v2 --role 'donor' --address '192.168.11.6:4444/xtrabackup_sst//1' --socket '/var/lib/mysql/mysql.sock' --datadir '/var/lib/mysql/' --defaults-file '/etc/my.cnf' --defaults-group-suffix '' '' --gtid 'af81d29b-8a9a-11e7-92d4-962488332acf:16744965''
2017-09-01 13:39:51 17707 [Note] WSREP: Running: 'wsrep_sst_xtrabackup-v2 --role 'joiner' --address '192.168.11.6' --datadir '/var/lib/mysql/' --defaults-file '/etc/my.cnf' --defaults-group-suffix '' --parent '17707' '' '
Ну и да, если на маленьких датасетах не воспроизводится, придется искать долго ![]()
Неактивен
По моему разумению, все накатки xtrabackup завершились успешно. Поэтому я сделал следующее - посмотрел в логи uuid и seqno и запустил джоинер вот так: mysqld --wsrep_start_position=37dcf7ea-9256-11e7-8b69-6b7118e1f24a:218432
а перед этим заполнил grastate.dat. Он почемуто постоянно пустой после попытки репликации.
И вот что получил в логе:
---skipped---
2017-09-07 07:41:15 29880 [Warning] InnoDB: innodb_file_io_threads is deprecated. Please use innodb_read_io_threads and innodb_write_io_threads instead
2017-09-07 07:41:15 29880 [Note] InnoDB: Initializing buffer pool, size = 10.0G
2017-09-07 07:41:16 29880 [Note] InnoDB: Completed initialization of buffer pool
2017-09-07 07:41:17 29880 [Note] InnoDB: Highest supported file format is Barracuda.
2017-09-07 07:42:41 29880 [Note] WSREP: gcomm/src/gmcast.cpp:check_liveness():1188: (25f0dfc9, 'tcp://0.0.0.0:4567') turning message relay requesting off
2017-09-07 09:47:13 29880 [Note] InnoDB: 128 rollback segment(s) are active.
2017-09-07 09:47:13 29880 [Note] InnoDB: Waiting for purge to start
2017-09-07 09:47:13 29880 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.36-82.0 started; log sequence number 7475454621728
2017-09-07 09:47:13 29880 [ERROR] Aborting
2017-09-07 09:47:13 29880 [Note] WSREP: Signalling cancellation of the SST request.
2017-09-07 09:47:13 29880 [Note] WSREP: galera/src/replicator_str.cpp:sst_received():70: SST request was cancelled
2017-09-07 09:47:14 29880 [ERROR] WSREP: galera/src/ist.cpp:run():473: IST didn't contain all write sets, expected last: 533476 last received: 218433
2017-09-07 09:47:14 29880 [Note] WSREP: gcs/src/gcs_sm.cpp:gcs_sm_close():76: Closing send monitor...
2017-09-07 09:47:14 29880 [Note] WSREP: gcs/src/gcs_sm.cpp:gcs_sm_close():106: Closed send monitor.
2017-09-07 09:47:14 29880 [Note] WSREP: gcs/src/gcs_gcomm.cpp:close():297: gcomm: terminating thread
2017-09-07 09:47:14 29880 [Note] WSREP: gcs/src/gcs_gcomm.cpp:close():300: gcomm: joining thread
2017-09-07 09:47:14 29880 [Note] WSREP: gcs/src/gcs_gcomm.cpp:close():304: gcomm: closing backend
2017-09-07 09:47:15 29880 [Note] WSREP: Service disconnected.
2017-09-07 09:47:15 29880 [Note] WSREP: Waiting to close threads......
2017-09-07 09:47:15 29880 [Note] WSREP: rollbacker thread exiting
2017-09-07 09:47:20 29880 [Note] WSREP: Some threads may fail to exit.
2017-09-07 09:47:20 29880 [Note] Binlog end
2017-09-07 09:47:21 29880 [Note] Shutting down plugin 'partition'
2017-09-07 09:47:21 29880 [Note] Shutting down plugin 'BLACKHOLE'
----skipped----
Неактивен

Вот смущает, что он пустой.
Вообще, идей очень мало, но строчка с IST didn't contain all write sets намекает на то, что данные недопередались. Размер http://galeracluster.com/documentation- … cache-size нормальный? Туда влезают все транзакции? Может, вкрутить его побольше и посмотреть, поможет ли?
Неактивен

Ну и сразу — я не вижу, в чем проблема, пытаемся отгадать вместе ![]()
Неактивен
Размер кеша вкрутил до 300ГБ, безрезультатно, хотя была большая надежда. Тоесть, могу ошибаться, но мне кажется мускуль тупо не стартует на наборе данных. Дважды перепроверил - все скрипты отрабатывают и данные допереливаются. Более того, если отрубить галеру или сказать ноде бутсрапнуться - то она почти всегда взлетает. Я планирую отделить прод и вынести два серва с набором данных на другие сервера, ибо ионогда джоинер тащит в могилу мастер-ноду, а старт медленный. Еще Никак не могу уловить, почему каждый раз мускуль говорит, что иннодб потушен некорректно и начинает перечитвать все файло. innodb_fast_shutdown - не помогает. Даже на мастер ноде, которая тушится 100% нормально.
Неактивен

Не понял про некорректность.
Я правильно услышал, что штатный рестарт без синка всё равно считается некорректным? Если да — какой таймаут стоит на service mysql stop? Штатные инитскрипты бывают очень жесткими (типа подождал минуту, а потом придет с девяткой). Можно простым тестом проверить — kill <pid> должен корректно остановить mysql без каких-либо таймаутов.
Если некорректность при переналивке, то это нормальное состояние — xtrabackup копирует изменяющиеся файлы, а потом докатывает изменения, тут должно быть всё хорошо.
Неактивен
Возможно, я не до точно выразился. Иногда, когда джоинер после стягивания реплики , пытается зацепитьяс - на мастере в логах вываливается что-то про cert failure(точно уже не найду) и мастер нода после этого тушится автоматом по внутреннему событию. Так вот, После этого старт мастер ноды всегда с ошибкой not shut down properly - и как следствие, перечитвает всю базу.
Неактивен

Скорее всего, это какой-то внутренний чек, который убивает демона сразу (чтобы не портить данные), а при старте тогда проигрываются журналы, как и при любом другом неудачном падении.
Но это никак, к сожалению, не решает проблему. Не представляю, как тут помочь, если честно. Пока всё указывает на то, что большой объем, и оно спотыкается об него. Можно смотреть в сторону шардирования или других технологий. В 5.7 оракловцы сделали InnoDB cluster. Та же идея, что в галере, но другая реализация. Но — 5.7, как минимум, вам нужно будет сначала на нее перейти. Плюс сам кластер протестировать — непонятно, будет ли он жить нормально.
Неактивен
Решил попробовать перейти на percona-galera-5.7. Скачал сразу самую последнюю версию, предварительно вычистив два из трех серверов от старых скриптов/бинарей. Поправил в wsrep_sst_xtrabackp-v2 параметр в функции wait_for_listen : for i in {1..300}
и mysql-systemd : statup_sleep=9000
и все взлетело. вплоть до 2ТБ и 1М файлов ни разу синхронизация чистой ноды не упала. Если интересно, могу приложить свои конфиги.
P.S. столкнулся с https://bugs.launchpad.net/percona-server/+bug/1653764 при попытке интенсивной записи на две ноды одновременно через haproxy. Возможно innodb_adaptive_hash_index=0 исправит.
Неактивен

То есть всё-таки бага софта? Отлично, что починилось ![]()
Неактивен