Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да автоматизирате миграцията от самостоятелен MySQL към Galera Cluster с помощта на Ansible

Миграциите на бази данни не се мащабират добре. Обикновено трябва да извършите много тестове, преди да можете да дръпнете спусъка и да преминете от старо към ново. Миграциите обикновено се извършват ръчно, тъй като по-голямата част от процеса не се поддава на автоматизация. Но това не означава, че няма място за автоматизация в процеса на миграция. Представете си да настроите редица възли с нов софтуер, да ги осигурите с данни и да конфигурирате репликация между стари и нови среди на ръка. Това отнема дни. Автоматизацията може да бъде много полезна при настройването на нова среда и осигуряването й с данни. В тази публикация в блога ще разгледаме една много проста миграция - от самостоятелен Percona Server 5.7 към Percona XtraDB Cluster 5.7 с 3 възли. Ще използваме Ansible, за да постигнем това.

Описание на средата

На първо място, един важен отказ от отговорност - това, което ще покажем тук, е само чернова на това, което бихте искали да стартирате в производството. Той работи в нашата тестова среда, но може да изисква модификации, за да стане подходящ за вашата среда. В нашите тестове използвахме четири Ubuntu 16.04 VM, разположени с помощта на Vagrant. Единият съдържа самостоятелен Percona Server 5.7, останалите три ще се използват за възли на Percona XtraDB Cluster. Ние също така използваме отделен възел за стартиране на ansible playbooks, въпреки че това не е изискване и playbook може да се изпълни и от един от възлите. В допълнение, SSH свързаността е налична между всички възли. Трябва да имате свързаност от хоста, където изпълнявате ansible, но възможността за ssh между възли е полезна (особено между главен и нов подчинен – ние разчитаме на това в книгата за игри).

Структура на книгата

Ansible playbooks обикновено споделят обща структура - създавате роли, които могат да бъдат присвоени на различни хостове. Всяка роля ще съдържа задачи, които трябва да се изпълняват върху нея, шаблони, които ще се използват, файлове, които ще бъдат качени, променливи, които са дефинирани за тази конкретна игра. В нашия случай учебникът е много прост.

.
├── inventory
├── playbook.yml
├── roles
│   ├── first_node
│   │   ├── my.cnf.j2
│   │   ├── tasks
│   │   │   └── main.yml
│   │   └── templates
│   │       └── my.cnf.j2
│   ├── galera
│   │   ├── tasks
│   │   │   └── main.yml
│   │   └── templates
│   │       └── my.cnf.j2
│   ├── master
│   │   └── tasks
│   │       └── main.yml
│   └── slave
│       └── tasks
│           └── main.yml
└── vars
    └── default.yml

Дефинирахме няколко роли - имаме главна роля, която е предназначена да направи някои проверки за здравина на самостоятелния възел. Има подчинен възел, който ще се изпълнява на един от възлите на Galera, за да го конфигурира за репликация и да настрои асинхронната репликация. След това имаме роля за всички възли на Galera и роля за първия възел на Galera, който зарежда клъстера от него. За ролите на Galera имаме няколко шаблона, които ще използваме за създаване на my.cnf файлове. Ще използваме също локален .my.cnf за дефиниране на потребителско име и парола. Имаме файл, съдържащ няколко променливи, които може да искаме да персонализираме, точно като паролите. Накрая имаме файл с инвентаризация, който дефинира хостове, на които ще стартираме playbook, имаме също и playbook файла с информация как точно трябва да се изпълняват нещата. Нека да разгледаме отделните битове.

Файл с инвентаризация

Това е много прост файл.

[galera]
10.0.0.142
10.0.0.143
10.0.0.144

[first_node]
10.0.0.142

[master]
10.0.0.141

Имаме три групи, „galera“, която съдържа всички възли на Galera, „first_node“, която ще използваме за началната програма и накрая „master“, която съдържа нашия самостоятелен възел на Percona Server.

Playbook.yml

Файлът playbook.yml съдържа общите указания за това как трябва да се изпълнява playbook.

-   hosts: master
    gather_facts: yes
    become: true
    pre_tasks:
    -   name: Install Python2
        raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
    vars_files:
        -   vars/default.yml
    roles:
    -   { role: master }

Както можете да видите, започваме със самостоятелния възел и прилагаме задачи, свързани с ролята „главен“ (ще обсъдим това подробно по-долу в тази публикация).

-   hosts: first_node
    gather_facts: yes
    become: true
    pre_tasks:
    -   name: Install Python2
        raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
    vars_files:
        -   vars/default.yml
    roles:
    -   { role: first_node }
    -   { role: slave }

Второ, отиваме на възел, дефиниран в групата „first_node“ и прилагаме две роли:„first_node“ и „slave“. Първият е предназначен за разгръщане на PXC клъстер с един възел, а вторият ще го конфигурира да работи като подчинен и ще настрои репликацията.

-   hosts: galera
    gather_facts: yes
    become: true
    pre_tasks:
    -   name: Install Python2
        raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
    vars_files:
        -   vars/default.yml
    roles:
    -   { role: galera }

Накрая преминаваме през всички възли на Galera и прилагаме ролята на „galera“ за всички тях.

Severalnines DevOps Ръководство за управление на бази данни Научете какво трябва да знаете, за да автоматизирате и управлявате своите бази данни с отворен код Изтеглете безплатно

Променливи

