Ръчните разгръщания са често срещани, но могат да бъдат бавни и монотонни, ако някога сте опитвали инсталация на Oracle RAC с настройка на Data Guard на повече от три възела, знаете какво имам предвид. В зависимост от броя на възлите, стъпките за внедряване може да отнемат време и да са вероятни грешки. Разбира се, има много добри „насоки“ за това как да направите ръчна настройка на клъстер от база данни, но с ръчния подход в мащаб има много допълнителни въпроси, които трябва да се решат.
По същия начин ли са настроени другите екземпляри в моята среда? Тази система за QA беше ли създадена по същия начин като производството? Дали това, което току-що внедрихме, е готово за производство? За да се отговори на всички тези въпроси, внедряването все повече се автоматизира чрез инструменти за управление на конфигурацията.
Свързани ресурси Автоматизация на база данни с Puppet:Разгръщане на MySQL и MariaDB репликация Как да се автоматизира разполагането на MySQL Galera Cluster с помощта на s9s CLI и Chef Как да се автоматизира миграцията от самостоятелен MySQL към Galera Cluster с помощта на Ansible ClusterControl за MariaDBПопулярните инструменти за управление на конфигурацията като Puppet, Chef и Ansible са доказани технологии за внедряване на различни ИТ услуги. Те помагат за премахване на ръчната работа, минимизират риска от човешка грешка и правят възможно бързото внедряване. В днешния блог ще разгледаме един от тях.
Ansible е инструмент за управление на системата с отворен код за централизиране и автоматизиране на управлението на конфигурацията. С Ansible можете лесно да автоматизирате различни разгръщания на бази данни и да изпълнявате прости административни задачи. Ще покажем как автоматично да инсталирате и конфигурирате софтуер като MySQL сървър в възпроизводими среди. В този блог ще се съсредоточим върху репликацията на MariaDB, но ако се интересувате от други задачи, моля, проверете другите ни блогове, където пишем повече за Ansible.
Vagrant, Virtualbox и Ansible
Ansible може да помогне за разгръщането на MySQL Cluster в облака или локално. За целите на този блог ще използваме популярната настройка за провеждане на различни тестове на настолни машини с Vagrant и Virtualbox.
Vagrant е система, която ви позволява лесно да създавате и премествате среди за разработка от една машина на друга. Просто дефинирайте какъв тип VM искате във файл, наречен Vagrantfile, и след това ги задействайте с една команда. Той се интегрира добре с доставчици на виртуални машини като VirtualBox, VMware и AWS и което е важно за нашата задача, има страхотна поддръжка от Ansible.
Нашият Vagrantfile разполага с 2 екземпляра на платформата VirtualBox, един за главен възел и втори подчинен възел. След това ще използваме Ansible, за да стартираме инсталирането на необходимите пакети и да изпълним конфигурация на главен/подчинен. По-долу е списъкът със задачите, които ще изпълним.
- Инсталирайте Vagrant и Virtualbox
- Конфигуриране на vagrant file и ansible playbook
- Стартирайте екземплярите
- Изтеглете свързаните кутии Vagrant и Vagrantfile (това се прави автоматично)
- Изпълнете Ansible playbook (това ще стане автоматично)
- Добавете клъстера към ClusterControl за задачата за наблюдение и управление (като архивиране, сигурност, управление на потребителите, управление на производителността и много други).
Инсталация на Vagrant, Virtualbox и Ansible в Ubuntu
Инсталирайте пакети
sudo apt-get install ansible vagrant virtualbox
Създайте конфигурационни файлове за Vagrant и Ansible
$ mkdir mariadbtest
$ vi Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.provision "ansible" do |ansible|
ansible.playbook = "maria.yml"
ansible.sudo = true
end
config.vm.define "master" do |master|
master.vm.hostname = "master"
master.vm.network "forwarded_port", guest: 3306, host: 3336
master.vm.network "private_network", ip: "192.168.10.2"
end
config.vm.define "slave" do |slave|
slave.vm.hostname = "slave"
slave.vm.network "forwarded_port", guest: 3306, host: 3337
slave.vm.network "private_network", ip: "192.168.10.3"
end
config.vm.provider "virtualbox" do |v|
v.memory = 1024
v.cpus = 2
end
end
Горният vagrant файл ще създаде две машини със следната конфигурация:
- Master:2 CPU, 1GB RAM, Private IP:192.168.10.2 Port forward:3336
- Slave:2CPU, 1GB RAM, Private IP:192.168.10.3, Port forward:3337
Структура на книгата
В тази стъпка ще дефинираме Ansible playbook. Ansible използва YAML като лесен език за маркиране за дефиниране на инструкции. Създаваме следния „maria.yml“ въз основа на файла Ansible, предоставен от Mariadb.
$vi maria.yml
- hosts: master:slave
user: vagrant
tasks:
- name: Install MariaDB repository
apt_repository: repo='deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.3/ubuntu trusty main' state=present
- name: Add repository key to the system
apt_key: keyserver=keyserver.ubuntu.com id=0xcbcb082a1bb943db
- name: Install MariaDB Server
apt: name=mariadb-server state=latest update_cache=yes
- name: Install python module
apt: name=python-mysqldb state=installed
- name: Create replication account
mysql_user: name=repl host="%" password=s3cr3tPaSSwordR priv=*.*:"REPLICATION SLAVE" state=present
- name: Create readwrite user
mysql_user: name=rwuser host="%" password=s3cr3tPaSSwordR priv=*.*:SELECT,INSERT,UPDATE,DELETE,CREATE,DROP state=present
- name: Modify configuration file to listen on all interfaces
lineinfile: dest=/etc/mysql/my.cnf regexp="^bind-address" line="bind-address=0.0.0.0"
- hosts: master
user: vagrant
tasks:
- name: Modify configuration file to setup server ID
lineinfile: dest=/etc/mysql/my.cnf regexp="^#server-id" line="server-id=1"
- name: Restart mysql service
service: name=mysql state=restarted
- name: Reset master binlog
command: /usr/bin/mysql -u root -e "RESET MASTER"
- hosts: slave
user: vagrant
tasks:
- name: Modify configuration file to setup server ID
lineinfile: dest=/etc/mysql/my.cnf regexp="^#server-id" line="server-id=2"
- name: Setup replication
command: /usr/bin/mysql -uroot -e "CHANGE MASTER TO master_host='192.168.10.2', master_user='repl', master_password='s3cr3tPaSSwordR', master_use_gtid=current_pos"
- name: Restart mysql service
service: name=mysql state=restarted
ClusterControlЕдинична конзола за цялата ви инфраструктура на базата данни Открийте какво още е новото в ClusterControlИнсталирайте ClusterControl БЕЗПЛАТНО Сега е време за случаите. Vagrant up ще задейства инсталацията на playbook.
$ vagrant up
DEPRECATION: The 'sudo' option for the Ansible provisioner is deprecated.
Please use the 'become' option instead.
The 'sudo' option will be removed in a future release of Vagrant.
==> vagrant: A new version of Vagrant is available: 2.2.4 (installed version: 2.2.3)!
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html
Bringing machine 'master' up with 'virtualbox' provider...
Bringing machine 'slave' up with 'virtualbox' provider...
==> master: Box 'ubuntu/trusty64' could not be found. Attempting to find and install...
master: Box Provider: virtualbox
master: Box Version: >= 0
==> master: Loading metadata for box 'ubuntu/trusty64'
master: URL: https://vagrantcloud.com/ubuntu/trusty64
==> master: Adding box 'ubuntu/trusty64' (v20190429.0.1) for provider: virtualbox
master: Downloading: https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20190429.0.1/providers/virtualbox.box
master: Download redirected to host: cloud-images.ubuntu.com
master: Progress: 7% (Rate: 551k/s, Estimated time remaining: 0:14:31)
Bringing machine 'master' up with 'virtualbox' provider...
Bringing machine 'slave' up with 'virtualbox' provider...
Ако нямате вече изтеглено изображение на ubuntu от Virtualbox, vagrant ще го изтегли автоматично, както в горния пример.
PLAY [master:slave] ************************************************************
TASK [Gathering Facts] *********************************************************
ok: [slave]
TASK [Install MariaDB repository] **********************************************
changed: [slave]
TASK [Add repository key to the system] ****************************************
changed: [slave]
TASK [Install MariaDB Server] **************************************************
След успешна инсталация на playbook ще видите следния изход и трябва да можете да влезете в базата данни с предварително дефинирани идентификационни данни (вижте playbook).
PLAY RECAP ********************************************************************
master : ok=12 changed=10 unreachable=0 failed=0
Следващата стъпка е да импортирате вашата главна/подчинена конфигурация в ClusterControl. Най-лесният и удобен начин за инсталиране на ClusterControl е да използвате инсталационния скрипт, предоставен от Severalnines. Просто изтеглете скрипта и го изпълнете като root потребител или потребител с sudo root разрешение.
$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user
Ако искате да добавите инсталация на ClusterControl към вашата книга, можете да използвате следните инструкции.
Следващата стъпка е да генерираме SSH ключ, който ще използваме, за да настроим SSH без парола по-късно. Ако имате двойка ключове, която искате да използвате, можете да пропуснете създаването на нов.
ClusterControl:Импортиране на съществуващ клъстерСлед успешна инсталация най-накрая можете да импортирате новосъздадения си тестов клъстер в ClusterControl.
Надяваме се, че тази публикация в блога ви даде представа за основната инсталация и настройка на Ansible MariaDB главна/подчинена репликация. Моля, проверете другите ни блогове, където представяме Chef, Puppet, Docker за база данни MariaDB и други внедрявания на клъстери от бази данни.