MySQL组复制(Group Replication)

复制组能够以一种自动优先选择的单主模式运行,在某个时间只有一个服务器接受更新 。但是对于更高优先级的用户,组能够以多主模式部署,所有的服务器都能够接受更新,即使他们是同时发生的。

组复制中存在着一种内建的组成员关系服务用来保持组的视图一致,并且在任意时间对于组中的所有的服务器都可用。MySQL服务器能够退出或者加入组 中,而且视图也会相应的更新。有时服务器可能会意外的退出组(故障),在这种情况下失败检测机制检测这种情况并且告知复制组视图发生了变化,这所有的一切 都是自动实现的。

组复制原理图:
这里写图片描述

以下是MySQL组复制的应用场景:

弹性复制(Elastic Replication) -适用于需要一个不固定易变的复制架构,这种情况下组中的服务器可以在很少的副作用的情况下动态增加或者减少。 例如云服务的数据库服务。

高可用分片(Highly Available Shards) -分片是一种实现写操作的横向扩展的流行方法。当每一个分片映射到复制组的时候可以使用MySQL 组复制去实现高可用分片。

可选择的主从复制(Alternative to Master-Slave replication)- 在某些情况下, 使用单主服务器就会存在单点竞争。写入整个组能够在某些情况下改进这种情况。

自主系统 (Autonomic Systems) - 而且,我们也可以单纯的为了自动化部署MySQL组复制。

组复制中的每一个实例(MySQL服务器)可以运行在独立的物理机上或者在同一台机器上。此部分将讲述如何用三台 MySQL服务器建立一个组复制 。

组复制的架构图:
这里写图片描述

环境要求三台主机(虚拟机rhel6.5.x86_64):

server1: 172.25.66.1,mysql-5.7
server2:172.25.66.2,mysql-5.7
server3:172.25.66.3,mysql-5.7

安装好MySQL服务之后首先要进行配置文件修改(三台都要,注意server-id和loose-group_replication_local_address对应每台主机):

vim /etc/my.cnf
在原有配置基础上增加以下内容:

server-id=1#第一台1,第二台2,以此类推
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

transaction_write_set_extraction=XXHASH64
# 指明对于每一个事物服务器必须收集写集并且使用XXHASH64哈希算法进行哈希编码
loose-group_replication_group_name="2a9e58f4-11d8-42fc-88d8-2c02bd8df65a"
#uuid唯一标记一个组,可以使用uuidgen命令生成,然后复制到这里
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="172.25.66.1:24901"#对应着所在主机的ip
loose-group_replication_group_seeds="172.25.66.1:24901,172.25.66.2:24901,172.25.66.3:24901"#复制组中所有主机和端口
loose-group_replication_bootstrap_group=off

配置完成之后启动服务并且执行以下动作:

/etc/init.d/mysqld start

mysql -p#登录到MySQL服务器

mysql>SET SQL_LOG_BIN=0;#关闭二进制日志

mysql>CREATE USER rpl_user@'%' IDENTIFIED BY 'Guodong+0306';#创建用户并且指定密码,组内各服务器一致

mysql>GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';#授权操作,组内各服务器一致

mysql>FLUSH PRIVILEGES;

mysql>SET SQL_LOG_BIN=1;#开启二进制日志

mysql>CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Guodong+0306' FOR CHANNEL 'group_replication_recovery';

mysql>INSTALL PLUGIN group_replication SONAME 'group_replication.so';
#安装组复制插件
mysql>SHOW PLUGINS;

mysql>START GROUP_REPLICATION;
#开启组复制
mysql>SELECT * FROM performance_schema.replication_group_members;
#查看复制组的信息

接下来在server2和server3中配置与一类似,这里值列出server2中操作,三与二相同

在server2中修改/etc/my.cnf,内容比之server1稍有变化

之后打开mysqld,查看密码进入数据库操作:

每往组中添加一个实例,信息就会增加一条

测试组复制

分别在组内各个服务器进行数据库操作,增删改之类的,可以看到各服务器的数据是一致的,这就是组复制,多台主机互为主从,可以同时进行读写,但是最终的数据是一致的。

猜你喜欢

转载自blog.csdn.net/gd0306/article/details/81570728