Комментарии 25
Спасибо за статью. Покупка ораклом пошла мускулу на пользу. Даже в комьюнити эдишн много плюшек из оракла.
Скачиваем (это можно сделать только вручную, пройдя регистрацию на сайте Оракла)
Регистрация не обязательна. Просто на одной из страниц загрузки внизу есть неприметная прямая ссылочка с текстом «No thanks, just start my download».
# 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 ситуация)?
Да вот у меня прямо сейчас такой проект. Даже два. Один все а одном ДЦ где такое вряд ли случится, а вот второй как раз геораспределенный и ещё все через VPN подключается, так что задержки там могут быть нехилые.
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 непосредственно на машинах, которые будут выполнять запросы к БД.
Спасибо за развернутый ответ! Теперь бы понять каким образом для такой схемы ( кластер) можно осуществлять резервное копирование, и самое главное востановлкние как целиком БД так и докатыванием логами до определенного момента.
Про восстановление по логам до определенного момента — не знаю, тут я не спец. Если для MySQL такое решение есть, то и к кластеру оно наверняка применимо, поскольку для обмена данными используются самые обычные бинлоги.
с востановлением из дампа все так просто? разве при востановление базы на одном из серверов он не выпадет из кластера, а когда его туда обратно подключат не докатит состояние базы до более свежей кластера?
Подскажите, в этой конструкции зачем подключается X Plugin. В чем суть превращения в Document Store ?
InnoDB cluster — оно работает, и вроде бы именно так, как обещали