Русский
Русский
English
Статистика
Реклама

Перевод Развертывание кластера баз данных через Vagrant с помощью ClusterControl


Если вы работаете с большим количеством виртуальных машин, то Vagrant, вероятно, будет лучшим инструментом для их создания, автоматизации и управления, повышая эффективность и производительность развертывания (особенно для dev-окружений). ClusterControl также может быть развернут через Vagrant.

Vagrant поддерживает различные платформы виртуализации: VirtualBox, KVM, Hyper-V, контейнеры Docker, VMware и AWS. Мы в качестве провайдера виртуальных машин будем использовать VirtualBox, а для их провижининга Vagrant.

Скачать VirtualBox можно отсюда, а Vagrant отсюда. Установите их и можете двигаться дальше.

Развертывание ClusterControl через Vagrant

Для развертывания виртуальной машины с ClusterControl создайте следующие файлы:

  • Vagrantfile определение и спецификация виртуальной машины.

  • deploy-cc.sh bash-скрипт для установки ClusterControl.

Создайте каталог для Vagrantfile.

$ mkdir ~/vagrant/clustercontrol$ cd ~/vagrant/clustercontrol

Создайте Vagrantfile:

$ vim Vagrantfile

Добавьте в него следующие строки:

Vagrant.configure("2") do |config|  config.vm.box = "centos/7"  config.vm.network "forwarded_port", guest: 80, host: 8080  config.vm.network "forwarded_port", guest: 443, host: 8443  config.vm.network :private_network, ip: "192.168.11.11"  config.vm.hostname = "cc.local"  config.vm.provision "shell" do |s|    s.inline = "yum install -y vim wget"  end  config.vm.provision "shell", path: "deploy-cc.sh"   config.vm.provider :virtualbox do |vb|    vb.customize [      "modifyvm", :id,      "--memory", "4096",    ]  endend

Создайте сценарий развертывания deploy-cc.sh в этом же каталоге. Этот скрипт будет выполняться автоматически при каждом запуске виртуальной машины:

$ vim deploy-cc.sh

И добавьте в него следующие строки:

Vagrant.configure("2") do |config|  config.vm.box = "centos/7"  config.vm.network "forwarded_port", guest: 80, host: 8080  config.vm.network "forwarded_port", guest: 443, host: 8443  config.vm.network :private_network, ip: "192.168.11.11"  config.vm.hostname = "cc.local"  config.vm.provision "shell" do |s|    s.inline = "yum install -y vim wget"  end  config.vm.provision "shell", path: "deploy-cc.sh"   config.vm.provider :virtualbox do |vb|    vb.customize [      "modifyvm", :id,      "--memory", "4096",    ]  endend

Теперь мы готовы запустить нашу первую виртуальную машину. Состояние виртуальной машины можно проверить с помощью следующей команды:

$ vagrant status

Для создания и запуска виртуальной машины, выполните следующую команду:

$ vagrant up

На экране должно появиться много строк, говорящих о том, что 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. Сначала создайте каталог для нашего кластера баз данных:

$ mkdir ~/vagrant/clustercontrol/percona-xtradb-cluster-80/$ cd ~/vagrant/clustercontrol/percona-xtradb-cluster-80/

Затем создайте Vagrantfile.

$ vim ~/vagrant/clustercontrol/percona-xtradb-cluster-80/Vagrantfile

И добавьте в него следующие строки:

nodes = [  { :hostname => 'db1', :ip => '192.168.11.21', :ram => 1024, :guestport => 3306, :hostport => 13306 },  { :hostname => 'db2', :ip => '192.168.11.22', :ram => 1024, :guestport => 3306, :hostport => 23306 },  { :hostname => 'db3', :ip => '192.168.11.23', :ram => 1024, :guestport => 3306, :hostport => 33306 },  { :hostname => 'proxy1', :ip => '192.168.11.26', :ram => 512, :guestport => 6033, :hostport => 16033 },  { :hostname => 'proxy2', :ip => '192.168.11.27', :ram => 512, :guestport => 6033, :hostport => 26033 }] Vagrant.configure("2") do |config|  nodes.each do |node|    config.vm.define node[:hostname] do |nodeconfig|      nodeconfig.vm.box = 'centos/7'      nodeconfig.vm.hostname = node[:hostname] + ".local"      nodeconfig.vm.network :private_network, ip: node[:ip]      nodeconfig.vm.network "forwarded_port", guest: node[:guestport], host: node[:hostport]       memory = node[:ram] ? node[:ram] : 512;      nodeconfig.vm.provider :virtualbox do |vb|        vb.customize [ "modifyvm", :id, "--memory", memory.to_s ]        vb.customize [ "modifyvm", :id, "--audio", "none" ]      end       nodeconfig.vm.provision "shell" do |s|        s.inline = "yum install -y wget vim"      end    end  end   (1..3).each do |i|    config.vm.define "db#{i}" do |dbnode|      dbnode.vm.provision "shell", path: "authorize.sh"    end  end   (1..2).each do |i|    config.vm.define "proxy#{i}" do |dbnode|      dbnode.vm.provision "shell", path: "authorize.sh"    end  end end

В том же каталоге создайте скрипт authorize.sh и добавьте в него следующее содержимое:

CC_IP=192.168.11.11curl -s http://${CC_IP}/cc.pub >> /home/vagrant/.ssh/authorized_keys

Данный скрипт скачивает открытый ключ с сервера ClusterControl, созданный в deploy-cc.sh и сохраняет его в списке авторизованных ключей для пользователя vagrant. Это нужно для использования SSH без пароля, что является обязательным для узлов, управляемых ClusterControl.

Для создания и запуска виртуальных машин кластера выполните следующую команду:

$ vagrant up

Подождите, пока все виртуальные машины запустятся. Их статус можно проверить с помощью команды vagrant status:

$ 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, как показано ниже:

Мы развернули отказоустойчивый кластер баз данных, повторяющий продакшн-окружение.

Остановить все узлы кластера можно одной командой:

$ cd ~/vagrant/clustercontrol/percona-xtradb-cluster-80$ vagrant halt

Для остановки виртуальной машины с ClusterControl перейдите в каталог ClusterControl и выполните такую же команду:

$ cd ~/vagrant/clustercontrol$ vagrant halt

Для удаления виртуальных машин замените команду vagrant halt на vagrant destroy. Позже вы всегда сможете воссоздать их с помощью команды vagrant up.


Перевод статьи подготовлен в преддверии старта курса Базы данных.

Также приглашаем всех желающих посетить бесплатный демо-урок по теме: MySQL NDB Cluster шардинг.

Источник: habr.com
К списку статей
Опубликовано: 02.02.2021 16:10:30
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании otus

Mysql

Администрирование баз данных

Базы данных

Ndb

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru