Galera Cluster е едно от най-популярните решения с висока достъпност за MySQL. Това е практически синхронен клъстер, който помага да се поддържа забавянето на репликацията под контрол. Благодарение на контрола на потока, клъстерът Galera може да се дроселира и да позволи на по-натоварените възли да настигнат останалата част от клъстера. Скорошното издание на Galera 4 донесе нови функции и подобрения. Посветихме ги в публикация в блог, говореща за MariaDB 10.4 Galera Cluster и публикация в блог, обсъждаща съществуващи и предстоящи функции на Galera 4.
Как работи Galera 4, когато се използва в Amazon EC2? Както вероятно знаете, Amazon предлага услуги за релационни бази данни, които са предназначени да предоставят на потребителите лесен начин за внедряване на високодостъпна база данни MySQL. Моят колега, Ашраф Шариф, сравни времената на отказ за RDS MySQL и RDS Aurora в публикацията си в блога. Времената за отказ за Aurora изглеждат наистина страхотни, но има но. На първо място, вие сте принудени да използвате RDS. Не можете да разположите Aurora на екземпляри, които управлявате. Ако съществуващите функции и опции, налични в Aurora, не са достатъчни за вас, нямате друга възможност, освен да разгърнете нещо сами. Тук влиза Галера. Galera, за разлика от Aurora, не е собствена черна кутия. Обратно, това е софтуер с отворен код, който може да се използва свободно във всички поддържани среди. Можете да инсталирате Galera Cluster на AWS Elastic Computing Cloud (EC2) и чрез това да изградите високодостъпна среда, в която преминаването на отказ е почти мигновено:веднага щом можете да откриете повреда на възела, можете да се свържете отново с другия възел на Galera. Как се внедрява Galera 4 в EC2? В тази публикация в блога ще го разгледаме и ще ви предоставим ръководство стъпка по стъпка, показващо кой е най-простият начин да постигнете това.
Разгръщане на клъстер Galera 4 на EC2
Първата стъпка е да създадем среда, която ще използваме за нашия клъстер Galera. Ще използваме виртуални машини Ubuntu 18.04 LTS.
Ще използваме t2.medium instance size за целите на този блог пост. Трябва да мащабирате вашите екземпляри въз основа на очакваното натоварване.
Ще внедрим три възела в клъстера. Защо три? Имаме блог, който обяснява как Galera поддържа висока наличност.
Ще конфигурираме хранилището за тези екземпляри.
Ще изберем и правилна група за защита за възлите. Отново в нашия случай групата за сигурност е доста отворена. Трябва да се уверите, че достъпът е максимално ограничен - само възли, които имат достъп до бази данни, трябва да имат право да се свързват с тях.
Накрая или избираме съществуващ ключов номинал, или създаваме нов. След тази стъпка нашите три екземпляра ще бъдат стартирани.
След като са готови, можем да се свържем с тях чрез SSH и да започнем да конфигурираме базата данни.
Решихме да използваме конвенцията за именуване „node1, node2, node3“, поради което трябваше да редактираме /etc/hosts на всички възли и да ги изброим заедно със съответните им локални IP адреси. Също така направихме промяната в /etc/hostname, за да използваме новото име за възли. Когато това стане, можем да започнем да настройваме нашия клъстер Galera. Към момента на писане единственият доставчик, който предоставя GA версия на Galera 4, е MariaDB със своя 10.4, така че ще използваме MariaDB 10.4 за нашия клъстер. Ще продължим с инсталацията, като използваме предложенията и ръководствата от уебсайта на MariaDB.
Разгръщане на MariaDB 10.4 Galera Cluster
Ще започнем с подготовката на хранилища:
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
bash ./mariadb_repo_setup
Изтеглихме скрипт, който е предназначен да настрои хранилищата и го изпълнихме, за да се уверим, че всичко е настроено правилно. Това конфигурира хранилищата да използват най-новата версия на MariaDB, която към момента на писане е 10.4.
[email protected]:~# apt update
Hit:1 http://eu-central-1.ec2.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://eu-central-1.ec2.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:3 http://eu-central-1.ec2.archive.ubuntu.com/ubuntu bionic-backports InRelease
Hit:4 http://downloads.mariadb.com/MariaDB/mariadb-10.4/repo/ubuntu bionic InRelease
Ign:5 http://downloads.mariadb.com/MaxScale/2.4/ubuntu bionic InRelease
Hit:6 http://downloads.mariadb.com/Tools/ubuntu bionic InRelease
Hit:7 http://downloads.mariadb.com/MaxScale/2.4/ubuntu bionic Release
Hit:8 http://security.ubuntu.com/ubuntu bionic-security InRelease
Reading package lists... Done
Building dependency tree
Reading state information... Done
4 packages can be upgraded. Run 'apt list --upgradable' to see them.
Както можете да видите, хранилищата за MariaDB 10.4 и MaxScale 2.4 са конфигурирани. Сега можем да продължим и да инсталираме MariaDB. Ще го направим стъпка по стъпка, възел по възел. MariaDB предоставя ръководство за това как трябва да инсталирате и конфигурирате клъстера.
Трябва да инсталираме пакети:
apt-get install mariadb-server mariadb-client galera-4 mariadb-backup
Тази команда инсталира всички необходими пакети за стартиране на MariaDB 10.4 Galera. MariaDB създава набор от конфигурационни файлове. Ще добавим нов, който ще съдържа всички необходими настройки. По подразбиране той ще бъде включен в края на конфигурационния файл, така че всички предишни настройки за променливите, които сме задали, ще бъдат презаписани. В идеалния случай след това бихте редактирали съществуващите конфигурационни файлове, за да премахнете настройките, които сме поставили в galera.cnf, за да избегнете объркване, когато дадена настройка е конфигурирана.
[email protected]:~# cat /etc/mysql/conf.d/galera.cnf
[mysqld]
bind-address=10.0.0.103
default_storage_engine=InnoDB
binlog_format=row
innodb_autoinc_lock_mode=2
# Galera cluster configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.0.0.103,10.0.0.130,10.0.0.62"
wsrep_cluster_name="Galera4 cluster"
wsrep_sst_method=mariabackup
wsrep_sst_auth='sstuser:pa55'
# Cluster node configuration
wsrep_node_address="10.0.0.103"
wsrep_node_name="node1"
Когато конфигурацията е готова, можем да започнем.
[email protected]:~# galera_new_cluster
Това трябва да стартира новия клъстер на първия възел. След това трябва да продължим с подобни стъпки за останалите възли:инсталирайте необходимите пакети и ги конфигурирайте, като се има предвид, че локалният IP се променя, така че трябва да променим съответно файла galera.cnf.
Когато конфигурационните файлове са готови, трябва да създадем потребител, който ще се използва за прехвърляне на състоянието на моментна снимка (SST):
MariaDB [(none)]> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'pa55';
Query OK, 0 rows affected (0.022 sec)
MariaDB [(none)]> GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
Query OK, 0 rows affected (0.022 sec)
Трябва да направим това на първия възел. Останалите възли ще се присъединят към клъстера и ще получат пълна моментна снимка на състоянието, така че потребителят да бъде прехвърлен към тях. Сега единственото нещо, което трябва да направим, е да стартираме останалите възли:
[email protected]:~# service mysql start
[email protected]:~# service mysql start
и проверете дали клъстерът наистина е формиран:
MariaDB [(none)]> show global status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.001 sec)
Всичко е наред, клъстерът е готов и се състои от три възела на Galera. Успяхме да внедрим MariaDB 10.4 Galera Cluster на Amazon EC2.