运维项目实训—部署mysql组复制(MySQL Group Replication)

1.MGR介绍

组复制是基于分布式一致性协议Paxos实现数据最终一致性的MySQL插件,通过这种插件可以实现弹性、高可用、容错复制拓扑结构。
MySQL组复制提供分布式状态机复制,在服务器之间具有强协调。当数据库服务器是属于同一组时,组复制机制可以自动协调它们。该组可以在具有自动选择新主库功能的单主模式下操作,这种情况下一个组只有主节点才可以做写操作。或者,对于更高级的用户,该组可以以多主模式部署,即多个节点都可以做写操作,即使它们是同时发过来的写请求。不过这种情况下,应用层会有部分额外的限制。

这里写图片描述


1.数据一致性保证

对于只读(RO)事务,组间实例无需进行通讯,就可以处理事务;但是对于读写(RW)事务,需要经过组内大多数节点决议,来决定该事务是否可以提交。

2.事务并发冲突处理

在高并发的多写模式(MGR的一种运行模式)下,节点间事务的提交可能会产生冲突,比如,两个不同的事务在两个节点上操作了同一行数据,这个时候就会产生冲突。首先,Group Replication(GR)能够识别到这个冲突,然后对此的处理采用乐观策略:依赖事务提交的时间先后顺序,先发起提交的节点能够正确提交,而后面的提交,会失败。

3.节点故障自动检测

GR自带故障检测机制,可以识别组内成员是否挂掉(组内节点心跳检测)。当一个节点失效,将由其他节点决定是否将这个失效的节点从group里面剔除。当然,这是建立在满足大多数节点存活并且可以进行决议的前提上的。

4.组成员自动管理

GR自动维护组内节点的状态(在线?存活?挂掉?),对于失效的节点,由其他节点决定是否剔除。对于新加入的节点,GR会自动维护它的视图与其他节点的视图保持一致。
关于集群内节点的状态,可以通performance_schema.replication_group_members表查看。

5.容错能力

GR基于分布式一致性算法实现,一个组允许部分节点挂掉,只要保证大多数节点仍然存活并且之间的通讯是没有问题的,那么这个组对外仍然能够提供服务。

6.两种模式

GR提供了single-primary和multi-primary两种模式。single-primary模式下,组内只有一个节点负责写入,读可以从任意一个节点读取,组内数据保持最终一致;而multi-primary模式即为多写方案,即写操作会下发到组内所有节点,组内所有节点同时可读可写,该模式也是能够保证组内数据最终一致性。

注意,一个GR的所有节点必须配置使用同一种模式,不可混用。比如说A、B、C三个节点组成一个GR组,那么要么都运行在single-primary模式下,要么都运行在multi-primary模式下。


由my.cnf里的配置项group_replication_single_primary_mode来配置节点到底是运行在single-primary模式还是multi-primary模式


2.MGR配置

实验环境:(虚拟机rhel6.5.x86_64)**

Server5:172.25.51.5
Server6:172.25.51.6
Server7:172.25.51.7

Server5配置:

1.安装mysql服务并修改配置文件

[root@server5 ~]# vim /etc/my.cnf  ##在原有配置文件基础上,增加如下内容
 29 server_id=1
 30 gtid_mode=ON
 31 enforce_gtid_consistency=ON
 32 master_info_repository=TABLE
 33 relay_log_info_repository=TABLE
 34 binlog_checksum=NONE
 35 log_slave_updates=ON
 36 log_bin=binlog
 37 binlog_format=ROW
 38 
 39 transaction_write_set_extraction=XXHASH64
 40 loose-group_replication_group_name="dd480094-80fc-11e8-a8b6-525400482a37"
 41 loose-group_replication_start_on_boot=off
 42 loose-group_replication_local_address= "172.25.51.5:24901"
 43 loose-group_replication_group_seeds= "172.25.51.5:24901,172.25.51.6:24901,172.25.51.7:24901"
 44 loose-group_replication_bootstrap_group=off
 45 loose-group_replication_ip_whitelist="127.0.0.1/8,172.25.51.0/24"
 46 loose-group_replication_single_primary_mode=false
 47 loose-group_replication_enforce_update_everywhere_checks=true

2.初始化mysql

[root@server5 ~]# cd /var/lib/mysql
[root@server5 mysql]# rm -fr *                
[root@server5 mysql]# /etc/init.d/mysqld start
[root@server5 mysql]# grep password /var/log/mysqld.log  ##查找初始密码
[root@server5 mysql]# mysql -p        ##利用初始密码登陆mysql

示图:mysql初始密码
这里写图片描述
3.组复制配置

