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!
Что произошло у нас?
Проблема была пофикшена только в 2.x. Фикс, на который вы ссылаетесь, не был добавлен в 1.10.11, поэтому репликация и сломалась, по-видимому. Сделать ничего нельзя, насколько я знаю, - только rebootstrap. @sergepetrenko, так ведь?
Короткий ответ — кажется, достаточно рестартнуть репликацию на больной ноде. (Поскольку она с остальными follow, она уже получила от них кусок данных, который не могла получить от этой ноды, и дальше будет работать нормально) Проблемы могут возникнуть только в момент обновления с 1.10 на 2.x, дальше репликация между 2.x работает как надо. (и мы думали, мы эти проблемы починили. Вы почти нашли нужный коммит: https://github.com/tarantool/tarantool/commit/9fcbbb3e7d5e9f5a876ee27a7bf93303321e26b2) Я думаю, что знаю, что произошло, но чтобы убедиться, нужны икслоги с двух нод — с больной и с той, к которой она пыталась подключиться и не смогла.
Да, после обновления/рестарта вылетело сообщение. При этом репликация идет данные (реплицируемые) обновляются. Но статус stoped. Что значит "рестартануть"? Позвать еще раз box.cfg.replication? Пробовал рестартануть больную ноду - результат 0 К сожалению поздно заметил и из 13 нод 9 уже обновил и они stoped, остальные 4 follow но они на 1.10 еще
> Что значит "рестартануть"? Позвать еще раз box.cfg.replication? box.cfg.replication=«», box.cfg.replication={old_replication} 9 нод обновили и они ‘stopped’ — имеется в виду, они все не могут подключиться к какой-то одной ноде, или какая-то одна нода не может подключиться ни к одной из них?
А больных уже сколько? Все, которые на 2.8?
Да, 9 штук из 13
Ну сейчас у вас ситуация, что ноды на 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) с небольшим лагом получат последнюю её транзакцию «до конца», и смогут начать реплицироваться с этой одной ноды без ошибок. Дальше уже репликация к этой ноде будет работать правильно.
Спасибо большое! План действий понятен. Сейчас начнем готовиться. О результатах напишу. Будем надеяться ограничимся малой кровью. Как понимаю альтернатива тогда(в случае неудачи) только перезагрузка реплики? https://www.tarantool.io/ru/doc/latest/book/replication/repl_reseed/
> Как понимаю альтернатива тогда(в случае неудачи) только перезагрузка реплики? Скорее всего да
Если ещё перезапускаете какие-то ноды с 1.10 до 2.x с ними может та же история повторяться. Либо к ним коннектиться не смогут, либо они к остальным. А если само покраснело, пока ничего не трогали, то надо разбираться. Так быть не должно
Не трогал 1.10. Проходит несколько секунд и снова останавливается репликация. Причем количество нод в статусе stop меняется. Некоторые 2.8- 2.8 нормально синхронизируются(follow) А если успеть пока все зеленые рестартануть последние 4 ноды, есть шанс, что все сломается?
Обсуждают сегодня