概述:
mysql5.7引入了一个很令人振奋的新特性,让mysql的主从复制更加方便简单,而且扫清了MySQL进入金融行业最后的障碍。
集群拓扑:
mysql版本: Ver 14.14 Distrib 5.7.17
发行版版本:Red Hat Enterprise Linux Server release 7.0 (Maipo)
一.mysql5.7的yum安装(在systemd下)
在mysql官网上下载rpm包进行安装:
建议下载Bundle版本,这种版本相当于全家桶版本,解压后直接无脑yum安装即可。(建议使用梯子下载。或者将链接拷贝到迅雷上,要不然下载速度感人)
解压后如下:
[root@mgr1 mysql]# ls
mysql-5.7.17-1.el7.x86_64.rpm-bundle.tar
mysql-community-client-5.7.17-1.el7.x86_64.rpm
mysql-community-common-5.7.17-1.el7.x86_64.rpm
mysql-community-devel-5.7.17-1.el7.x86_64.rpm
mysql-community-embedded-5.7.17-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.17-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.17-1.el7.x86_64.rpm
mysql-community-libs-5.7.17-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm
mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64.rpm
mysql-community-server-5.7.17-1.el7.x86_64.rpm
mysql-community-server-minimal-5.7.17-1.el7.x86_64.rpm
mysql-community-test-5.7.17-1.el7.x86_64.rpm
虽然全安装上肯定没有问题,但是想embedded(嵌入式版本)总不需要安装了吧,最后选择安装的rpm包如下。
yum install mysql-community-server-5.7.17-1.el7.x86_64.rpm \
mysql-community-client-5.7.17-1.el7.x86_64.rpm \
mysql-community-common-5.7.17-1.el7.x86_64.rpm \
mysql-community-libs-5.7.17-1.el7.x86_64.rpm \
mysql-community-test-5.7.17-1.el7.x86_64.rpm \
mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm
安装好后要注意了,由于使用的是rhel7.0所以默认使用的服务管理是SysV,我们这里要在/etc/systemd/system创建systemctl的脚本全局配置文件,在/etc/systemd/system下创建mysql.service.d目录,并在其下创建override.conf配置文件。
[root@mgr1 mysql.service.d]# pwd
/etc/systemd/system/mysql.service.d
[root@mgr1 mysql.service.d]# ls
override.conf
配置内容如下:
[Service]
LimitNOFILE=1024 #打开文件描述符的限制
PIDFile=/var/lib/mysql/mysqld.pid #指定pid文件的位置
Nice=0 #启动等级
LimitCore=1 #限制的cpu数
#Environment="LD_PRELOAD=/path/to/malloc/library"
Environment="TZ=Asia/Shanghai" #设置市区
配置这些之后,要使用systemctl重新加载一遍。
[root@mgr1 mysql.service.d]# systemctl daemon-reload
现在就可以使用systemctl命令控制mysql的服务了。
二 配置mgr
2.1主从复制配置
mgr是一种主从复制的自动化,所以在配置他之前,仍然要先配置主从复制。
在mgr1,mgr2,mgr3上均写入如下配置
server_id=1 #每台的id当然不能一样了
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
2.2 mgr的环境准备
1)
mgr是以一个插件的形式来安装的,下面是安装mgr插件,在mgr1,mgr2,mgr3上都要执行。
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.01 sec)
查看是否安装成功
mysql> show plugins;
*************************** 45. row ***************************
Name: group_replication
Status: ACTIVE
Type: GROUP REPLICATION
Library: group_replication.so
License: GPL
45 rows in set (0.00 sec)
看到上面的显示后说明安装成功。
2)
在my.cnf配置文件中加入如下配置
transaction_write_set_extraction = XXHASH64
loose-group_replication_group_name = "5f847ff2-d701-11e6-819c-b8ca3af6e36c"
loose-group_replication_start_on_boot = off
loose-group_replication_local_address = "mgr1.mo.com:23306"#这里每台机器上是不一样的
loose-group_replication_group_seeds = "mgr1.mo.com:23306,mgr2.mo.com:23307,mgr3.mo.com:23308"
loose-group_replication_bootstrap_group = off
loose-group_replication_single_primary_mode = true
loose-group_replication_enforce_update_everywhere_checks = false
三 开启mysql集群
这里可以参考mysql的官方文档
mysql mgr部分官方文档
但是官方文档没有说清一些配置,我们直接采用会踩坑。
首先设置
mysql> SET GLOBAL group_replication_bootstrap_group = ON;
设置后就相当于以设置这个参数的机器为复制的master。这里也是官方文档提到的。之后直接开启集群即可
mysql> START GROUP_REPLICATION;
但是我们出现了启动错误
我们观察配置文件后,发现了如下的ERROR
2017-04-07T15:08:13.077950Z 0 [Warning] Plugin group_replication reported: '[GCS] Connection attempt from IP address 172.25.3.201 refused. Address is not in the IP whitelist.'
经过查阅后我们加入如下参数
mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
mysql> SET GLOBAL group_replication_ip_whitelist='172.25.3.201/24,127.0.0.1/8';
现在再启动集群问题就解决,在其他机器上,只需执行查阅后的那两个步骤和开启集群,同步集群就配置好了。
如果看到如下显示代表确实配置成功
mysql> select * from performance_schema.replication_group_members\G
*************************** 1. row ***************************
CHANNEL_NAME: group_replication_applier
MEMBER_ID: 2b5b9e8b-1b6d-11e7-a53a-52540096854f
MEMBER_HOST: mgr3.mo.com
MEMBER_PORT: 3306
MEMBER_STATE: ONLINE
*************************** 2. row ***************************
CHANNEL_NAME: group_replication_applier
MEMBER_ID: 2f2d2c9c-1abc-11e7-8c6c-5254008dffba
MEMBER_HOST: mgr1.mo.com
MEMBER_PORT: 3306
MEMBER_STATE: ONLINE
*************************** 3. row ***************************
CHANNEL_NAME: group_replication_applier
MEMBER_ID: c36fcb84-1b78-11e7-b3eb-525400ad6241
MEMBER_HOST: mgr2.mo.com
MEMBER_PORT: 3306
MEMBER_STATE: ONLINE
3 rows in set (0.00 sec)
如上代表3个节点都配置好了。
现在创建db1库并创建test表插入一些数据测试
mysql> insert into test values(1,'mo');
ERROR 3098 (HY000): The table does not comply with the requirements by an external plugin
插入数据的时候出现了如上问题,这里原因是group_replaction环境下面,表必须有主键不然不允许往里insert值。所以修改表t1,将id字段设置程主键即可。
mysql> alter table test modify id int primary key;
Query OK, 0 rows affected (0.75 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> insert into test values(1,'mo');
Query OK, 1 row affected (0.55 sec)
现在插入成功在mgr2上查询
mysql> select * from test;
+----+------+
| id | name |
+----+------+
| 1 | mo |
+----+------+
通过上面测试表示mgr已经配置成功。