MySQL InnoDB кластер. Установка и настройка. Подключение MySQL роутера

Thank you for reading this post, don't forget to subscribe! 

MySQL InnoDB кластер

Нач­нем уста­нов­ку, будем исполь­зо­вать 3 сер­ве­ра для непо­сред­ствен­но mysql и 1 сер­вер для под­клю­че­ния к наше­му кла­сте­ру — mysql роутер.

сер­ве­ра для mysql

10.10.10.1
10.10.10.2
10.10.10.3

и сер­вер для роутера

10.10.10.10
OS Centos 7 c выклю­чен­ный selinux и firewalld. Mysql будем исполь­зо­вать вер­сии 5.7

Под­клю­ча­ем репозиторий

rpm -i https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
выклю­ча­ем 8 вер­сию и вклю­ча­ем 5.7

yum install yum-utils
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community
yum repolist
yum install mysql-community-server mysql-shell

Пра­вим /etc/my.cnf

 

 

 

Mysql веша­ем на порт 3301.
На пор­ту 33011 будет про­ис­хо­дить обмен дан­ны­ми меж­ду сер­ве­ра­ми кластера.

Файл /etc/my.cnf мы при­во­дим к тако­му виду на всех трех сер­ве­рах кла­сте­ра, меня­ем IP в пере­мен­ных loose-group_replication_local_address и report_host, а так­же изме­ня­ем server_id — для каж­до­го сер­ве­ра уникальный.

Запус­ка­ем mysql, про­во­дим пер­во­на­чаль­ную настройку.

systemctl start mysqld
grep 'password' /var/log/mysqld.log
mysql_secure_installation
Нач­нем созда­ние кла­сте­ра, для нача­ло созда­дим на всех 3-х сер­ве­рах поль­зо­ва­те­ля cladmin, для это вос­поль­зу­ем­ся кон­соль mysqlsh
[root@10.10.10.1 ~] mysqlsh
> \c 127.0.0.1:3301
> dba.configureLocalInstance("127.0.0.1:3301", {mycnfPath: "/etc/my.cnf", clusterAdmin: "cladmin", clusterAdminPassword: "StrongPassword!#1"})
> \c cladmin@10.10.10.1:3301
> dba.checkInstanceConfiguration()
> cl=dba.createCluster('TestCluster', {ipWhitelist: '10.10.10.1,10.10.10.2,10.10.10.3'})
> dba.configureLocalInstance()
> cl.status()
Вывод cl.status() при­мер­но дол­жен быть таким

 

 

Когда вно­сим изме­не­ния в кон­фи­гу­ра­ию кла­сте­ра, обя­за­тель­но выпол­ня­ем команду

> dba.configureLocalInstance()
Ана­ло­гич­ные дей­ствия выпол­ня­ем на всех 3-х сер­ве­рах, не забы­ва­ем про­пи­сать вер­ные IP и ID в /etc/my.cnf (server_id, loose-group_replication_local_address, report_host)

После того как преды­ду­щие шаги выпол­не­ны на нодах кото­рые мы под­клю­ча­ем (2-й и 3-й сер­вер в нашем при­ме­ре), выполняем

[root@10.10.10.2 ~] mysql -p
> set GLOBAL group_replication_allow_local_disjoint_gtids_join=ON;

[root@10.10.10.2 ~] mysqlsh
> \c 127.0.0.1:3301
> dba.configureLocalInstance("127.0.0.1:3301", {mycnfPath: "/etc/my.cnf", clusterAdmin: "cladmin", clusterAdminPassword: "StrongPassword!#1"})
> \c cladmin@10.10.10.2:3301
> dba.checkInstanceConfiguration()
После дан­ной про­це­ду­ры на вто­ром сер­ве­ре, воз­вра­ща­ем­ся на пер­вый сервер
[root@10.10.10.1 ~] mysqlsh --uri cladmin@1.1.1.1:3301 --cluster
> cluster.addInstance('cladmin@10.10.10.2:3301', {ipWhitelist: '10.10.10.1,10.10.10.2,10.10.10.3'})
> cluster.status()
> dba.configureLocalInstance()

Так­же выпол­ня­ем dba.configureLocalInstance() на вто­ром сер­ве­ре !!!

Вывод cluster.status() дол­жен стать при­мер­но таким

 

 

По ана­ло­гич­ной схе­ме доба­вим 3-й сервер.

Если в буду­щем мы пла­ни­ру­ем рас­ши­рить кла­стер до 5 или более сер­ве­ров, нам надо будет отре­дак­ти­ро­вать whitelist, это мож­но сде­лать через mysqlsh перей­дя в sql режим или напря­мую в /etc/my.cnf (не забыть пере­за­гру­зить демо­ны mysql).

При­мер как сде­лать исполь­зуя кон­соль mysqlsh (пооче­ред­но на каж­дой из RW нод):

[root@10.10.10.1 ~] mysqlsh --uri cladmin@10.10.10.1:3301 --cluster
> \sql
> STOP GROUP_REPLICATION;
> SET GLOBAL group_replication_ip_whitelist="10.10.10.1,10.10.10.2,10.10.10.3,10.10.10.4,10.10.10.5";
> START GROUP_REPLICATION;

После добав­ле­ния всех 3 сер­ве­ров cluster.status() будет воз­вра­щать следующее:

 

 

Если кла­стер раз­ва­лит­ся до состо­я­ния одно­го сер­ве­ра, его надо будет запус­кать с пара­мет­ром loose-group_replication_bootstrap_group = ON в /etc/my.cnf
После запус­ка пара­метр надо будет выклю­чить обрат­но, в про­тив­ном слу­чаи этот сер­вер все­гда будет отде­лять­ся от кла­сте­ра и рабо­тать самостоятельно.

Настрой­ка Mysql роутера.
Доба­вим репу и поста­вим пакет

[root@mysql-router ~] rpm -i https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
[root@mysql-router ~] yum install mysql-router
Созда­ем ката­лог для кон­фи­гу­ра­ци­он­ных фай­лов наше­го кластера:

[root@mysql-router ~] mkdir /etc/mysqlrouter/mysql-router
Настрой­ку будем делать с помо­щью bootstrap, при ука­за­нии IP адре­са, необ­хо­ди­мо ука­зать адрес теку­ще­го RW сервера

[root@mysql-router ~] mysqlrouter --bootstrap cladmin@10.10.10.1:3301 --directory /etc/mysqlrouter/mysql-router --user=root

Резуль­тат успеш­ной кон­фи­гу­ра­ции, вывод:

 

 

Порт 6446 — для под­клю­че­ний RW
Порт 6447 — для под­клю­че­ний RO

Созда­дим systemd service файл что­бы запус­кать mysql роу­тер с наши­ми сге­не­ри­ро­ван­ны­ми кон­фи­гу­ра­ци­он­ны­ми файлами

[root@mysql-router ~] nano /etc/systemd/system/mysqlrouter-cluster.service

 

 

Вклю­чим в авто­за­груз­ку и запу­стим наш роутер:

systemctl daemon-reload
systemctl start mysqlrouter-cluster
systemctl status mysqlrouter-cluster

Про­ве­ря­ем