您现在的位置是:网站首页> 编程资料编程资料
MGR集群搭建及配置过程_Mysql_
2023-05-26
432人已围观
简介 MGR集群搭建及配置过程_Mysql_
MGR全称MySQL Group Replication(Mysql组复制),是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MGR提供了高可用、高扩展、高可靠的MySQL集群服务。在MGR出现之前,用户常见的MySQL高可用方式,无论怎么变化架构,本质就是Master-Slave架构。MySQL 5.7版本开始支持无损半同步复制(lossless semi-sync replication),从而进一步提示数据复制的强一致性。
MGR是MySQL数据库未来发展的一个重要方向。
注意:根据本人测试group_replication.so插件是mysql-community-server安装包中携带,如果是rpm安装或yum安装存放地址为/usr/lib64/mysql/plugin/目录下,看下图。另外在安装5.7.16版本时是没有这个插件,而在安装5.7.20版本有这个插件,推测这是一个5.7.16到5.7.20之间新加的插件,个人建议安装5.7.20以上的版本。另外大家请在安装好mysql后查看一下是否存在这个插件。
如果提示group_replication.so不存在,或提示有问题并且查看时发现group_replication.so不存在,请重点看一下mysql的版本。(我搜了一大圈,没有一个人说这个问题。表示怀疑自己,如果我错了,请留言。)

