SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.10.2010 13:14:22

Rhaido
Участник
Зарегистрирован: 19.10.2010
Сообщений: 4

Вопрос по организации MySQL-кластера

Добрый день!

Есть вопрос по следующей конфигурации: есть 2 машины - управляющие ноды, и есть 3 машины - дата ноды; NoOfReplicas=3. Цель - сделать конфигурацию, устойчивую к выпадению _любых_ 2х машин. Предположим, что кластер разваливается на 2 неравные части ("split brain", насколько я понимаю): в одной есть управляющая нода и дата нода с полной копией данных, в другой - управляющая нода и 2 дата ноды. Как правильно расставить ArbitrationRank, что бы меньшая часть кластера выключилась?

Неактивен

 

#2 19.10.2010 14:28:37

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Вопрос по организации MySQL-кластера

Арбитром станет только одна из нод, как бы вы не расставили ArbitrationRank. Не выключится та часть, в которой есть арбитр. От одновременного падени двух машин защититься не удастся. Пусть датаноды D1,D2,D3 и управляющие M1,M2. Пусть арбитр (на какой-то момент времени) M1. Тогда, если выпадет M1 и D1, то оставшаяся часть выключится, так как split brain + нет арбитра.

Чтобы повысить надежность вам придется сделать 6 дата нод и NoOfReplicas=3, при этом арбитром должна быть одна из управляющих нод. Тогда при выпадении двух нод, произойдет одно из двух:
  - или это две датаноды, тогда данные в сохраннсоти (NoOfReplicas=3) и арбитр не выпал
  - или выпала дата-нода и M1 (арбитр), но тогда нет ситуации split brain и будет выбран новый арбитр.

См. также статью: http://webew.ru/articles/252.webew

Неактивен

 

#3 19.10.2010 15:07:32

Rhaido
Участник
Зарегистрирован: 19.10.2010
Сообщений: 4

Re: Вопрос по организации MySQL-кластера

Правильно ли я понимаю, что 6 дата нод будут располагаться на 3х физических машинах, и есть 2 группы нод и на каждой машине одновременно работают 2 дата-ноды? И каждая дата нода относится либо к 1й группе, либо ко 2й? А чем это лучше, чем просто 3 дата ноды с NoOfReplicas=3 при том условии, что рассматривается физическое выпадение сервера из кластера?

А если пропадает связь между группами (М1, сервер1) и (M2, сервер2, сервер3) - то что произодёт (всё при этом работает, только связи между ними нет)? Предположим, что М1 - это изначальный арбитр. Тогда после развала кластера М2 станет новым арбитром и части кластера начнут действовать независимо, т.к. ноды с сервера 1 будут хранить полную информацию и видеть арбитра, а во второй группе будет выбран новый арбитр и, соответственно, дата-ноды второй группы так же продолжат работу?

Спасибо за статью, очень помогла разобраться в некоторых аспектах работы кластера.

Отредактированно Rhaido (19.10.2010 16:57:24)

Неактивен

 

#4 19.10.2010 18:15:13

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Вопрос по организации MySQL-кластера

> А если пропадает связь между группами (М1, сервер1) и (M2, сервер2, сервер3) - то что произодёт (всё при этом работает, только связи между ними нет)? Предположим, что М1 - это изначальный арбитр. Тогда после развала кластера М2 станет новым арбитром и части кластера начнут действовать независимо, т.к. ноды с сервера 1 будут хранить полную информацию и видеть арбитра, а во второй группе будет выбран новый арбитр и, соответственно, дата-ноды второй группы так же продолжат работу?

В ситуации, которую Вы описали, (M2, сервер2, сервер3) выключатся. Дело в том, что они видят, что исчезнувший кусок содержит полную информацию и в нем арбитр, поэтому выбор арбитра невозможен.

Если шесть нод на трех физических машинах, то трудно будет добиться требуемого. Нужно исключить две следующие ситуации:
1. Выпадают все ноды из одной группа (info loss)
2. Выпадают по одной ноде из каждой группы и арбитр (тогда остаток выключится)

Если выпал один арбитр, то происходит выбор нового. Если по одной ноде из каждой группы без арбитра, то они отключатся, а часть с арбитром будет работать.

Защита от выпадания двух нод.
1. Нужно не менее двух групп. Если одна группа, то падения сервера из нее и арбитра выключит остальные.
2. Не должно быть одного сервера, на котором запущены ноды из всех имеющихся групп (см. п.1)
3. Все ноды каждой группы должны быть распределены хотя бы на 3 сервера (то есть выпадание двух дата-серверов не должно приводить к потере данных).

С тремя физическими дата-серверами решить задачу нельзя, так как будет противоречие между пунктами 2 и 3. Подумайте так ли это нужно защититься от двойного одновременного отказа. С 6 дата-серверами решить задачу можно. Может быть достаточно меньшего числа, но для этого требуется подумать.

Неактивен

 

#5 20.10.2010 10:37:01

Rhaido
Участник
Зарегистрирован: 19.10.2010
Сообщений: 4

Re: Вопрос по организации MySQL-кластера

> В ситуации, которую Вы описали, (M2, сервер2, сервер3) выключатся. Дело в том, что они видят, что исчезнувший кусок содержит полную информацию и в нем арбитр, поэтому выбор арбитра невозможен.

Хм, видимо я не понимаю, как происходит выбор нового арбитра. Если мы в явном виде укажем на М2 ArbitrationRank=2, то произойдёт ли выбор нового арбитра после пропажи ноды и арбитра? Или новый арбитр выбирается только тогда, когда пропадает только арбитр, а не в случае пропажи арбитра и ноды? Не могли бы ссылкой на нужную страничку в мануале поделиться, а то я запутался слегка.

Отредактированно Rhaido (20.10.2010 10:40:38)

Неактивен

 

#6 20.10.2010 14:49:06

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Вопрос по организации MySQL-кластера

AbitrationRank влияет на то, кого выберут арбитром (из оставшихся в живых), но не на сам факт проведения выборов, поэтому не стоит переоценивать важность этого параметра.

Выборы арбитра происходят только если пропавшая часть не содержит полных данных.

Неактивен

 

#7 21.10.2010 09:16:24

Rhaido
Участник
Зарегистрирован: 19.10.2010
Сообщений: 4

Re: Вопрос по организации MySQL-кластера

Спасибо за комментарии, будем разбираться )

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson