mysql-5.7.20 版本的 mysql-group-replication 可用性測試報告


一、喜迎 mysql-5.7.20 

  事實上mysql-group-replication 功能是在mysql-5.7.17這個版本上引入的,它實現了mysql各個結點間數據強一致性,

  這個也成為了我心目中mysql的殺手級功能。 同樣在它前期也是深深的傷害了我,先從官方文檔上說起。官方文檔上對

  mysql-group-replication環境的搭建demo是在一台機器上安裝三個mysql數據結點來講解的,但是在我想把mysql-gro

  up-replication安裝到三台主機上時就出現了許多的問題。

 

  1、 如果三台主機之間沒有做dns解析的話,mysql-group-replication 會搭建不起來,這個問題我想哭的心都有了,因為

  我在配置文件中填的是ip地址呀! 但是為何還要去走一遍dns我也是太陽了dog了。 這個問題可以通過配置好dns解決,

  mysql后面的版本也把這個bug給修了。

 

  2、mysql-group-replication 還有一個最讓我受不了的問題就是、就在是你建好環境之后、把環境中的一台mysql數據庫(master)

  給它kill 掉、這種情況下mysql會把master切到uuid排第二的主機上去;但是之前的master再也加不進集群了,你說這集群還能用嗎?

  當然是不能!

 

  3、mysql-5.7.20 終於、終於、王者歸來! 上面的問題它都沒有了、對於這個已經基本可用的版本、表現出了無限的崇拜、於是

  第一時間把mysql-group-replication的自動化安裝整合到了mysqltools(下載地址https://github.com/Neeky/mysqltools)這個工具中。

 

二、環境規划

  主機名        ip地址      在mgr中的角色

  mgr17        10.186.19.17    primary

  mgr18        10.186.19.18    seconde

  mgr19        10.186.19.19    seconde

  

三、使用mysqltools自動化安裝mysql-group-replication:

ansible-playbook install_group_replication.yaml 

PLAY [mgr1] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [mrg17]
ok: [mrg19]
ok: [mrg18]

TASK [create mysql user] *******************************************************
ok: [mrg19]
ok: [mrg18]
ok: [mrg17]

TASK [create and config /etc/my.cnf] *******************************************
changed: [mrg17]
changed: [mrg19]
changed: [mrg18]

TASK [transfer mysql install package to remote host and unarchive to /usr/local/] ***
changed: [mrg17]
changed: [mrg18]
changed: [mrg19]

TASK [change owner to mysql user] **********************************************
changed: [mrg17]
changed: [mrg19]
changed: [mrg18]

TASK [make link /usr/local/mysql-xx.yy.zz to /usr/local/mysql] *****************
changed: [mrg17]
changed: [mrg18]
changed: [mrg19]

TASK [export mysql share object (*.os)] ****************************************
ok: [mrg18]
ok: [mrg17]
ok: [mrg19]

TASK [load share object] *******************************************************
changed: [mrg17]
changed: [mrg18]
changed: [mrg19]

TASK [export path env variable] ************************************************
ok: [mrg17]
ok: [mrg18]
ok: [mrg19]

TASK [export path env to /root/.bashrc] ****************************************
ok: [mrg17]
ok: [mrg18]
ok: [mrg19]

TASK [make link /usr/local/mysql-xx.yy.zz to /usr/local/mysql] *****************
ok: [mrg17]
ok: [mrg18]
ok: [mrg19]

TASK [create libmysqlclient_r.so file for php-5.6] *****************************
changed: [mrg17]
changed: [mrg18]
changed: [mrg19]

TASK [create datadir] **********************************************************
changed: [mrg17]
changed: [mrg18]
changed: [mrg19]

TASK [initialize-insecure] *****************************************************
changed: [mrg17]
changed: [mrg18]
changed: [mrg19]

TASK [create systemd config file] **********************************************
ok: [mrg18]
ok: [mrg19]
ok: [mrg17]

TASK [enable mysqld service] ***************************************************
changed: [mrg19]
changed: [mrg18]
changed: [mrg17]

TASK [start mysql(sytemctl)] ***************************************************
changed: [mrg17]
changed: [mrg18]
changed: [mrg19]

TASK [config mysql.service start up on boot] ***********************************
changed: [mrg17]
changed: [mrg18]
changed: [mrg19]

TASK [config sysv start script] ************************************************
skipping: [mrg17]
skipping: [mrg18]
skipping: [mrg19]

TASK [start mysql(service)] ****************************************************
skipping: [mrg17]
skipping: [mrg18]
skipping: [mrg19]

TASK [config mysql.service start up on boot] ***********************************
skipping: [mrg17]
skipping: [mrg18]
skipping: [mrg19]

TASK [transfer sql statement to remonte] ***************************************
changed: [mrg17]
changed: [mrg18]
changed: [mrg19]

TASK [config mysql group replication] *******************************************************
changed: [mrg17]
changed: [mrg19]
changed: [mrg18]

TASK [remove temp file /tmp/config_mysql_group_replication.sql] ****************
changed: [mrg17]
changed: [mrg18]
changed: [mrg19]

PLAY RECAP *********************************************************************
mrg17                      : ok=21   changed=14   unreachable=0    failed=0   
mrg18                      : ok=21   changed=14   unreachable=0    failed=0   
mrg19                      : ok=21   changed=14   unreachable=0    failed=0 

 看樣子、mysql-group-replication集群是安裝成功了、下面我給出mysql-5.7.20 在可用性方面的表現。

 

四、測試一下mysql-group-replication中各個成員的狀態是否正常

select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 8cd24f4c-c51c-11e7-85a8-9a17854b700d | mtls17      |        3306 | ONLINE       |
| group_replication_applier | 8d6dd76f-c51c-11e7-bff6-1e1b3511358e | mtsl18      |        3306 | ONLINE       |
| group_replication_applier | 8fc1d79a-c51c-11e7-b9f1-8a7c439b72d9 | mtls19      |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

結論: 各個成員狀態正常 

 

五、測試primary成員是否能寫入

mysql> create database tempdb char set utf8;
Query OK, 1 row affected (0.18 sec)

mysql> 
mysql> use tempdb;
Database changed
mysql> 
mysql> create table person(
    ->     id int not null auto_increment primary key,
    ->     name varchar(4),
    ->     v int
    -> ) char set utf8;
Query OK, 0 rows affected (0.02 sec)

mysql> 
mysql> insert into person(name,v) values('張三',100),('李四',200),('王五',300);
Query OK, 3 rows affected (0.21 sec)
Records: 3  Duplicates: 0  Warnings: 0

結論: primary 能正常寫入 

 

六、測試seconde結點是否正常的同步到了數據

[root@actionsky18 ~]# mysql tempdb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 34
Server version: 5.7.20-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select * from person;
+----+--------+------+
| id | name   | v    |
+----+--------+------+
|  7 | 張三   |  100 |
| 14 | 李四   |  200 |
| 21 | 王五   |  300 |
+----+--------+------+
3 rows in set (0.01 sec)

 結論:seconde 成員能正常同步到數據

 

七、kill 掉primary 成員、觀察剩余成員的狀態是否正常

  在mtls17上執行(當前的primary在mtls17主機上)

[root@mtls17 mysql]# ps -ef | grep mysql
mysql    27928     1  0 02:07 ?        00:00:09 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
root     29030 15848  0 02:24 pts/0    00:00:00 grep --color=auto mysql
[root@mtls17 mysql]# kill -9 27928

  在mtls18上剩余成員是否正常

select * from replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 8d6dd76f-c51c-11e7-bff6-1e1b3511358e | mtsl18      |        3306 | ONLINE       |
| group_replication_applier | 8fc1d79a-c51c-11e7-b9f1-8a7c439b72d9 | mtls19      |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.01 sec)

結論:kill 掉primary 成員后、剩余的成員狀態都正常;

 

在這里還是補充一下技術上的細節、在安裝mysql-group-replication的時候mysqltools默認為會把第一個主機配置成primary,

在primary 宕機后、默認情況下mysql-group-replication會把存活着的mysql中member_id 最小的主機設置為新的primary,

由上面的select語句可知mtls18的member_id是小於mtls19的、所以在mtls17宕機之后新的primary就是mtls18。

 

八、測試新的primary是否支持寫入

mysql> use tempdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------+
| Tables_in_tempdb |
+------------------+
| person           |
+------------------+
1 row in set (0.00 sec)

mysql> insert into person(name,v) values('趙六',100);
Query OK, 1 row affected (0.01 sec)

結論:新選出的primary 支持寫入 

  

九、 測試之前的primary重啟后能否正常加入高可用組

[root@mtls17 ~]# systemctl start mysql
[root@mtls17 ~]# mysql 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> start group_replication;
Query OK, 0 rows affected (3.39 sec)

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 8cd24f4c-c51c-11e7-85a8-9a17854b700d | mtls17      |        3306 | ONLINE       |
| group_replication_applier | 8d6dd76f-c51c-11e7-bff6-1e1b3511358e | mtsl18      |        3306 | ONLINE       |
| group_replication_applier | 8fc1d79a-c51c-11e7-b9f1-8a7c439b72d9 | mtls19      |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

mysql> select * from tempdb.person;
+----+--------+------+
| id | name   | v    |
+----+--------+------+
|  7 | 張三   |  100 |
| 14 | 李四   |  200 |
| 21 | 王五   |  300 |
| 24 | 趙六   |  100 |
+----+--------+------+
4 rows in set (0.00 sec)

 結論:老的primary可以正常恢復

 

十、我寫的關於mysql group replication 的相關文章 

  1、mysql group replication 安裝與配置詳解:http://www.cnblogs.com/JiangLe/p/6727281.html#3849996

  2、mysql group replication 在mysql-5.7.20版本下的可用性報告:http://www.cnblogs.com/JiangLe/p/7809229.html

  3、mysql group replication 主節宕機點恢復 https://i.cnblogs.com/EditPosts.aspx?postid=7941929

  4、mysql group replication 多數據結點丟失情況下的恢復

  5、我寫的全自動化安裝mysql-group-replication 開源工具在我的測試環境下安裝mysql group replication 只要72秒 https://github.com/Neeky/mysqltools 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM