Добре дошли в друг блог. Този път съм тук, за да ви покажа как да настроите percona XtraDB клъстер. Добре, така че какво е percona XtraDB? XtraDB е решение за клъстериране на MySQL, което гарантира висока наличност, предотвратява престой и загуба на данни и осигурява линейна мащабируемост за нарастваща среда. Когато изпълнявате заявка, тя се изпълнява локално на възела. Всички данни са налични локално, няма нужда от отдалечен достъп. Добро решение за мащабиране на работното натоварване при четене. Можете да поставите заявки за четене към всеки от възлите. След като инсталирате percona XtraDB, не е необходимо да инсталирате MySQL отделно, XtraDB ще го получи от хранилището на percona и ще можете да подготвите клъстера, след като преминете през тази статия.

предпоставка:
За да конфигурираме percona XtraDB клъстер на Linux сървъри, имаме нужда от три сървъра, информацията е следната:
сървър percona1:192.168.56.110
сървър percona2:192.168.56.113
Сървър percona3:192.168.56.114
ОС:CentOS 7
можете също да използвате два сървъра, но официалният документ препоръчва нечетен брой сървъри. например 3,5,7 и така нататък. просто не търсете четен брой възли, те го наричат разделен мозък. Разделен мозък е състояние, при което възлите губят контакт помежду си и след това и двамата се опитват да поемат контрола върху споделените ресурси или да предоставят едновременно клъстерната услуга
ЗАБЕЛЕЖКА:Нуждаем се от root достъп на възела, където ще инсталираме Percona XtraDB Cluster
(или сте влезли като потребител с root привилегии или можете да изпълнявате команди със Sudo
Предварителни проверки:
Добавете по-долу записи във вашия /etc/hosts файл ——> на целия сървър (percona1,percona2,percona3)
192.168.56.110 percona1.localdomain percona1
192.168.56.113 percona2.localdomain percona2
192.168.56.114 percona3.localdomain percona3
Отворете портовете на защитната стена:
Трябва да отворим по-долу портове на всички сървъри (percona1,percona2,percona3)
3306
4444
4567
4568
firewall-cmd --zone=public --add-service=mysql --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanentfirewall-cmd --zone=public --add-port=4567/tcp --permanentfirewall-cmd --zone=public - -add-port=4568/tcp --permanentfirewall-cmd --zone=public --add-port=4444/tcp --permanentfirewall-cmd --zone=public --add-port=4567/udp --permanentfirewall- cmd --reloadfirewall-cmd --list-all
[example@sqldat.com ~]# firewall-cmd --list-allpublic (active)target:defaulticmp-block-inversion:nointerfaces:enp0s3 enp0s8sources:услуги:ssh dhcpv6-client mysqlports:3306/tcp/tc4 4568/tcp 4444/tcp 4567/udpprotocols:masquerade:noforward-ports:source-ports:icmp-blocks:богати правила
Деактивирайте SELinux:——->на всички сървъри(percona1,percona2,percona3)
[example@sqldat.com ~]# setenforce 0
Това ще постави SELinux в разрешителен режим за текущата сесия, но трябва да го деактивираме за постоянно.
редактиране на /etc/sysconfig/selinux файл задайте selinux променлива като деактивирана на всички сървъри (percona1,percona2,percona3):
vi /etc/sysconfig/selinux
SELINUX=деактивирано
Всички сървъри трябва да са достъпни един за друг, За да се провери достъпността, ping на всеки сървър.
Инсталирайте по-долу prereq RPM:——->на целия сървър(percona1,percona2,percona3)
epel-release
libev
socat
[example@sqldat.com ~]# yum -y инсталира epel-release Инсталиран:epel-release.noarch 0:7-11[example@sqldat.com yum.repos.d]# yum -y инсталира libev Инсталиран :libev.x86_64 0:4.15-7.el7[example@sqldat.com Desktop]# yum -y install socat Installed:socat.x86_64 0:1.7.3.2-2.el7
Добавяне на хранилище на Percona:——->на целия сървър(percona1,percona2,percona3)
Сега ще добавим хранилището на percona във всичките три сървъра (percona1,percona2,percona3):
[example@sqldat.com ~]# sudo yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpmInstalled:percona-release.noarch 0:1.0-13 Завършен !
Инсталирайте Percona-XtraDB-Cluster:——->на целия сървър(percona1,percona2,percona3)
[example@sqldat.com ~]# yum install -y Percona-XtraDB-Cluster-57Заредени плъгини:fastestmirror, langpacks Зареждане на скоростите на огледалото от кеширан хост файл...Инсталирано:Percona-XtraDB-Cluster-57.x86_674 0:.27-31.39.1.el7 Percona-XtraDB-Cluster-shared-57.x86_64 0:5.7.27-31.39.1.el7 Percona-XtraDB-Cluster-shared-compat-57.x86_64 0:5.7.27- .1.el7Dependency Installed:Percona-XtraDB-Cluster-client-57.x86_64 0:5.7.27-31.39.1.el7 Percona-XtraDB-Cluster-server-57.x86_64 0:5.7.27-31.79. percona-xtrabackup-24.x86_64 0:2.4.17-1.el7 perl-DBD-MySQL.x86_64 0:4.023-6.el7 perl-Digest.noarch 0:1.17-245.el7 perl-Digest6_MD8. :2.52-3.el7 qpress.x86_64 0:11-1.el7 Заменен:mariadb-libs.x86_64 1:5.5.60-1.el7_5 Завършен!
Нека проверите дали Percona XtraDB е инсталиран или не.
[example@sqldat.com ~]# yum търсене Percona-XtraDBЗАБЕЛЕЖКА: До тук всички по-горе стъпки трябва да се изпълняват на всички сървъри (percona1,percona2,percona3)
Конфигуриране на възли за репликация на набор от запис
ВКЛ. Percona1:
Нека стартирате MySQL сървъра и сменете root паролата само на percona1 сървър
[example@sqldat.com ~]# systemctl стартиране на mysql[example@sqldat.com ~]# grep парола /var/log/mysqld.log2019-12-11T10:35:12.135133Z 1 [Забележка] Временна парола се генерира за example@sqldat.com:hJ(l8ySe>f>ENЗабележка:копирайте паролата "hJ(l8ySe>f>E"), ние ще променим тази парола :[example@sqldat.com ~]# mysql_secure_installation --- ---->на целия сървър(percona1,percona2,percona3)Осигуряване на внедряването на MySQL сървъра.Въведете парола за потребителски root:Съществуващата парола за root на потребителския акаунт е изтекла Моля, задайте нова парола.Нова парола:Въведете отново нова парола:ПРИЛОЖКА ЗА ВАЛИДАЦИЯ НА ПАРОЛА може да се използва за тестване на пароли и подобряване на сигурността. Проверява силата на паролата и позволява на потребителите да задават само тези пароли, които са достатъчно сигурни. Искате ли да настроите плъгин VALIDATE PASSWORD? Натиснете y|Y за Да, всяка друг ключ за Не:Използване на съществуваща парола за root. Промяна на паролата за root ? ((Натиснете y|Y за Да, всеки друг ключ за Не) :... пропускане. По подразбиране инсталиране на MySQL ation има анонимен потребител, което позволява на всеки да влезе в MySQL, без да се налага да има създаден потребителски акаунт за него. Това е предназначено само за проверка и за да направи инсталацията малко по-гладка. Трябва да ги премахнете, преди да преминете в производствена среда. Да премахнете ли анонимните потребители? (Натиснете y|Y за Да, всеки друг клавиш за Не) :yesSuccess. Обикновено root трябва да има право да се свързва само от 'localhost'. Това гарантира, че някой не може да отгатне паролата на root от мрежата. Да се забрани ли отдалечено влизане в root? (Натиснете y|Y за Да, всеки друг клавиш за Не) :yesSuccess. По подразбиране MySQL идва с база данни, наречена 'test', до която всеки има достъп. Това също е предназначено само за тестване и трябва да бъде премахнато, преди да се премести в производствена среда. Да се премахне ли тестовата база данни и достъпа до нея? (Натиснете y|Y за Да, всеки друг клавиш за Не) :... пропускане. Презареждането на таблиците с привилегии ще гарантира, че всички направени досега промени ще влязат в сила незабавно. Презареждане на таблиците с привилегии сега? (Натиснете y|Y за Да, всеки друг клавиш за Не) :yesSuccess. Всичко готово!
Сега спрете MySQL сървъра на percona1.
[example@sqldat.com ~]# systemctl стоп mysql
Сега ще конфигурираме нашата репликация, ще добавим информация за репликация във файла my.cnf.
Конфигуриране на настройките за репликация на percona1:
cat>>/etc/my.cnf<Ef_storage_innolock>
Сега инициализирайте клъстера, като стартирате първия възел. Това трябва да е възелът с основната ви база данни, който ще се използва като източник на данни за клъстера в нашия случай е percona1 сървър
[example@sqldat.com ~]# systemctl start example@sqldat.com Преди да конфигурираме репликацията, трябва да създадем отделен потребител за репликация, който ще се използва за процеса на репликация. защо имаме нужда от потребител за репликация? когато добавите нов възел към клъстера, той изхвърля текущата конфигурация на възел и го прехвърля към втория възел, поради тази причина се нуждаем от отделен потребител.ЗАБЕЛЕЖКА: Уверете се, че потребителят трябва да е същият, споменат срещу променливата “wsrep_sst_auth” в конфигурацията за репликация, използвана във файла my.cnf.
[example@sqldat.com ~]#mysql -u root -p mysql>създайте потребител example@sqldat.com'%' идентифициран от 'perconapasswd';mysql>предоставете всички на *.* на example@sqldat.com '%';mysql>флуш привилегии;ВКЛ. Percona2:
Конфигурирайте настройките за репликация на percona2:
cat>>/etc/my.cnf<Ef_storage_innolock> Сега стартирайте mysql и това ще добави този възел към клъстера.
[example@sqldat.com ~]# systemctl стартира mysqlВКЛ. Percona3:
Конфигурирайте настройките за репликация на percona3:
cat>>/etc/my.cnf<Ef_storage_innolock> Сега стартирайте mysql и това ще добави този възел към клъстера.
[example@sqldat.com ~]# systemctl стартира mysqlще наблюдавате такива съобщения в дневника на mysql (var/log/mysqld.log)
(percona2):Прехвърлянето на състояние от 0.0 (percona1) завършено
1.0 (percona3):Прехвърлянето на състоянието от 0.0 (percona1) завършено
За да сте сигурни, че клъстерът е инициализиран, изпълнете следното:
mysql> показва състояние като 'wsrep%';+----------------------------------+- -------------------------------------------------- ----------+| Име на променлива | Стойност |+---------------------------------+------------ -------------------------------------------------+ | wsrep_local_state_uuid | 6d95cd36-1c1a-11ea-999a-83631204f6e3 || wsrep_protocol_version | 9 || wsrep_last_applied | 6 |...| wsrep_flow_control_recv | 0 || wsrep_flow_control_interval | [ 173, 173 ] || wsrep_flow_control_interval_low | 173 || wsrep_flow_control_interval_high | 173 || wsrep_flow_control_status | ИЗКЛЮЧЕНО |..| wsrep_local_state | 4 || wsrep_local_state_comment | Синхронизиран || wsrep_cert_index_size | 1 || wsrep_cert_bucket_count | 22 || wsrep_gcache_pool_size | 2384 |..| wsrep_incoming_addresses | 192.168.56.110:3306,192.168.56.114:3306,192.168.56.113:3306 || wsrep_cluster_weight | 3 || wsrep_desync_count | 0 || wsrep_evs_delayed | || wsrep_evs_evict_list | || wsrep_evs_repl_latency | 0/0/0/0/0 || wsrep_evs_state | ОПЕРАТИВНА || wsrep_gcomm_uuid | 1d16f574-1c1b-11ea-b5dd-574c9a653584 || wsrep_cluster_conf_id | 3 || wsrep_cluster_size | 3 || wsrep_cluster_state_uuid | 6d95cd36-1c1a-11ea-999a-83631204f6e3 || wsrep_cluster_status | Основен || wsrep_connected | ВКЛЮЧЕНО || wsrep_local_bf_aborts | 0 || wsrep_local_index | 0 || wsrep_provider_name | Галера || wsrep_provider_vendor | Codership Oy|| wsrep_provider_version | 3.39(rb3295e6) || wsrep_ready | ВКЛЮЧЕНО |+---------------------------------+------------ -------------------------------------------------+ 71 реда в комплект (0,00 сек) Както можете да видите, че размерът на клъстера е 3 “wsrep_cluster_size | 3” и можете също да видите IP адреса на нашите три възела
wsrep_incoming_addresses | 192.168.56.110:3306,192.168.56.114:3306,192.168.56.113:3306Тествайте нашия клъстер:
Създавам база данни на percona 1 и след това ще проверим на percoan 3 дали е репликирана.
mysql> показване на бази данни;+-------------------+| База данни |+-------------------+| информационна_схема || mysql || схема_изпълнение || sys |+--------------------+4 реда в комплект (0,03 сек)mysql> СЪЗДАВАНЕ НА БАЗА ДАННИ perconatest;Заявката ОК, 1 ред засегнат (0,03 сек)предварително>Сега нека проверим percona3, ще видим, че „perconatest“ DB ще бъде създадена
[example@sqldat.com ~]# mysql -uroot -p -e "покажи бази данни"Въведете парола:+--------------------+| База данни |+-------------------+| информационна_схема || mysql || перконатест || схема_изпълнение || sys |+-------------------+