Если вы работаете с большим количеством виртуальных машин, то Vagrant, вероятно, будет лучшим инструментом для их создания, автоматизации и управления, повышая эффективность и производительность развертывания (особенно для dev-окружений). ClusterControl также может быть развернут через Vagrant. Vagrant поддерживает различные платформы виртуализации: VirtualBox, KVM, Hyper-V, контейнеры Docker, VMware и AWS. Мы в качестве провайдера виртуальных машин будем использовать VirtualBox, а для их провижининга — Vagrant. Скачать VirtualBox можно отсюда, а Vagrant отсюда. Установите их и можете двигаться дальше. Для развертывания виртуальной машины с ClusterControl создайте следующие файлы: Vagrantfile — определение и спецификация виртуальной машины. deploy-cc.sh — bash-скрипт для установки ClusterControl. Создайте каталог для Vagrantfile. Создайте Vagrantfile: Добавьте в него следующие строки: Создайте сценарий развертывания deploy-cc.sh в этом же каталоге. Этот скрипт будет выполняться автоматически при каждом запуске виртуальной машины: И добавьте в него следующие строки: Теперь мы готовы запустить нашу первую виртуальную машину. Состояние виртуальной машины можно проверить с помощью следующей команды: Для создания и запуска виртуальной машины, выполните следующую команду: На экране должно появиться много строк, говорящих о том, что Vagrant подготавливает виртуальную машину. Дождитесь завершения этого процесса. После завершения вы можете получить доступ к пользовательскому интерфейсу ClusterControl по адресу http://127.0.0.1:8080/ или https://127.0.0.1:8443/. Порт 8080 предназначен для HTTP-соединения, а 8443 — для HTTPS, как определено в Vagrantfile для forwarded_port. Теперь у нас есть ClusterControl, готовый к управлению и мониторингу нашим кластером. С помощью Vagrant очень легко создать несколько виртуальных машин. В этом примере мы развернем Galera Cluster из трех узлов, работающий на Percona XtraDB Cluster 8.0, как показано на диаграмме ниже: Кластер состоит из трех узлов баз данных и двух узлов ProxySQL для балансировки нагрузки MySQL. Весь этот набор можно рассматривать как одну группу узлов данного кластера. Поэтому определим спецификацию этих виртуальных машин в одном Vagrantfile. Сначала создайте каталог для нашего кластера баз данных: Затем создайте Vagrantfile. И добавьте в него следующие строки: В том же каталоге создайте скрипт authorize.sh и добавьте в него следующее содержимое: Данный скрипт скачивает открытый ключ с сервера ClusterControl, созданный в deploy-cc.sh и сохраняет его в списке авторизованных ключей для пользователя vagrant. Это нужно для использования SSH без пароля, что является обязательным для узлов, управляемых ClusterControl. Для создания и запуска виртуальных машин кластера выполните следующую команду: Подождите, пока все виртуальные машины запустятся. Их статус можно проверить с помощью команды vagrant status:  Теперь пришло время развернуть Percona XtraDB Cluster, используя ClusterControl. Откройте ClusterControl по адресу http://127.0.0.1:8080/clustercontrol, перейдите в Deploy -> MySQL Galera и введите следующие данные: В качестве пользователя SSH (SSH User) указываем vagrant, так как мы авторизовали его открытый ключ в списке authorized_keys на каждом из узлов при провижининге виртуальных машин с помощью Vagrant через authorize.sh. Обратите внимание, что у всех виртуальных машин есть как минимум два сетевых интерфейса. Vagrant при работе с VirtualBox требует, чтобы первое сетевое устройство, подключенное к виртуальной машине, было устройством NAT. Данное NAT-устройство используется для перенаправления портов. И именно через этот механизм Vagrant получает SSH-доступ к виртуальной машине. Наш IP-адрес, определенный в Vagrantfile, будет использоваться на интерфейсах eth1, eth2 и т.д., что важно при их настройке на странице "Define MySQL Servers", показанной ниже: При указании IP-адреса на втором шаге используйте IP-адрес, который мы указали в Vagrantfile (эквивалентен IP-адресу eth1 созданной виртуальной машины). Зеленая галочка рядом с IP-адресом указывает на то, что данный узел доступен через беспарольный SSH  с сервера ClusterControl. Наконец, нажмите "Deploy" и дождитесь завершения развертывания.  После завершения вы должны увидеть следующее: Похожим образом готовим виртуальные машины для балансировщиков нагрузки с соответствующими IP-адресами и беспарольным SSH. Для развертывания ProxySQL перейдите в ClusterControl -> Manage -> Load Balancers -> ProxySQL -> Deploy ProxySQL и укажите первый балансировщик (192.168.11.26), как показано ниже: Не забудьте включить "Use Native Clustering", так как у нас будет несколько хостов ProxySQL. Для начала развертывания нажмите кнопку "Deploy ProxySQL". За ходом выполнения задания можно следить в ClusterControl -> Activity -> Jobs. Повторите вышеуказанные шаги для второго балансировщика (192.168.11.27). После этого мы можем связать эти балансировщики с виртуальным IP-адресом (плавающий IP-адрес для единой конечной точки) с помощью Keepalived, перейдя в ClusterControl -> Manage -> Load Balancers -> Keepalived -> Deploy Keepalived и выбрав оба балансировщика нагрузки с виртуальным IP-адресом (192.168.11.20) на интерфейсе eth1, как показано ниже: Мы развернули отказоустойчивый кластер баз данных, повторяющий продакшн-окружение. Остановить все узлы кластера можно одной командой: Для остановки виртуальной машины с ClusterControl перейдите в каталог ClusterControl и выполните такую же команду: Для удаления виртуальных машин замените команду vagrant halt на vagrant destroy. Позже вы всегда сможете воссоздать их с помощью команды vagrant up. Перевод статьи подготовлен в преддверии старта курса «Базы данных».  Также приглашаем всех желающих посетить бесплатный демо-урок по теме: «MySQL NDB Cluster — шардинг».  Редактор