mysql> SET SQL_LOG_BIN=0;
mysql> alter user root@localhost identified by 'WESTOS.com123';  ##更改密码
mysql> grant REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'WESTOS.com123';  ##授权
mysql> FLUSH PRIVILEGES;     ##刷新系统权限表
mysql> SET SQL_LOG_BIN=1;    ##开启二进制日志
mysql> CHANGE MASTER TO MASTER_USER='rpl_user',MASTER_PASSWORD='WESTOS.com123' FOR CHANNEL 'group_replication_recovery';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';  ##安装组复制插件
mysql> SET GLOBAL group_replication_bootstrap_group=ON;  ##只有server5做此步骤
mysql> START GROUP_REPLICATION;     ##开启组复制
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
mysql> SELECT * FROM performance_schema.replication_group_members;  ##查看组复制信息

示图:server5组复制信息,状态为ONLINE
这里写图片描述

Server6配置

1.安装mysql服务并修改配置文件
<1>mysql配置文件

[root@server6 ~]# vim /etc/my.cnf
 29 server_id=2  ##各主机id不同
 30 gtid_mode=ON
 31 enforce_gtid_consistency=ON
 32 master_info_repository=TABLE
 33 relay_log_info_repository=TABLE
 34 binlog_checksum=NONE
 35 log_slave_updates=ON
 36 log_bin=binlog
 37 binlog_format=ROW
 38 
 39 transaction_write_set_extraction=XXHASH64
 40 loose-group_replication_group_name="dd480094-80fc-11e8-a8b6-525400482a37"
 41 loose-group_replication_start_on_boot=off
 42 loose-group_replication_local_address= "172.25.51.6:24901"  ##本地组复制地址
 43 loose-group_replication_group_seeds= "172.25.51.5:24901,172.25.51.6:24901,172.25.51.7:24901"
 44 loose-group_replication_bootstrap_group=off
 45 loose-group_replication_ip_whitelist="127.0.0.1/8,172.25.51.0/24"
 46 loose-group_replication_single_primary_mode=false
 47 loose-group_replication_enforce_update_everywhere_checks=true

2.注释

[root@server6 ~]# vim /etc/init.d/mysqld
112 #           [ $ret -ne 0 ] && return $ret
113 #           initfile="$(install_validate_password_sql_file)"
114 #           action $"Installing validate password plugin: " /usr/sbin/mysqld --datadir="$datadir" --user=mysql --init-file="$initfile"
115 #           ret=$?
116 #           rm -f "$initfile"

2.初始化mysql

[root@server5 ~]# cd /var/lib/mysql
[root@server6 mysql]# rm -fr *
[root@server6 mysql]# /etc/init.d/mysqld start
[root@server5 mysql]# grep password /var/log/mysqld.log  ##查找初始密码
[root@server5 mysql]# mysql -p        ##利用初始密码登陆mysql

3.组复制配置

mysql> SET SQL_LOG_BIN=0;
mysql> alter user root@localhost identified by 'WESTOS.com123';
mysql> grant REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'WESTOS.com123';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='rpl_user',MASTER_PASSWORD='WESTOS.com123' FOR CHANNEL 'group_replication_recovery';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
mysql> set global group_replication_allow_local_disjoint_gtids_join=on;
mysql> start group_replication;
mysql> select * from performance_schema.replication_group_members;

Server7配置

Server7配置同Server6,只是mysql配置文件修改不同,如下:

 [root@server6 ~]# vim /etc/my.cnf
 29 server_id=3  ##服务id
 30 gtid_mode=ON
 31 enforce_gtid_consistency=ON
 32 master_info_repository=TABLE
 33 relay_log_info_repository=TABLE
 34 binlog_checksum=NONE
 35 log_slave_updates=ON
 36 log_bin=binlog
 37 binlog_format=ROW
 38 
 39 transaction_write_set_extraction=XXHASH64
 40 loose-group_replication_group_name="dd480094-80fc-11e8-a8b6-525400482a37"
 41 loose-group_replication_start_on_boot=off
 42 loose-group_replication_local_address= "172.25.51.7:24901"  ##本地组复制ip地址
 43 loose-group_replication_group_seeds= "172.25.51.5:24901,172.25.51.6:24901,172.25.51.7:24901"
 44 loose-group_replication_bootstrap_group=off
 45 loose-group_replication_ip_whitelist="127.0.0.1/8,172.25.51.0/24"
 46 loose-group_replication_single_primary_mode=false
 47 loose-group_replication_enforce_update_everywhere_checks=true

示图:三台主机组复制信息,状态均为ONLINE
这里写图片描述

测试:

1.Server7上创建数据库Linux
这里写图片描述
2.Server5、Server6登陆数据库后,均可看到Linux数据库
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/hannah_zh/article/details/80968821