Преди да започнем да разглеждаме ролите, искаме да споменем променливите по подразбиране, които дефинирахме за тази книга.

sst_user: "sstuser"
sst_password: "pa55w0rd"
root_password: "pass"
repl_user: "repl_user"
repl_password: "repl1cati0n"

Както казахме, това е много проста игра без много опции за персонализиране. Можете да конфигурирате потребители и пароли и това е основно всичко. Един проблем - моля, уверете се, че основната парола на самостоятелния възел съвпада с „root_password“ тук, тъй като в противен случай книгата за игри няма да може да се свърже там (може да бъде разширена, за да се справи, но ние не покрихме това).

Този файл няма голяма стойност, но, като правило, искате да шифровате всеки файл, който съдържа идентификационни данни. Очевидно това е от съображения за сигурност. Ansible идва с ansible-vault, който може да се използва за криптиране и декриптиране на файлове. Тук няма да разглеждаме подробности, всичко, което трябва да знаете, е налично в документацията. Накратко, можете лесно да шифровате файлове с помощта на пароли и да конфигурирате вашата среда, така че книгите за игри да могат да се дешифрират автоматично с парола от файла или да се предават на ръка.

Роли

В този раздел ще разгледаме ролите, които са дефинирани в учебника, като обобщим какво са предназначени да изпълняват.

Главна роля

Както казахме, тази роля е предназначена за извършване на проверка за здравина на конфигурацията на самостоятелния MySQL. Той ще инсталира необходимите пакети като percona-xtrabackup-24. Той също така създава потребител за репликация на главния възел. Преглежда се конфигурация, за да се гарантира, че server_id и други настройки, свързани с репликацията и двоични регистрационни файлове, са зададени. GTID също е активиран, тъй като ще разчитаме на него за репликация.

Роля на първи възел

Тук е инсталиран първият възел на Galera. Хранилището на Percona ще бъде конфигурирано, my.cnf ще бъде създаден от шаблона. PXC ще бъде инсталиран. Ние също така изпълняваме известно почистване, за да премахнем ненужните потребители и да създадем тези, които ще са необходими (root потребител с избраната от нас парола, потребител, необходим за SST). Накрая, клъстерът се зарежда с помощта на този възел. Ние разчитаме на празния „wsrep_cluster_address“ като начин за инициализиране на клъстера. Ето защо по-късно все още изпълняваме ролята „galera“ на първия възел – да разменим началния my.cnf с последния, съдържащ „wsrep_cluster_address“ с всички членове на клъстера. Едно нещо, което си струва да запомните – когато създавате root потребител с парола, трябва да внимавате да не бъдете заключени от MySQL, така че Ansible да може да изпълни други стъпки от книгата. Един от начините да направите това е да предоставите на .my.cnf правилен потребител и парола. Друго би било да помните винаги да задавате правилни login_user и login_password в модула „mysql_user“.

Роля на роб

Тази роля е свързана с конфигуриране на репликация между самостоятелен възел и PXC клъстер с един възел. Използваме xtrabackup, за да получим данните, също така проверяваме за изпълнен gtid в xtrabackup_binlog_info, за да гарантираме, че архивът ще бъде възстановен правилно и че репликацията може да бъде конфигурирана. Ние също така изпълняваме част от конфигурацията, като се уверяваме, че подчинения възел може да използва GTID репликация. Тук има няколко затруднения - не е възможно да се стартира „RESET MASTER“ с помощта на модул „mysql_replication“ от Ansible 2.7.10, би трябвало да е възможно да се направи това в 2.8, когато излезе. Трябваше да използваме модул „shell“ за изпълнение на MySQL CLI команди. Когато възстановявате Galera възел от външен източник, трябва да запомните да създадете отново всички необходими потребители (поне потребител, използван за SST). В противен случай останалите възли няма да могат да се присъединят към клъстера.

Роля в галерия

И накрая, това е ролята, в която инсталираме PXC на останалите два възела. Стартираме го на всички възли, първоначалният ще получи „производствен“ my.cnf вместо неговата „bootstrap“ версия. Останалите два възела ще имат инсталиран PXC и ще получат SST от първия възел в клъстера.

Резюме

Както можете да видите, можете лесно да създадете прост, многократно използваем Ansible playbook, който може да се използва за разгръщане на Percona XtraDB Cluster и конфигурирането му да бъде подчинен на самостоятелен MySQL възел. Честно казано, за мигриране на един сървър това вероятно няма да има смисъл, тъй като ръчното правене на същото ще бъде по-бързо. Все пак, ако очаквате, че ще трябва да изпълните отново този процес няколко пъти, определено ще има смисъл да го автоматизирате и да го направите по-ефективен от времето. Както казахме в началото, това в никакъв случай не е готово за производство. Това е по-скоро доказателство за концепция, нещо, което можете да разширите, за да го направите подходящ за вашата среда. Можете да намерите архив с книгата тук:http://severalnines.com/sites/default/files/ansible.tar.gz

Надяваме се, че сте намерили тази публикация в блога интересна и ценна, не се колебайте да споделите вашите мисли.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да стартирам MySQL с --skip-grant-tables?

  2. Как да изтриете потребител на база данни на MySQL в cPanel

  3. Как да накарам UTF-8 да работи в уеб приложения на Java?

  4. Какво означава да избягаш от низ?

  5. Задаване СЕГА() като стойност по подразбиране за тип данни за дата и час?