MySQL集群技术 4.高可用之组复制 (MGR)
MGR简介MySQL Group Replication(简称 MGR )是 MySQL 官方于 2016 年 12 月推出的一个全新的高可用与高扩 展的解决方案组复制是 MySQL 5.7.17 版本出现的新特性它提供了高可用、高扩展、高可靠的 MySQL 集群服务MySQL 组复制分单主模式和多主模式传统的 mysql 复制技术仅解决了数据同步的问题MGR 对属于同一组的服务器自动进行协调。对于要提交的事务组成员必须就全局事务序列中给定事务 的顺序达成一致提交或回滚事务由每个服务器单独完成但所有服务器都必须做出相同的决定如果存在网络分区导致成员无法达成事先定义的分割策略则在解决此问题之前系统不会继续进行 这是一种内置的自动裂脑保护机制MGR 由组通信系统( Group Communication SystemGCS ) 协议支持该系统提供故障检测机制、组成员服务以及安全且有序的消息传递组复制流程首先我们将多个节点共同组成一个复制组在执行读写RW事务的时候需要通过一致性协议层 Consensus 层的同意也就是读写事务想要进行提交必须要经过组里“大多数人”对应 Node 节 点的同意大多数指的是同意的节点数量需要大于 N/21这样才可以进行提交而不是原发起 方一个说了算。而针对只读RO事务则不需要经过组内同意直接 提交 即可注意节点数量不能超过 9 台最少需要3台组复制单主和多主模式single-primary mode(单写或单主模式)单写模式 group 内只有一台节点可写可读其他节点只可以读。当主服务器失败时会自动选择新的主 服务器multi-primary mode(多写或多主模式)组内的所有机器都是 primary 节点同时可以进行读写操作并且数据是最终一致的。手动还原方式[rootmysql ~]# systemctl stop mysqld.service [rootmysql ~]# rm -rf /data/mysql/* [rootmysql ~]# vim /etc/my.cnf #不同主机server-id一定要根据实际情况做相应改变 server-id10|20|30 #加入以上内容 [rootmysql ~]# mysqld --initialize --usermysql#设置所有mysql节点的解析[rootmysql-node1 ~]# cat /etc/hosts EOF 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.25.254.10 mysql-node1 172.25.254.20 mysql-node2 172.25.254.30 mysql-node3[rootmysql-node1 ~]# vim /etc/my.cnf plugin_load_addgroup_replication.so group_replication_group_nameaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa group_replication_start_on_bootoff group_replication_local_address172.25.254.10:33061 #其他两台主机一定要根据ip进行修改 group_replication_group_seeds172.25.254.10:33061,172.25.254.20:33061,172.25.254.30:33061 group_replication_bootstrap_groupoff group_replication_single_primary_modeOFF #加入以上内容之前的内容不要删除#配置组复制-在首台主机中[rootmysql ~]# systemctl restart mysqld.service [rootmysql ~]# mysql -uroot -p3QTXag.ZxJqP #登录数据库密码 #在mysqld --usermysql --initialize 这个命令随机生成 mysql alter user rootlocalhost identified by 123; Query OK, 0 rows affected (0.01 sec) mysql SET SQL_LOG_BIN0; Query OK, 0 rows affected (0.00 sec) mysql CREATE USER rpl_user% IDENTIFIED BY 123; Query OK, 0 rows affected (0.00 sec) mysql GRANT REPLICATION SLAVE ON *.* TO rpl_user%; Query OK, 0 rows affected (0.00 sec) mysql GRANT CONNECTION_ADMIN ON *.* TO rpl_user%; Query OK, 0 rows affected (0.00 sec) mysql GRANT BACKUP_ADMIN ON *.* TO rpl_user%; Query OK, 0 rows affected (0.00 sec) mysql GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user%; Query OK, 0 rows affected (0.00 sec) mysql FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql SET SQL_LOG_BIN1; Query OK, 0 rows affected (0.00 sec) mysql CHANGE REPLICATION SOURCE TO SOURCE_USERrpl_user, SOURCE_PASSWORD123 FOR CHANNEL group_replication_recovery; Query OK, 0 rows affected, 2 warnings (0.01 sec) mysql show PLUGINS; | group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |mysql SET GLOBAL group_replication_bootstrap_groupON; Query OK, 0 rows affected (0.00 sec) mysql START GROUP_REPLICATION USERrpl_user, PASSWORD123; Query OK, 0 rows affected (1.08 sec) mysql SET GLOBAL group_replication_bootstrap_groupOFF; Query OK, 0 rows affected (0.00 sec) mysql SELECT * FROM performance_schema.replication_group_members;#配置组复制在其余mysql-2 . mysql-3 主机中rootmysql-2 ~]# systemctl restart mysqld.service [rootmysql-2 ~]# mysql -uroot -p1p6hw1i8FG-9 mysql alter user rootlocalhost identified by 123; Query OK, 0 rows affected (0.01 sec) mysql SET SQL_LOG_BIN0; Query OK, 0 rows affected (0.00 sec) mysql CREATE USER rpl_user% IDENTIFIED BY 123; Query OK, 0 rows affected (0.02 sec) mysql GRANT REPLICATION SLAVE ON *.* TO rpl_user%; Query OK, 0 rows affected (0.00 sec) mysql GRANT CONNECTION_ADMIN ON *.* TO rpl_user%; Query OK, 0 rows affected (0.01 sec) mysql GRANT BACKUP_ADMIN ON *.* TO rpl_user%; Query OK, 0 rows affected (0.00 sec) mysql GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user%; Query OK, 0 rows affected (0.00 sec) mysql SET SQL_LOG_BIN1; Query OK, 0 rows affected (0.00 sec) mysql CHANGE REPLICATION SOURCE TO SOURCE_USERrpl_user,SOURCE_PASSWORD123 FOR CHANNEL group_replication_recovery; Query OK, 0 rows affected, 2 warnings (0.01 sec) mysql START GROUP_REPLICATION USERrpl_user, PASSWORD123; ERROR 3092 (HY000): The server is not configured properly to be an active member of the group. Please see more details on error log. mysql reset master; Query OK, 0 rows affected, 1 warning (0.02 sec) mysql START GROUP_REPLICATION USERrpl_user, PASSWORD123; Query OK, 0 rows affected (9.22 sec) mysql SELECT * FROM performance_schema.replication_group_members; mysql alter user rootlocalhost identified by 123; Query OK, 0 rows affected (0.00 sec)测试#在mysql-3 中建立xiao 这个表 mysql create database xiao; Query OK, 1 row affected (0.01 sec) #在mysql-1 中是否有xiao这个表有的话就成功了。 mysql show databases; -------------------- | Database | -------------------- | information_schema | | mysql | | performance_schema | | sys | | xiao | --------------------#主要是能够再三个主机上写入并读取就行因为我们前面的实验都是在10主机上写入其他主机上只能读取这个实验的话就可以在所有主机都能够写入与读取操作