Как реализовать отказоустойчивость mysql?

Есть небольшой проект работающий на php, с базой mysql, rabbitmq, на этих сервисах завязаны бизнес процессы "оффлайн" маленькой компании. Сейчас размещаем все в РФ на маленьком дешевом VDS, все устраивает, пинг хороший, скорость отличная, НО периодически раз в 2-5 мес. у провайдера падает сеть минут на 15, причем в самый неподходящий момент. Есть дешевый вариант VDS за границей, буквально за теже деньги можно взять 3 VDS. В момент того как сервер недоступен, хочу перебивать A записи в DNS и переключаться на резервный сервер, как синх. файлы более менее понятно, есть куча способов. А вот что делать с MYSQL базой?
Сделать репликацию MASTER-MASTER? Если сервер 1 не доступен, а на резервном сервере изменения в БД, какие последствия ждут? Какие решения существуют для этого? Какие подводные камни есть при реализации такой репликации? Боюсь что есть большой шанс похерить базу MYSQL.
  • Вопрос задан
  • 711 просмотров
Пригласить эксперта
Ответы на вопрос 4
Sanes
@Sanes

НО периодически раз в 2-5 мес. у провайдера падает сеть минут на 15

Это не та проблема, когда надо городить огород, в котором плохо разбираетесь. Еще хуже сделаете.
Наверняка есть провайдеры без таких провалов. Но мне не встречались. При том, что не всё от них зависит.
Ответ написан
MrFrizzy
@MrFrizzy
1) master-master на mariadb - каждый сервер будет иметь свой уникальный gtid и именно мария в отличии от оригинального mysql умеет хорошо разруливать бинарные логи и даже мульти репликацию. Но нужно как минимум прописать сдвиг auto_increment на северах, чтобы он были уникальными
2) galera cluster - где-то на 30% медленнее - транзакция должна пройти на всех нодах, только innodb движок, нужно следить, чтобы не было myisam, нужен кворум нод, то есть две ноды лучше не делать, если одна 100% будет уходить в оффлайн

В первом случае синхронизация может быть с небольшой задержкой на сложных изменениях, но сама схема вполне рабочая.
Все рецепты настроек есть в гугле :)
Ответ написан
@stratosmi
Брать 2-3-5 VPS на облачном провайдере, где отдельная сетка между VPS.
А не та же самая сетка, что для доступа снаружи используется.

НО периодически раз в 2-5 мес. у провайдера падает сеть минут на 15

Если проблема только в этом - поменять провайдера на более серьезного.
Или вообще перейти на услуги managed MySQL

P.S.:
Провайдер - это тот, кто предоставляет вам доступ в интернет. Удаленный VPS никак не связан с вашим провайдером.

VPS располагается у хостера.
Ответ написан
@metajiji
Haproxy + galera + Xtradb от percona, для деплоя посмотрите на готовые ansible плейбуки.
Не забываем про critical read в mysql части и "липкие коннекты" в haproxy.
Кластер минимум 3 годы, чтобы не было split brain, если по феншуям хочется, то 5 лучше нод.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы