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

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

Это выглядит сложнее, чем Galera Cluster c MaxScale. Сами пробовали настраивать Galera Cluster?
Нет, эта конструкция завелась раньше, чем я потерял терпение. При изначальном выборе вектора выбор не упал на Галеру потому, что там встретилось меньше знакомых слов :)

Спасибо за статью. Покупка ораклом пошла мускулу на пользу. Даже в комьюнити эдишн много плюшек из оракла.

В опенсорс комьюнити не все с этим утверждением согласны, насколько мне известно.
Скачиваем (это можно сделать только вручную, пройдя регистрацию на сайте Оракла)

Регистрация не обязательна. Просто на одной из страниц загрузки внизу есть неприметная прямая ссылочка с текстом «No thanks, just start my download».
Спасибо, буду знать. Не разглядел её, видимо
Для скачивания из репозиториев можно еще проще — добавить в закладки http://repo.mysql.com и оттуда на сервере wget пакет который установит репу. Для Centos7, например, это будет (напрямую без wget):

# sudo yum install http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm


После этого все будет доступно напрямую из реп.
Спасибо за подробную инструкцию.

Очень интересный вопрос есть по этому делу — как такая конфигурация реагирует на временные проблемы с сетью (например split-brain ситуация)?
Я тесты не делал, но если верить документации, то кластер поддерживает кворум. При его отсутствии все ноды переходят в super_read_only состояние. При возобновлении связи репликация восстанавливается автоматически (там есть таймауты, но они довольно большие). В общем, если верить разработчикам, то для геораспределенных редантных систем решение должно подойти. У меня намечается подобный опыт, поделюсь, если не будет свежих отзывов раньше.

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

Если решитесь использовать — поделитесь, каков он на практике, геораспределенный InnoDB Cluster

Чуть менее 10 лет использую мультимастер между разными ДЦ. Никогда не испытывал проблем.

Ничего нового, но оставлю как справку. Я такие кластеры лет 10 назад делал. :)
А поделитесь технологиями: какой БД пользовались? Как обеспечивали репликацию? Как была обеспечена консистентность кластера? Как организовывали переключение потоков данных при аварии?

Как-то со всем этим 10 лет назад было не очень, насколько мне помнится. По крайней мере, в opensource
Спасибо за статью. А что произойдет, если нода, которая на данный момент является мастером, по каким-то причинам отвалится? Кластер сам выберет нового мастера?
Да, конечно. А mysqlrouter переключит запросы на запись на него, тоже автоматически.
объясните. как понимаю общего IP или имени здесь нет. как понимаю приложение само должно знать что работает с несколькими инстанциями? или что то путаю?
Спасибо за вопрос! Значит я плохо/непонятно написал про mysqlrouter. Давайте попробую еще раз:

mysqlrouter — специальное приложение, предназначенное для маршрутизации приходящих на него запросов на нужную ноду кластера MySQL. Когда Вы запускаете mysqlrouter, он открывает на порту (например, 3306 для того, что б не переписывать конфиги сторонних приложений) сокет, на котором принимает запросы от клиентских приложений. Так же при запуске mysqlrouter опрашивает кластер и выясняет, какие машины могут принимать запросы на чтение/запись, а какие — только на чтение.

Далее, в какой-то момент Ваш сайт обращается (как обычно) к порту 3306. mysqlrouter переправляет этот запрос на соответствующую ноду кластера, получает ответ и переправляет его запросившему. Таким образом, mysqlrouter берет на себя задачи распределения трафика между нодами. Он самостоятельно поддерживает актуальность состояния кластера проводя периодические опросы на предмет изменения в составе и смены мастера.

Все несколько усложняется тем, что на самом деле mysqlrouter открывает не один 3306, а целых четыре порта. В моем примере 3306, 3307, 33061 и 33071. На 3306 я цепляю приложения, которым требуется доступ к БД на запись, к 3307 — только на чтение. На эти портах обмен производится по классическому протоколу MySQL. 33061 и 33071 используются, соответственно, для операций на чтение/запись и только чтение по протоколу X (новый протокол обмена MySQL)

Если знакомы с haproxy, то mysqlrouter — это специализированный haproxy для MySQL

Upd: Разработчики рекомендуют располагать mysqlrouter непосредственно на машинах, которые будут выполнять запросы к БД.

Спасибо за развернутый ответ! Теперь бы понять каким образом для такой схемы ( кластер) можно осуществлять резервное копирование, и самое главное востановлкние как целиком БД так и докатыванием логами до определенного момента.

Да точно так же, как обычно. Подключиться к кластеру можно как через mysqlrouter, так и непосредственно к каждому инстансу mysqld, который при этом полноценно отвечает. Другое дело, что на слэйвах он вам не даст сделать запись. Если вы хотите сделать мгновенный слепок системы, то любую машину выводите из кластера, делаете на ней mysqldump и заводите её обратно. Все пропущенное за время отсутствия она подтянет сама. Если не боитесь за консистентность БД, то делайте mysqldump прямо через mysqlrouter.

Про восстановление по логам до определенного момента — не знаю, тут я не спец. Если для MySQL такое решение есть, то и к кластеру оно наверняка применимо, поскольку для обмена данными используются самые обычные бинлоги.

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

С восстановлением всего кластера на определенный момент не знаю. Простейший вариант: создал новый кластер, развернул в него нужный бэкап и заменил старый кластер на новый целиком. Это точно сработает. Другие варианты — надо изучать раздел Group Replication официальной доки. Наверняка есть менее радикальные варианты, просто по роду деятельности не приходилось сталкиваться с такой задачей.
Например, у Вас 10 backend-серверов, которые обращаются к БД. На каждом разворачиваете mysqlrouter и с делаете обращение к 127.0.0.1:3306, а mysqlrouter`ы самостоятельно отправляют запросы на нужные ноды кластера.

Подскажите, в этой конструкции зачем подключается X Plugin. В чем суть превращения в Document Store ?

Если мне не изменяет память, конфиг кластера хранится в документ-сторе. А пользовательские данные - в обычном виде. Почему и зачем так - ХЗ. Так было написано в руководстве от разработчиков.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории