Добрый день!Задача:
Организовать отказоустойчивый с балансировкой нагрузки сервер для ПО разработчиков.Реализовано:
2 сервера, каждый с 2-мя eth гигабитными интерфейсами. Один интерфейс eth1 - в сеть с клиентами, второй eth2 - используется для кросс-кабельного соединения между обоими серверами.на каждом сервере создаются раздел под drbd, сам drbd настраивается в режиме pri-pri, на клиентах оба сервера прописываются в настройках клиентского ПО с равным приоритетом и поэтому загружены приблизительно равномерно. Поверх раздела drbd настроена ocfs2 файловая система. Для синхронизации drbd и ocfs используется внутренняя сеть через кросс кабель на вторых интерфейсах серверов.
Вроде всё работает замечательно, но вот непонятно как отрабатывать ситуацию, если например в одном из серверов выгорит интерфейс eth1. Т.е. прервётся синхронизация drbd и ocfs, наступит split-brain. По идее каждый сервер будет продолжать отдельно обслуживать клиентов и тем самым увеличивать разницу между расщеплёнными половинками drbd. И потом станет невозможным выбрать с кого синхронизировать данные при устранении split-brain.
Что посоветуете? Или придётся переходить на pri-sec и отказаться от балансировки нагрузки ?
>[оверквотинг удален]
> настроена ocfs2 файловая система. Для синхронизации drbd и ocfs используется внутренняя
> сеть через кросс кабель на вторых интерфейсах серверов.
> Вроде всё работает замечательно, но вот непонятно как отрабатывать ситуацию, если например
> в одном из серверов выгорит интерфейс eth1. Т.е. прервётся синхронизация drbd
> и ocfs, наступит split-brain. По идее каждый сервер будет продолжать отдельно
> обслуживать клиентов и тем самым увеличивать разницу между расщеплёнными половинками drbd.
> И потом станет невозможным выбрать с кого синхронизировать данные при устранении
> split-brain.
> Что посоветуете? Или придётся переходить на pri-sec и отказаться от балансировки нагрузки
> ?Если нет связи, то гаси одну голову, самое простое условие при расщеплении мозгов, во всех документах написано, если выгорит тот что смотрит в клиентскую сеть, то и писаться ничего не будет.
>[оверквотинг удален]
>> в одном из серверов выгорит интерфейс eth1. Т.е. прервётся синхронизация drbd
>> и ocfs, наступит split-brain. По идее каждый сервер будет продолжать отдельно
>> обслуживать клиентов и тем самым увеличивать разницу между расщеплёнными половинками drbd.
>> И потом станет невозможным выбрать с кого синхронизировать данные при устранении
>> split-brain.
>> Что посоветуете? Или придётся переходить на pri-sec и отказаться от балансировки нагрузки
>> ?
> Если нет связи, то гаси одну голову, самое простое условие при расщеплении
> мозгов, во всех документах написано, если выгорит тот что смотрит в
> клиентскую сеть, то и писаться ничего не будет.так тут-то и затыка!
:) а как определить на какой нет связи?если на каждой ноде сделать скрипт с попингуем, то при выгорании eth2 на первой ноде пропадёт связь между нодами и получается что каждая зафиксировала "падение" соседа. И что - обоим теперь выключатся?
Чисто в теории если на server1 выгорает eth2, то на нём же надо сразу же класть и eth1 - тогда нода останется в изоляции и будет заведомо брошенной. Только может получится ситуация, что так решат обе ноды и сами заизолируются :) и где тут отказоустойчивость тогда? :)
>[оверквотинг удален]
> так тут-то и затыка!
> :) а как определить на какой нет связи?
> если на каждой ноде сделать скрипт с попингуем, то при выгорании eth2
> на первой ноде пропадёт связь между нодами и получается что каждая
> зафиксировала "падение" соседа. И что - обоим теперь выключатся?
> Чисто в теории если на server1 выгорает eth2, то на нём же
> надо сразу же класть и eth1 - тогда нода останется в
> изоляции и будет заведомо брошенной. Только может получится ситуация, что так
> решат обе ноды и сами заизолируются :) и где тут отказоустойчивость
> тогда? :)Вариант - доделать кластер до конца. Peacemaker+heartbeat или другой backend. Связь через "клиентские" порты и гашение системой управления кластером одного заранее выбранного узла при падении интерфейсов синхронизации распределённой фс.
>[оверквотинг удален]
>> на первой ноде пропадёт связь между нодами и получается что каждая
>> зафиксировала "падение" соседа. И что - обоим теперь выключатся?
>> Чисто в теории если на server1 выгорает eth2, то на нём же
>> надо сразу же класть и eth1 - тогда нода останется в
>> изоляции и будет заведомо брошенной. Только может получится ситуация, что так
>> решат обе ноды и сами заизолируются :) и где тут отказоустойчивость
>> тогда? :)
> Вариант - доделать кластер до конца. Peacemaker+heartbeat или другой backend. Связь через
> "клиентские" порты и гашение системой управления кластером одного заранее выбранного узла
> при падении интерфейсов синхронизации распределённой фс.+проверка через serial port, мало ли ченть с модулями сетевыми случится или еще какой-нибудь факап.