您的位置:首页 > 数据库 > SQL

运维笔记39 mysql5.7新特性(Mysql Group Replication)

2017-04-08 00:26 567 查看
概述:

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已经配置成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息