Как стать автором
Обновить

Комментарии 7

Вы как-то неправильно к снаряду подходите. Если делать, как вы пишете — то обязательно в какой-то момент получите два мастера. Наверняка в какой-то момент потеряете данные из-за переключений master-slave-master. Да, в конце концов, всё может разломаться из-за небольшого затупа в сети. У двух машин нету единого состояния, по которому можно узнать, кто мастер. А что будет, если CARP решит направить нагрузку на слейв?

Переключение мастер-слейв — операция нетривиальная, явно не для скрипта в 20 строчек. В этой части лучше применять технологии, которые умные люди уже написали и даже потестировали в разных случаях, например Galera (на самом деле оно даже круче, потому что multimaster).

А вот когда у вас уже есть MySQL, который умеет переключаться — можно и CARP добавить. И читать, кстати, с разных нод можно будет.
Тут и есть 2 мастера, только один активный другой пассивный.
А что будет, если CARP решит направить нагрузку на слейв?
— Ну и будет все писаться в БД слейва и реплицироваться на мастер.
Да, в конце концов, всё может разломаться из-за небольшого затупа в сети.
а при использовании 2х серверов тоже может развалиться из-за небольшого затупа в сети.
Glaera Cluster (как и Mysql Cluster собственно) есть резон использовать при наличии 3х серверов. ИМХО.

Скрипт описаный в посте описывает только логику… на практике использую более продуманный, с разными видами проверок.
1. Нарушается, по каким либо причинам, связность между машинами, в результате обе становятся активными мастерами, репликация, естественно, останавливается. Что делать? Как защищаться от split bain?

2. Что делать с лагом репликации?

3. CARP по своим внутренним убеждениям решил направить нагрузку на слейв. В том числе записи. Как они попадут на мастер? А что с чтениями, при наличии лагов?

4. Что делать в случае master-slave-master, когда машины по-очереди ребутятся/падают, особенно с учётом пункта 2?

3 сервера, а, в общем случае, нечётное число > 1, используют не просто так. Арбитраж состояния кластера — это уже математика, просто так сделать действительно надёжную схему на скриптах крайне сложно. А без арбитража в конце концов кластер развалится на куски, каждый из которых продолжит жить своей жизнью, в итоге получится много неконсистентных данных. Если никаких автопереключалок нету, то у вас будет как минимум 1 консистентная копия на мастере. Если они есть, или несколько раз не глядя переключали руками — то даже на мастере уже никто ничего не сможет гарантировать.

Galera — это случай, когда арбитраж встроили в готовый продукт, просто берите и пользуйтесь. Хотите делать на скриптах — возьмите зукипер какой нибудь. Как минимум получите единое состояние всех нод, при правильном использовании.
1. Если карп работает, то писаться данные будут только на 1 мастер. Подразумевается, что все обращения идут на общий айпишник… в данном посте GENERAL='192.168.10.3';

2. К сожалению, избавиться от этого нельзя. Правда существенно это будет только при высоких нагрузках.

CARP по своим внутренним убеждениям решил направить нагрузку на слейв.

3. Так можно про все, что угодно сказать.
Как они попадут на мастер?
Среплицируются)

4. Руками восстанавливать репликацию.

Спасибо за рекомендации.
1. Split brain CARP'а тоже возможен. Кстати, tcp соединения рвутся сразу при изменении advskew?

2. Синхронная репликация типа Galera как раз решает эту проблему.

3. Да, но можно стараться делать более надёжные конструкции. А как записи со слейва на мастер приедут?
Кстати, tcp соединения рвутся сразу при изменении advskew?

Если я правильно понял вопрос… то При ручном изменении advskew соединение не рвется совсем.

slave2#: ifconfig carp0
carp0: flags=49 metric 0 mtu 1500
inet 192.168.10.3 netmask 0xffff0000
carp: BACKUP vhid 1 advbase 1 advskew 200

slave2#: ifconfig carp0 advskew 20

slave2#: ifconfig carp0
carp0: flags=49 metric 0 mtu 1500
inet 192.168.10.3 netmask 0xffff0000
carp: MASTER vhid 1 advbase 1 advskew 1

а мастер соответственно моментально становиться бекапом
master1#: ifconfig carp0
carp0: flags=49 metric 0 mtu 1500
inet 192.168.10.3 netmask 0xffff0000
carp: BACKUP vhid 1 advbase 1 advskew 100

2. Кстате, Galera на фряхе не заводится… (
На линуксе заводится без проблем…
Хочу добавить что есть Multi-Master Replication Manager for MySQL mysql-mmm.org/
Который следит за репликацией и имеет кворум. Чего в данной схеме нет.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории