215 похожих чатов

Подскажите, при обновлении с ТТ 1.10.11 на 2.8.4 реплики М-М В

box.info.replication вот такое:
upstream:
peer: user@x.x.x.x:3001
lag: -2.9087066650391e-05
status: stopped
idle: 87139.540768355
message: Transaction id must be equal to LSN of the first row in the transaction.
downstream:
status: stopped
message: unexpected EOF when reading from socket, called on fd 33, aka y.y.y.y:3001,
peer of x.x.x.x:35470
system_message: Broken pipe
Просто сделали рестарт инстанса ничего не меняя. Это только на одной реплике. На остальных обновление прошло нормально и везде follow!
Что произошло у нас?

11 ответов

24 просмотра

Проблема была пофикшена только в 2.x. Фикс, на который вы ссылаетесь, не был добавлен в 1.10.11, поэтому репликация и сломалась, по-видимому. Сделать ничего нельзя, насколько я знаю, - только rebootstrap. @sergepetrenko, так ведь?

Короткий ответ — кажется, достаточно рестартнуть репликацию на больной ноде. (Поскольку она с остальными follow, она уже получила от них кусок данных, который не могла получить от этой ноды, и дальше будет работать нормально) Проблемы могут возникнуть только в момент обновления с 1.10 на 2.x, дальше репликация между 2.x работает как надо. (и мы думали, мы эти проблемы починили. Вы почти нашли нужный коммит: https://github.com/tarantool/tarantool/commit/9fcbbb3e7d5e9f5a876ee27a7bf93303321e26b2) Я думаю, что знаю, что произошло, но чтобы убедиться, нужны икслоги с двух нод — с больной и с той, к которой она пыталась подключиться и не смогла.

Dmitry-Lukovkin Автор вопроса
Sergey Petrenko
Короткий ответ — кажется, достаточно рестартнуть р...

Да, после обновления/рестарта вылетело сообщение. При этом репликация идет данные (реплицируемые) обновляются. Но статус stoped. Что значит "рестартануть"? Позвать еще раз box.cfg.replication? Пробовал рестартануть больную ноду - результат 0 К сожалению поздно заметил и из 13 нод 9 уже обновил и они stoped, остальные 4 follow но они на 1.10 еще

Dmitry Lukovkin
Да, после обновления/рестарта вылетело сообщение. ...

> Что значит "рестартануть"? Позвать еще раз box.cfg.replication? box.cfg.replication=«», box.cfg.replication={old_replication} 9 нод обновили и они ‘stopped’ — имеется в виду, они все не могут подключиться к какой-то одной ноде, или какая-то одна нода не может подключиться ни к одной из них?

А больных уже сколько? Все, которые на 2.8?

Ну сейчас у вас ситуация, что ноды на 2.8 соединены друг с другом только через ноды на 1.10. Обновляться до конца не надо, пока мы не поймём, что делать, потому что видимо в момент, когда последнюю 1.10 обновите все от всех оторвутся. Я думаю, вот что надо сделать. Вы можете остановить нагрузку на одной из больных (aka 2.8) нод, и попытаться на всех окружающих рестрартнуть репликацию? Тогда с этой одной нодой все смогут посинкаться, и можно будет вернуть на неё нагрузку. (То есть у всех upstream к ней должны стать зелёными, а у неё самой downstream ко всем должен стать зелёным) Так по очереди придётся сделать со всеми больными нодами (если это конечно поможет). Вот в чём дело. До тех пор, пока на больной ноде есть нагрузка, она пишет транзакции, но эти транзакции попадают на остальные ноды по кусочкам (из-за того, что репликация проходит через ноду 1.10, которая не в курсе о границах транзакций). Поэтому в какой бы момент одна больная нода ни пыталась соединиться с другой, у неё есть «кусочек» очередной транзакции, и другая нода начинает ей присылать остаток. А мы к такому не готовы, и бросаем ошибку про Transaction id must be equal …. Ожидалось, что 2.8 друг другу будут посылать только транзакции целиком. Но это не так при обновлении, когда 2.8 и 1.10 работают вместе. Соответственно, если остановить нагрузку на одной из 2.8, все остальные (через 1.10) с небольшим лагом получат последнюю её транзакцию «до конца», и смогут начать реплицироваться с этой одной ноды без ошибок. Дальше уже репликация к этой ноде будет работать правильно.

Dmitry-Lukovkin Автор вопроса
Sergey Petrenko
Ну сейчас у вас ситуация, что ноды на 2.8 соединен...

Спасибо большое! План действий понятен. Сейчас начнем готовиться. О результатах напишу. Будем надеяться ограничимся малой кровью. Как понимаю альтернатива тогда(в случае неудачи) только перезагрузка реплики? https://www.tarantool.io/ru/doc/latest/book/replication/repl_reseed/

Dmitry Lukovkin
Спасибо большое! План действий понятен. Сейчас нач...

> Как понимаю альтернатива тогда(в случае неудачи) только перезагрузка реплики? Скорее всего да

Если ещё перезапускаете какие-то ноды с 1.10 до 2.x с ними может та же история повторяться. Либо к ним коннектиться не смогут, либо они к остальным. А если само покраснело, пока ничего не трогали, то надо разбираться. Так быть не должно

Dmitry-Lukovkin Автор вопроса
Sergey Petrenko
Если ещё перезапускаете какие-то ноды с 1.10 до 2....

Не трогал 1.10. Проходит несколько секунд и снова останавливается репликация. Причем количество нод в статусе stop меняется. Некоторые 2.8- 2.8 нормально синхронизируются(follow) А если успеть пока все зеленые рестартануть последние 4 ноды, есть шанс, что все сломается?

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта