MySQL组复制MGR(二)-- 组复制搭建

(一)主机操作
(1)路由信息
vmnet5 192.168.10.0
(2)主机信息
| 主机名称 | IP地址 | 操作系统版本 | 数据库版本 |
| mgr-node1 | 192.168.10.11 | centos 7.4 ,64-bit | mysql社区版 5.7.24 |
| mgr-node2 | 192.168.10.12 | centos 7.4 , 64-bit | mysql社区版 5.7.24 |
| mgr-node3 | 192.168.10.13 | centos 7.4 ,64-bit | mysql社区版 5.7.24 |
配置所有主机的hosts文件:
[root@mgr-node1 data]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.11 mgr-node1
192.168.10.12 mgr-node2
192.168.10.13 mgr-node3
(3)关闭所有节点的防火墙和selinux
# 关闭防火墙
# 查看防火墙状态,正在运行
[root@mgr-node1 ~]# firewall-cmd --state
running
# 关闭防火墙
[root@mgr-node1 ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@mgr-node1 ~]# firewall-cmd --state
not running
# 永久关闭防火墙
[root@mgr-node1 ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
#禁用selinux
[root@mgr-node1 ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
(二)安装MySQL数据库
这里在每个节点安装MySQL软件,过程见:https://www.cnblogs.com/lijiaman/p/10743102.html
参数文件:/etc/my.cnf
# 设置mysql的安装目录
basedir=/mysql
# 设置mysql数据库的数据的存放目录
datadir=/mysql/data
(三)配置组复制(Group Replication)--采用多主模式
创建binlog日志存放路径,三个节点都要创建:
[root@mgr-node1 etc]# mkdir -p /mysql/binlog/
[root@mgr-node1 etc]# chown -R mysql:mysql /mysql/binlog
(1)节点1配置组复制
(1.1)在节点1上添加如下参数,重启实例
# 复制参数
server_id = 1
gtid_mode = on
enforce_gtid_consistency = on
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_bin = /mysql/binlog/mgr-node1-bin
log-slave-updates = 1
binlog_format = row
sync-master-info = 1
sync_binlog = 1
skip_slave_start = 1 #group replication参数
transaction_write_set_extraction=XXHASH64 #以便在server收集写集合的同时将其记录到二进制日志。写集合基于每行的主键,并且是行更改后的唯一标识此标识将用于检测冲突。
loose-group_replication_group_name="dc04ba77-bcf2-11ea-85bf-000c295111ae" #组的名字可以随便起,但不能用主机的GTID! 所有节点的这个组名必须保持一致!
loose-group_replication_start_on_boot=off #启动mysql时不自动启动组复制
loose-group_replication_local_address= "192.168.10.11:24901" #本机IP地址,24901用于接收来自其他组成员的传入连接
loose-group_replication_group_seeds= "192.168.10.11:24901,192.168.10.12:24901,192.168.10.13:24901" # 当前主机成员需要加入组时,Server先访问这些种子成员中的一个,然后它请求重新配置以允许它加入组,
# 需要注意的是,此参数不需要列出所有组成员,只需列出当前节点加入组需要访问的节点即可。
loose-group_replication_bootstrap_group=off # 是否自动引导组。此选项只能在一个server实例上使用,通常是首次引导组时(或在整组成员关闭的情况下),如果多次引导,可能出现脑裂。
loose-group_replication_single_primary_mode=off #关闭单主模式的参数(本例测试时多主模式,所以关闭该项)
loose-group_replication_enforce_update_everywhere_checks=on #开启多主模式的参数
loose-group_replication_ip_whitelist="192.168.10.0/24,127.0.0.1/8" # 允许加入组复制的客户机来源的ip白名单
(1.2)创建组复制的用户
组复制使用异步复制协议来实现分布式恢复,在将组成员加入组之前对其进行同步,分布式恢复过程依赖于group_replication_recovery通道,该通道用于组成员之间传输数据。因此,需要设置具有正确权限的复制用户,以便组复制可以建立成员到成员的数据恢复。
用于数据复制的用户需要有REPLICATION_SLAVE特权,用户的创建有2种方法:
方法一:第一个节点创建复制用户,二进制日志中捕获创建用户的过程,然后依靠分布式恢复来复制创建用户的语句。[注:奇怪的是,网上都不使用这种方法
方法二:禁用二进制日志,避免将创建用户传播到其它实例,然后在每一个节点创建复制用户。
这里演示第二种方法:
[root@mgr-node1 etc]# mysql -uroot -p123456
mysql> SET SQL_LOG_BIN=0; # 关闭binlog
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_slave@'%' IDENTIFIED BY '123456'; # 创建组复制的用户
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> reset master;
Query OK, 0 rows affected (0.01 sec)
mysql> SET SQL_LOG_BIN=1; # 开启binlog
Query OK, 0 rows affected (0.00 sec)
(1.3)配置节点1上的组复制并安装组复制插件
mysql> CHANGE MASTER TO MASTER_USER='rpl_slave', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+----------------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+----------------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ... ... ... ... ... |
| group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |
+----------------------------+----------+--------------------+----------------------+---------+
45 rows in set (0.00 sec)
(1.4)开启节点1上的组复制
首次启动组的过程称为引导,使用group_replication_bootstrap_group系统变量来引导组,引导程序只能由一台服务器执行一次,且只能执行一次,这就是group_replication_bootstrap_group参数不保存在配置文件中的原因。假如将该参数保存在配置文件中,则在重启时,server会自动引导具有相同名称的第二个组,这将导致两个不同的组具有相同的名称。因此,为了安全的引导组,请连接到第一个节点执行:
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)
mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.10 sec)
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)
在执行组引导及启动组复制后,组已经创建出来了,我们可以使用下面命令查看组信息
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 533fe6ba-bcdf-11ea-9516-000c295111ae | mgr-node1 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
1 row in set (0.00 sec)
(2)节点2配置组复制
(2.1)在节点2上添加如下参数,重启实例
# 复制参数
server_id = 2
gtid_mode = on
enforce_gtid_consistency = on
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_bin = /mysql/binlog/mgr-node2-bin
log-slave-updates = 1
binlog_format = row
sync-master-info = 1
sync_binlog = 1
skip_slave_start = 1 #group replication参数
transaction_write_set_extraction=XXHASH64 #以便在server收集写集合的同时将其记录到二进制日志。写集合基于每行的主键,并且是行更改后的唯一标识此标识将用于检测冲突。
loose-group_replication_group_name="dc04ba77-bcf2-11ea-85bf-000c295111ae" #组的名字可以随便起,但不能用主机的GTID! 所有节点的这个组名必须保持一致!
loose-group_replication_start_on_boot=off #为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。
loose-group_replication_local_address= "192.168.10.12:24901"
loose-group_replication_group_seeds= "192.168.10.11:24901,192.168.10.12:24901,192.168.10.13:24901"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=off #关闭单主模式的参数(本例测试时多主模式,所以关闭该项)
loose-group_replication_enforce_update_everywhere_checks=on #开启多主模式的参数
loose-group_replication_ip_whitelist="192.168.10.0/24,127.0.0.1/8" # 允许加入组复制的客户机来源的ip白名单
(2.2)创建组复制的用户
[root@mgr-node2 etc]# mysql -uroot -p123456
mysql> SET SQL_LOG_BIN=0; # 关闭binlog
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_slave@'%' IDENTIFIED BY '123456'; # 创建组复制的用户
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> reset master;
Query OK, 0 rows affected (0.01 sec)
mysql> SET SQL_LOG_BIN=1; # 开启binlog
Query OK, 0 rows affected (0.00 sec)
(2.3)配置节点2上的组复制并安装组复制插件
mysql> CHANGE MASTER TO MASTER_USER='rpl_slave', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+----------------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+----------------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ... ... ... ... ... |
| group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |
+----------------------------+----------+--------------------+----------------------+---------+
45 rows in set (0.00 sec)
(2.4)开启节点2上的组复制
在第二个节点开启组复制的时候,不用再设置引导参数
mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.10 sec)
查看组成员,此时有2个节点已经加入了组
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 533fe6ba-bcdf-11ea-9516-000c295111ae | mgr-node1 | 3306 | ONLINE |
| group_replication_applier | 5ca45641-bcdd-11ea-918e-000c29fa726d | mgr-node2 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.00 sec)
(3)节点3配置组复制
(3.1)在节点3上添加如下参数,重启实例
# 复制参数
server_id = 3
gtid_mode = on
enforce_gtid_consistency = on
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_bin = /mysql/binlog/mgr-node3-bin
log-slave-updates = 1
binlog_format = row
sync-master-info = 1
sync_binlog = 1
skip_slave_start = 1 #group replication参数
transaction_write_set_extraction=XXHASH64 #以便在server收集写集合的同时将其记录到二进制日志。写集合基于每行的主键,并且是行更改后的唯一标识此标识将用于检测冲突。
loose-group_replication_group_name="dc04ba77-bcf2-11ea-85bf-000c295111ae" #组的名字可以随便起,但不能用主机的GTID! 所有节点的这个组名必须保持一致!
loose-group_replication_start_on_boot=off #为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。
loose-group_replication_local_address= "192.168.10.13:24901"
loose-group_replication_group_seeds= "192.168.10.11:24901,192.168.10.12:24901,192.168.10.13:24901"
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=off #关闭单主模式的参数(本例测试时多主模式,所以关闭该项)
loose-group_replication_enforce_update_everywhere_checks=on #开启多主模式的参数
loose-group_replication_ip_whitelist="192.168.10.0/24,127.0.0.1/8" # 允许加入组复制的客户机来源的ip白名单
(3.2)创建组复制的用户
[root@mgr-node3 etc]# mysql -uroot -p123456
mysql> SET SQL_LOG_BIN=0; # 关闭binlog
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_slave@'%' IDENTIFIED BY '123456'; # 创建组复制的用户
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> reset master;
Query OK, 0 rows affected (0.01 sec)
mysql> SET SQL_LOG_BIN=1; # 开启binlog
Query OK, 0 rows affected (0.00 sec)
(3.3)配置节点3上的组复制并安装组复制插件
mysql> CHANGE MASTER TO MASTER_USER='rpl_slave', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+----------------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+----------------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ... ... ... ... ... |
| group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |
+----------------------------+----------+--------------------+----------------------+---------+
45 rows in set (0.00 sec)
(3.4)开启节点3上的组复制
mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (2.10 sec)
查看组成员,此时所有成员已经加入到了组
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 533fe6ba-bcdf-11ea-9516-000c295111ae | mgr-node1 | 3306 | ONLINE |
| group_replication_applier | 5ca45641-bcdd-11ea-918e-000c29fa726d | mgr-node2 | 3306 | ONLINE |
| group_replication_applier | 62ad32e3-bcdd-11ea-9bbb-000c2978d7f6 | mgr-node3 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)
【完】
MySQL组复制MGR(二)-- 组复制搭建的更多相关文章
- mysql 8.0 MGR组复制配置
一.配置组复制的步骤 1.初始化数据目录 2.配置主服务器(primary) 3.配置辅助服务器(secondaries) 4.启动mysql实例 5.安装组复制插件(primary and seco ...
- MySQL高可用架构之MySQL5.7组复制MGR
MySQL高可用架构之MySQL5.7组复制MGR########################################################################### ...
- MySQL高可用之组复制(1):组复制技术简介
MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制( ...
- 【MySQL 组复制】1.组复制技术简介
组复制有两种模式 单主模式(single-primary/single-master)下自动选举出一个主节点,从而只允许在同一时刻只有该主节点可以更新数据. 对于MySQL的高级使用人员,可以通过复制 ...
- MySQL并发复制系列二:多线程复制
http://blog.itpub.net/28218939/viewspace-1975822/ 并发复制(Parallel Replication) 系列二: Enhanced Multi-th ...
- MySQL并发复制系列二:多线程复制 2016
并发复制(Parallel Replication) 系列二: Enhanced Multi-threaded Slaves作者:沃趣科技MySQL数据库工程师 麻鹏飞 首先梳理下传统MySQL/M ...
- MySQL集群(二)之主主复制
前面介绍了主从复制,这一篇我将介绍的是主主复制,其实听名字就可以知道,主主复制其实就是两台服务器互为主节点与从节点.接下来我将详细的给大家介绍,怎么去配置主主复制! 一.主从复制中的问题 1.1.从节 ...
- mysql 架构篇系列 4 复制架构一主一从搭建(半同步复制)
一.概述 在mysql 5.5之前,mysql 的复制是异步操作,主库和从库的数据之间存在一定的延时,这样存在一个隐患:当主库上写入一个事务并提交成功,而从库尚未得到主库推送的Binlog日志时,主库 ...
- mysql 架构篇系列 2 复制架构一主一从搭建(异步复制)
一. 环境准备 1.1 主库环境(172.168.18.201) 环境 说明 查看脚本 操作系统版本 CentOS Linux release 7.4.1708 (Core) cat /etc/red ...
随机推荐
- Windows安装 PyCharm
PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本控制. ...
- dart快速入门教程 (3)
3.运算符 运算符本质上就是代表某运算规则的符号,例如: + ,这个符号,代表着数学运算里面的加法,按照加法法则进行运算即可,同理,学习运算符就是掌握这些规则而已 3.1.算术运算符 算术运算符主要包 ...
- tomcat配置项目虚拟路径
tomcat版本:apache-tomcat-7.0.42 参考:http://blog.csdn.net/pangdingshan/article/details/7214786 一.虚拟根目录 1 ...
- jQurey zTree API 3.5
https://jeesite.gitee.io/front/jquery-ztree/3.5/api/API_cn.html
- 服务消费者(Ribbon)
上一篇文章,简单概述了服务注册与发现,在微服务架构中,业务都会被拆分成一个独立的服务,服务之间的通讯是基于http restful的,Ribbon可以很好地控制HTTP和TCP客户端的行为,Sprin ...
- Netty 源码解析(六): Channel 的 register 操作
原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 今天是猿灯塔“365篇原创计划”第六篇. 接下来的时间灯塔君持续更新Netty系列一共九篇 Netty 源码解析(一 ):开始 Netty ...
- 用WebIDE(coding)编写c语言
本期教程有对应视频 首先注册登录coding,打开coding的Cloud Studio 创建一个新的工作环境 安装依赖命令build-essential sudo apt-get update su ...
- web前端工程化/构建自动化
前端工程化 前端工程化的概念在近些年来逐渐成为主流构建大型web应用不可或缺的一部分,在此我通过以下这三方面总结一下自己的理解. 为什么需要前端工程化. 前端工程化的演化. 怎么实现前端工程化. 为什 ...
- 常见的H5移动端Web页面Bug问题解决方案总汇
解决jquery ajax调用远程接口的跨域问题 首先,接口必须允许远程调用.这是后端或者运维的事情.你必须保证你得到的一个接口是允许远程调用的.否则,就没啥了. $.ajax({ type:'get ...
- yml配置基本使用
1.yml 基本知识 1.1 常识 基本结构 k: v 的结构 注意:冒号和v之间必须有空格,否则会出现问题: 大小写敏感 1.2 v 多种写法 看一下下面的这个例子: # rabbitmq 初始化配 ...