zoukankan      html  css  js  c++  java
  • MySQL集群MGR架构for多主模式

    本文转载自: https://www.93bok.com

    MGR简介

    MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MySQL组复制提供了高可用、高扩展、高可靠的MySQL集群服务。

    1)高一致性

    基于原生复制及paxos协议的组复制技术,并以插件的方式提供,提供一致数据安全保证;

    2)高容错性

    只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置了自动化脑裂防护机制;

    3)高扩展性

    节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更新组信息,自动维护新的组信息;

    4)高灵活性

    有单主模式和多主模式,单主模式下,会自动选主,所有更新操作都在主上进行;多主模式下,所有server都可以同时处理更新操作。

    MGR是MySQL数据库未来发展的一个重要方向。

    MGR基础结构要求

    1、引擎必须为innodb,因为需事务支持在commit时对各节点进行冲突检查
    2、每个表必须有主键,在进行事务冲突检测时需要利用主键值对比
    3、必须开启binlog且为row格式
    4、必须打开GTID特性,且主从状态信息存于表中
    (--master-info-repository=TABLE 、--relay-log-info-repository=TABLE)
    5、--log-slave-updates打开
    6、一致性检测设置--transaction-write-set-extraction=XXHASH64
    

    MGR使用限制

    1、RP和普通复制binlog校验不能共存,需设置--binlog-checksum=none
    2、不支持gap lock(间隙锁),隔离级别需设置为read_committed
    3、不支持对表进行锁操作(lock /unlock table),不会发送到其他节点执行 ,影响需要对表进行加锁操作的情况,列入mysqldump全表备份恢复操作
    4、不支持serializable(序列化)隔离级别
    5、DDL语句不支持原子性,不能检测冲突,执行后需自行校验是否一致
    6、不支持外键:多主不支持,单主模式不存在此问题
    7、最多支持9个节点:超过9台server无法加入组
    

    MGR多主模式部署

    一、准备环境

    主机IP		     主机名		  数据库版本		     Server ID				 操作系统
    192.168.10.22	nongziyi22.xin	 mysql-5.7.19		1				Centos6.5
    192.168.10.27	nongziyi27.xin   mysql-5.7.19		2				Centos6.5
    192.168.10.29   nongziyi29.xin	 mysql-5.7.19		3				Centos6.5
    

    二、设置hostname和ip映射关系

    在三台服务器上都设置:

    vim /etc/hosts
    192.168.10.22   nongziyi22.xin
    192.168.10.27   nongziyi27.xin
    192.168.10.29   nongziyi29.xin
    

    三、nongziyi22.xin服务器配置

    1、配置my.cnf(和单主模式只差两句配置在末尾)
    vim /etc/mysql/my.cnf
    
    [mysqld]
    datadir=/a01/apps/mysql/data
    socket=/tmp/mysql.sock
    user=mysql
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    #Group Replication
    server_id = 1								#服务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 = '192.168.10.22:33061'		#以本机3306端口接收来自组成员的传入连接
    loose-group_replication_group_seeds ='192.168.10.22:33061,192.168.10.27:33061,192.168.10.29:33061'								#组中成员访问列表
    loose-group_replication_bootstrap_group = off		#不启用引导组
    loose-group_replication_single_primary_mode = off			#关闭单master模式
    loose-group_replication_enforce_update_everywhere_checks = ON		#多主一致性检查
    
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
    2、重启mysql服务
    service mysqld restart
    
    3、建立复制账号
    mysql -u root -p123456
    
    mysql> set SQL_LOG_BIN=0;				#停掉日志记录
    mysql> grant replication slave on *.* to MGR@'192.168.10.%' identified by '123456';
    mysql> flush privileges;
    mysql> set SQL_LOG_BIN=1;				#开启日志记录
    mysql> change master to master_user='MGR',master_password='123456' for channel 'group_replication_recovery';									#构建group_replication集群
    
    4、安装group replication插件

    #安装插件

    mysql> install PLUGIN group_replication SONAME 'group_replication.so';
    

    #查看group replication组件

    mysql> show plugins;
    

    PXf9qH.png

    5、启动服务器上mysql的group replication

    #设置group_replication_bootstrap_group为ON是为了标示以后加入集群的服务器以这台服务器为基准,以后加入的就不需要设置

    mysql> set global group_replication_bootstrap_group=ON;
    

    #作为首个节点启动MGR集群

    mysql> start group_replication;
    mysql> set global group_replication_bootstrap_group=OFF;
    

    PXfEJP.png

    6、查看MGR的状态
    mysql> select * from performance_schema.replication_group_members;
    

    PXfZz8.png

    7、插入数据以便一会别的主机添加到集群中的时候查看效果
    mysql> create database nongkaige;
    mysql> use nongkaige;
    mysql> create table ziyi(id int primary key,name varchar(20));
    mysql> insert into ziyi values (1,'nongziyi');
    mysql> select * from nongkaige.ziyi;
    

    PXfnsg.png

    四、nongziyi27.xin服务器配置

    1、配置my.cnf(和之前的一样,只是server_id和IP地址不一样而已)
    vim /etc/mysql/my.cnf
    
    #Group Replication
    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 = '192.168.10.27:33061'
    loose-group_replication_group_seeds ='192.168.10.22:33061,192.168.10.27:33061,192.168.10.29:33061'
    loose-group_replication_bootstrap_group = off
    loose-group_replication_single_primary_mode = off
    loose-group_replication_enforce_update_everywhere_checks = ON
    
    2、重启mysql服务
    service mysqld restart
    
    3、建立复制账号
    mysql -u root -p123456
    
    mysql> set SQL_LOG_BIN=0;				#停掉日志记录
    mysql> grant replication slave on *.* to MGR@'192.168.10.%' identified by '123456';
    mysql> flush privileges;
    mysql> set SQL_LOG_BIN=1;				#开启日志记录
    mysql> change master to master_user='MGR',master_password='123456' for channel 'group_replication_recovery';									#构建group_replication集群
    
    4、安装group replication插件

    #安装插件

    mysql> install PLUGIN group_replication SONAME 'group_replication.so';
    
    5、启动MGR集群
    mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
    mysql> start group_replication;
    
    6、查看MGR的状态
    mysql> select * from performance_schema.replication_group_members;
    

    PXfJzT.png

    7、检测数据是否同步过来
    mysql> select * from nongkaige.ziyi;
    

    PXftQU.png

    五、nongziyi29.xin服务器配置

    1、配置my.cnf(和之前的一样,只是server_id和IP地址不一样而已)
    vim /etc/mysql/my.cnf
    
    #Group Replication
    server_id = 3
    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 = '192.168.10.29:33061'
    loose-group_replication_group_seeds ='192.168.10.22:33061,192.168.10.27:33061,192.168.10.29:33061'
    loose-group_replication_bootstrap_group = off
    loose-group_replication_single_primary_mode = off
    loose-group_replication_enforce_update_everywhere_checks = ON
    
    2、重启mysql服务
    service mysqld restart
    
    3、建立复制账号
    mysql -u root -p123456
    
    mysql> set SQL_LOG_BIN=0;				#停掉日志记录
    mysql> grant replication slave on *.* to MGR@'192.168.10.%' identified by '123456';
    mysql> flush privileges;
    mysql> set SQL_LOG_BIN=1;				#开启日志记录
    mysql> change master to master_user='MGR',master_password='123456' for channel 'group_replication_recovery';									#构建group_replication集群
    
    4、安装group replication插件

    #安装插件

    mysql> install PLUGIN group_replication SONAME 'group_replication.so';
    
    5、启动MGR集群
    mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
    mysql> start group_replication;
    
    6、查看MGR的状态
    mysql> select * from performance_schema.replication_group_members;
    

    PXfdeJ.png

    7、检测数据是否同步过来
    mysql> select * from nongkaige.ziyi;
    

    PXfDF1.png

    查看谁是MGR集群的主节点

    mysql> select variable_value from performance_schema.global_status where variable_name='group_replication_primary_member';
    

    PXfrJx.png

    和单主模式不同,这里所有的主机都是主服务器,都能进行写操作

    MGR集群测试

    测试是否3个节点都能进行写操作

    1、在nongziyi22这台主机上插入一条数据看看能否写入
    mysql> insert into nongkaige.ziyi values (3,'huanglihua');
    

    PXf6SK.png

    2、在nongziyi27这台主机插入一条数据看看能否写入
    mysql> insert into nongkaige.ziyi values (4,'nongkaige');
    

    PXfgyD.png

    3、在nongziyi29这台主机插入一条数据看看能否写入
    mysql> insert into nongkaige.ziyi values (5,'pipixia');
    

    PXf2Oe.png

    ********************过放荡不羁的生活,容易得像顺水推舟,但是要结识良朋益友,却难如登天。********************
  • 相关阅读:
    swagger生成接口文档
    二分查找通用模板
    go-json技巧
    【Go】获取用户真实的ip地址
    数据库储存时间类型
    密码加密:md5/sha1 +盐值
    参数里时间格式的转换
    不好定位的元素定位
    vim编辑器
    ps -ef | grep php kill -9
  • 原文地址:https://www.cnblogs.com/93bok/p/12424809.html
Copyright © 2011-2022 走看看