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 ответов

9 просмотров

Проблема была пофикшена только в 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 ноды, есть шанс, что все сломается?

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

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

вопрос: кто как решает вопрос с динамической подгрузкой скриптов для отдельных страниц с включенным turbo router?
Sergei Toroptsev
25
Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
> комьюнити я бы не судил по этому чату. Как мы видели по статам просмотров нескольких телеговских постов, то в чате их набивается 30-40 или даже выше, когда как общаются акти...
Constantin F.
4
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Как сделать чтобы short точно был 2 байта, int точно 4 байта ?(без стандартных библиотек, ну типа без int16_t, int32_t)
#
8
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Только такой if ($modx->event->name == 'OnBeforeCartItemAdding') { $meta = $params['item']['meta']; $lang = $modx->getConfig('_lang'); // проверяем, задана ли опция i...
Multi Web
1
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Карта сайта