Percona XtraDB Cluster 8.0 се базира на Percona Server за MySQL 8.0, вграден с API за репликация на набора за запис на Galera и библиотека за репликация на Galera, за да формира високодостъпна репликация с множество главни за базиран на MySQL сървър на база данни. Percona XtraDB Cluster идва с XtraDB механизъм за съхранение (подмяна на InnoDB) и следва много отблизо предходните версии на Oracle MySQL (включително всички корекции на грешки в него), с някои допълнителни променливи и статус, специфични за тази компилация.
В тази публикация в блога ще разгледаме как да разгърнем Percona XtraDB Cluster 8.0 за висока наличност, като използвате ръчния и автоматизиран начин.
Забележителни характеристики
Преди да продължим напред със стъпките за внедряване, си струва да споменем забележителни характеристики и значителни подобрения в тази основна версия, която е базирана на Percona Server за MySQL 8.0 (без плъгин за групова репликация) и Galera 4:
- Поточно репликация – Това позволява на репликацията на набор за запис да обработва големи транзакции с данни в по-малки, по-управляеми фрагменти, минимизирайки конфликтите на данни.
- Синхронизационните функции на MySQL за координиране на действията (wsrep_last_seen_gtid, wsrep_last_written_gtid, wsrep_sync_wait_upto_gtid).
- Нови системни таблици на Galera, които ще ви помогнат да наблюдавате състоянието на клъстера по схемата "mysql" - wsrep_cluster, wsrep_cluster_members и wsrep_streaming_log.
- Кеш криптиране в Gcache.
- Wsrep инфраструктурата на Galera 4 е по-стабилна от тази на Galera 3. Тя включва по-бързо изпълнение на код с по-добра обработка на състоянието, подобрена предсказуемост и обработка на грешки.
За пълен списък с промените вижте бележките по версията.
Ръчно внедряване на Percona XtraDB Cluster 8.0
Стъпки за инсталиране
За клъстера Percona XtraDB ни трябват поне три възела:
- db1 (192.168.20.61)
- db2 (192.168.20.62)
- db3 (192.168.20.63)
Стъпките, описани в този раздел, трябва да се изпълнят на всички възли на базата данни (db1, db2 и db3), работещи на CentOS 8. Първо, деактивирайте SELinux (в противен случай IST процесът ще се провали):
$ setenforce 0
$ sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux
Инсталирайте пакета на хранилището на Percona:
$ yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
Последната стабилна версия в този момент е Percona XtraDB Cluster 8.0, но по подразбиране пакетът на хранилището е конфигуриран до версия 5.7. Пакетът percona-release съдържа скрипт, който може да активира допълнителни хранилища за по-новите продукти. Нека стартираме този скрипт и да активираме специфичното за pxc80 хранилище:
$ percona-release setup pxc80
* Disabling all Percona Repositories
On RedHat 8 systems it is needed to disable dnf mysql module to install Percona-Server
Do you want to disable it? [y/N]
Изберете "y", за да деактивирате DNF модула на mysql. Това е необходимо, за да се даде приоритет на хранилището на Percona за пакети, свързани с MySQL.
След това инсталирайте най-новия Percona XtraDB Cluster и Percona Xtrabackup:
$ dnf -y install percona-xtradb-cluster percona-xtrabackup-80
В този момент трябва да получите инсталиран Percona XtraDB Cluster 8.0.0-11.3. Всички пакети за зависимости ще бъдат инсталирани като споделени, споделени и клиентски пакети. След това можем да стартираме услугата MySQL за първоначална конфигурация:
$ systemctl start mysql
Нова root парола ще бъде генерирана по време на първото стартиране. Трябва първо да извлечем информацията за root паролата от регистъра на грешките на MySQL (по подразбиране е /var/log/mysqld.log в базирани на RHEL системи):
$ cat /var/log/mysqld.log | grep 'temporary password'
2020-11-27T06:53:05.929661Z 6 [Note] [MY-010454] [Server] A temporary password is generated for [email protected]: <eqo+jXNw2lk
Както можете да видите, генерираната парола е "
Генерираната root парола ще бъде изтекла веднага след първото влизане в root. Горният помощен скрипт ни помага да конфигурираме нова парола за MySQL root, да зададем правила за валидиране на паролата, да деактивираме дистанционното влизане за root, да премахнем тестовата база данни и анонимните потребители, както и да презаредим таблиците с привилегии.
Конфигурационният файл по подразбиране (/etc/my.cnf) е конфигуриран с празен низ за връзка gcomm:// под променлива wsrep_cluster_address, както е показано по-долу: Горещият ред трябва да бъде зададен със списък с IP адреси на всички участващи възли в клъстера. Ако сте пропуснали тази стъпка, нов клъстер Galera ще бъде създаден на всеки възел (3 отделни клъстера с 1 възел) след стартиране на услугата на всеки възел. Следователно следните редове трябва да бъдат съответно променени в секцията [mysqld]: Очаквайте wsrep_cluster_address да бъде идентичен във всички хостове на база данни, докато wsrep_node_address и wsrep_node_name трябва да са различни за всеки хост на база данни. Последният ред pxc-encrypt-cluster-traffic=OFF означава, че бихме искали да деактивираме криптирането за трафика на клъстера. Имайте предвид, че това е умишлено, за да опрости нашите стъпки за внедряване, или в противен случай ще трябва да изпълним стъпки за управление на ключ/сертификат. Ако искате да активирате шифроването, вижте тази статия.
Повторете горните стъпки за останалите възли на базата данни, преди да продължите да стартирате клъстера.
Galera изисква да стартирате възел в клъстер като референтна точка, преди останалите възли да могат да се присъединят и да образуват клъстера. Този процес е известен като cluster bootstrap. Зареждането е начална стъпка за въвеждане на възел на базата данни като основен компонент, преди другите да го видят като отправна точка за синхронизиране на данни.
В този пример ще използваме db1 като референтен възел и ще го стартираме с командата bootstrap (можете да изберете и други възли, тъй като това е нов клъстер без данни): След като стартираме, можем да стартираме другите възли (db2 и db3) със стандартната команда за стартиране (един възел в даден момент): Можете да потвърдите със следния ред в /var/log/mysqld.log: В този момент нашата услуга Percona XtraDB Cluster стартира и ръчното внедряване вече е завършено. За повече информация относно процеса на стартиране на Percona XtraDB Cluster, вижте тази публикация в блога Как да стартирате MySQL или MariaDB Galera Cluster.
Има два начина, по които можете да разположите Percona XtraDB Cluster 8.0 с помощта на ClusterControl. Можете да използвате ClusterControl UI (уеб-базиран GUI) или ClusterControl CLI, наречен s9s. В този раздел ще ви покажем и двата начина. ClusterControl трябва да се намира на отделен хост, далеч от клъстера на базата данни. Следователно нашата архитектура може да бъде илюстрирана така:
SSH в сървъра ClusterControl и инсталирайте ClusterControl със следните команди: Следвайте съветника за инсталиране, докато инсталацията приключи. След като инсталацията приключи, отворете уеб браузъра и отидете на http://192.168.20.19/clustercontrol. Създайте потребител с администратор и лицензът ще бъде инсталиран автоматично. Всички нови инсталации идват с пробен лиценз за корпоративно издание за 30 дни. След като този пробен лиценз изтече, той ще се върне по подразбиране към изданието на общността, което е безплатно завинаги.
ClusterControl изисква SSH без парола да бъде настроен от сървъра на ClusterControl към всички управлявани възли. За да постигнем това, първо трябва да генерираме SSH ключ на сървъра на ClusterControl. Потребителят на SSH трябва да има привилегия на суперпотребител (sudo или root). В този случай ще използваме root потребителя: Сега генерирайте SSH ключ за потребителски root: След това копирайте публичния ключ във всички възли на базата данни, които ще разположим и управляваме. В този случай всички 3 възела на Galera: Въведете root паролата на съответните хостове, когато бъдете подканени.
Тествайте го със следната команда и се уверете, че получавате правилен отговор: Сега сме готови да разгърнем нашия клъстер с помощта на ClusterControl UI или CLI, както е показано в следващите раздели.
Практически е лесно да разположите Percona XtraDB Cluster с ClusterControl и по подразбиране ClusterControl ще конфигурира клъстера с активирано криптиране на Galera. След като SSH без парола е конфигуриран, отидете на ClusterControl -> Deploy -> MySQL Galera и посочете необходимите подробности, както е посочено по-долу: След това щракнете върху „Продължи“, за да преминете към следващата стъпка, където конфигурираме спецификацията на MySQL: Изберете "Percona" за доставчика и 8.0 като версия. Запазете останалото по подразбиране и въведете паролата за root на MySQL. Посочете IP адреса или името на хоста на хостовете на базата данни един по един и се уверете, че получавате иконите за зелена отметка след всяко вмъкване. Това показва, че ClusterControl може да достигне до съответните хостове чрез SSH без парола с предоставения SSH потребител и ключ, както е дефинирано в стъпка 1. Щракнете върху бутона „Разгръщане“, за да започнете внедряването.
След това ClusterControl задейства задание за внедряване, където можете да наблюдавате напредъка на внедряването, като отидете на ClusterControl -> Activity -> Jobs -> Create Cluster -> Full Job Details, както е показано на следната екранна снимка: След като процесът приключи, трябва да видите, че клъстерът е посочен в таблото за управление : Това е. Внедряването вече е завършено.
Ако предпочитате да разположите клъстера с помощта на командния ред, можем просто да използваме клиентския инструмент на командния ред ClusterControl, наречен "s9s". Този инструмент ще изпрати задание за внедряване на контролера ClusterControl и той ще изпълни всички необходими стъпки за разполагане на клъстера.
Изпълнете следната команда на сървъра на ClusterControl:
Ще видите, че съобщенията за заданието ще се появят и можете да наблюдавате напредъка на внедряването там, както и можете също да наблюдавате напредъка на заданието от ClusterControl UI -> Activity -> Jobs . Изчакайте 15-20 минути (в зависимост от интернет връзката), докато видите известието за приключване на заданието. Нашият Percona XtraDB Cluster 8.0 вече е внедрен и можете да го видите в списъка в потребителския интерфейс на ClusterControl.$ mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
The existing password for the user account root has expired. Please set a new password.
New password:
Re-enter new password:
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: y
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y
New password:
Re-enter new password:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
All done!
wsrep_cluster_address=gcomm://
wsrep_cluster_address=gcomm://192.168.20.51,192.168.20.52,192.168.20.53
wsrep_node_address=192.168.20.51 # IP address of this DB host
wsrep_node_name=db1 # any name to identify this DB host
pxc-encrypt-cluster-traffic=OFF
Зареждане на клъстер
$ systemctl stop mysql
$ systemctl start [email protected]
$ systemctl status [email protected]
$ systemctl stop mysql
$ systemctl start mysql
2020-11-27T08:09:01.964152Z 2 [Note] [MY-000000] [WSREP] Synchronized with group, ready for connections
Автоматично внедряване с ClusterControl
Инсталиране на ClusterControl
$ wget http://severalnines.com/downloads/cmon/install-cc
$ chmod 744 install-cc
$ ./install-cc
SSH без парола
$ whoami
root
$ ssh-keygen -t rsa # press Enter on all prompts
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh [email protected] "ls /root"
Разгръщане на PXC с помощта на потребителски интерфейс на ClusterControl
Разгръщане на PXC чрез ClusterControl CLI
$ s9s cluster --create \
--cluster-type=galera \
--nodes="192.168.20.51;192.168.20.52;192.168.20.53" \
--vendor=percona \
--provider-version=8.0 \
--db-admin-passwd='P4ssw0rdSecr3t' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name='My Percona XtraDB Cluster 8.0' \
--log