(1).MGR的特性
高一致性。基于原生复制及paxos协议的组复制技术,并以插件的方式提供,提供一致数据安全保证;
高容错性。只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置了自动化脑裂防护机制;
高扩展性。节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更新组信息,自动维护新的组信息;
高灵活性。有单主模式和多主模式,单主模式下,会自动选主,所有更新操作都在主上进行;多主模式下,所有server都可以同时处理更新操作。
(2).搭建MGR的基础结构要求和使用限制(重点)
基础结构要求:1.引擎必须为innodb,因为需事务支持在commit时对各节点进行冲突检查;2.每个表必须有主键,在进行事务冲突检测时需要利用主键值对比;3.必须开启binlog且为row格式;4.开启GTID,且主从状态信息存于表中(--master-info-repository=TABLE 、--relay-log-info-repository=TABLE),--log-slave-updates打开;5.一致性检测设置--transaction-write-set-extraction=XXHASH64。
使用限制:1.RP和普通复制binlog校验不能共存,需设置--binlog-checksum=none;2.不支持gap lock(间隙锁),隔离级别需设置为read_committed;3.不支持对表进行锁操作(lock /unlock table),不会发送到其他节点执行 ,影响需要对表进行加锁操作的情况,列入mysqldump全表备份恢复操作;4.不支持serializable(序列化)隔离级别;5.DDL语句不支持原子性,不能检测冲突,执行后需自行校验是否一;6.多主模式下不支持外键,单主模式下支持外键;最多9个节点,超过9台无法加入集群
(3).实验环境
youxi1 192.168.1.6 CentOS7.6 Mysql5.7.26 端口号3306 server-id=1
youxi2 192.168.1.7 CentOS7.6 Mysql5.7.26 端口号3306 server-id=2
youxi3 192.168.1.8 CentOS7.6 Mysql5.7.26 端口号3306 server-id=3
另外,三台服务器上都进行IP的映射(如果此处不映射,请修改/etc/my.cnf配置文件中对应的域名为IP地址)
[root@youxi1 ~]# vim /etc/hosts 192.168.1.6 youxi1.cn youxi1 //长域名和短域名只要映射一个即可 192.168.1.7 youxi2.cn youxi2 192.168.1.8 youxi3.cn youxi3
(1).单主模式
我是在空数据库下操作,如果主数据集已存在数据,需要将主数据库的数据导出再导入到从数据库。另外还需保证引擎为innodb,每个表必须存在主键。
1)以youxi1作为主服务器,对youxi1进行配置
创建一个复制用的用户
mysql> grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '12345678'; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
修改配置文件,加入到[mysqld]模块下。然后重启mysqld
[root@youxi1 ~]# vim /etc/my.cnf server-id=1 //Mysql服务ID gtid-mode=on //全局事务 enforce-gtid-consistency=on //强制GTID的一致性 master-info-repository=TABLE //将master.info元数据保存在系统表中 relay-log-info-repository=TABLE //将relay.info元数据保存在系统表中 binlog-checksum=none //禁用二进制日志事件校验 log-slave-updates=on //级联复制 log-bin=binlog //开启二进制日志记录 binlog-format=ROW //以行的格式记录 transaction-write-set-extraction=XXHASH64 //使用哈希算法将其编码为散列 loose-group_replication_group_name='ce9be252-2b71-11e6-b8f4-00212844f856' //加入的组名,可以修改,只要格式对 loose-group_replication_start_on_boot=off //不自动启用组复制集群 loose-group_replication_local_address='youxi1:33061' //以本机端口33061接受来自组中成员的传入连接 loose-group_replication_group_seeds='youxi1:33061,youxi2:33062,youxi3:33063' //组中成员访问表 loose-group_replication_bootstrap_group=off //不启用引导组 [root@youxi1 ~]# systemctl restart mysqld
注意:如果防火墙是打开的,记得添加mysql的端口号。
[root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port={3306,33061}/tcp success [root@youxi1 ~]# firewall-cmd --reload success [root@youxi1 ~]# firewall-cmd --zone=public --list-ports 3306/tcp 33061/tcp修改master信息,构建组复制(group replication)集群信息
mysql> change master to master_user='repl',master_password='12345678' for channel 'group_replication_recovery'; Query OK, 0 rows affected, 2 warnings (0.04 sec)
安装组复制(group replication)插件,并查看组件信息
mysql> install PLUGIN group_replication SONAME 'group_replication.so'; Query OK, 0 rows affected (0.21 sec) mysql> show plugins; //查看组件是否安装成功 +----------------------------+----------+--------------------+----------------------+---------+ | Name | Status | Type | Library | License | +----------------------------+----------+--------------------+----------------------+---------+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | | mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL | | sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL | | CSV | ACTIVE | STORAGE ENGINE | NULL | GPL | | MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL | | InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL | | INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP_PER_INDEX | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_CMP_PER_INDEX_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_PAGE | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_PAGE_LRU | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_BUFFER_POOL_STATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_TEMP_TABLE_INFO | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_METRICS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_DEFAULT_STOPWORD | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_BEING_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_CONFIG | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_INDEX_CACHE | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_FT_INDEX_TABLE | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLESTATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_INDEXES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_COLUMNS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FIELDS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FOREIGN | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_FOREIGN_COLS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLESPACES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_DATAFILES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_VIRTUAL | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL | | ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL | | BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL | | FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL | | partition | ACTIVE | STORAGE ENGINE | NULL | GPL | | ngram | ACTIVE | FTPARSER | NULL | GPL | | validate_password | DISABLED | VALIDATE PASSWORD | validate_password.so | GPL | | group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL | +----------------------------+----------+--------------------+----------------------+---------+ 46 rows in set (0.00 sec)
作为主服务器需要由这台服务器开启引导,开启组复制(group replication)集群
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.24 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 | c9e3662b-9020-11e9-94aa-000c29721e89 | youxi1 | 3306 | ONLINE | +---------------------------+--------------------------------------+-------------+-------------+--------------+ 1 row in set (0.00 sec)
2)对youxi2进行配置
创建一个复制用的用户
mysql> grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '12345678'; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
修改配置文件,加入到[mysqld]模块下。然后重启mysqld
[root@youxi2 ~]# vim /etc/my.cnf server-id=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 loose-group_replication_group_name='ce9be252-2b71-11e6-b8f4-00212844f856' loose-group_replication_start_on_boot=off loose-group_replication_local_address='youxi2:33062' //修改 loose-group_replication_group_seeds='youxi1:33061,youxi2:33062,youxi3:33063' loose-group_replication_bootstrap_group=off [root@youxi2 ~]# systemctl restart mysqld
注意:如果防火墙是打开的,记得添加mysql的端口号。
[root@youxi2 ~]# firewall-cmd --permanent --zone=public --add-port={3306,33062}/tcp success [root@youxi2 ~]# firewall-cmd --reload success [root@youxi2 ~]# firewall-cmd --zone=public --list-ports 3306/tcp 33062/tcp修改master信息,构建组复制(group repl
