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

    ********************过放荡不羁的生活,容易得像顺水推舟,但是要结识良朋益友,却难如登天。********************
  • 相关阅读:
    训练总结
    图论--最短路--SPFA模板(能过题,真没错的模板)
    图论--最短路-- Dijkstra模板(目前见到的最好用的)
    The 2019 Asia Nanchang First Round Online Programming Contest B Fire-Fighting Hero(阅读理解)
    关于RMQ问题的四种解法
    The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 K题 center
    The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 XKC's basketball team
    The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 D Carneginon
    ZOJ 3607 Lazier Salesgirl (枚举)
    ZOJ 3605 Find the Marble(dp)
  • 原文地址:https://www.cnblogs.com/93bok/p/12424809.html
Copyright © 2011-2022 走看看