转载自:http://www.cnblogs.com/zhangzihong/p/10443526.html

一、简介

MySQL Group Replication(简称MGR)字面意思是mysql组复制的意思,但其实他是一个高可用的集群架构,暂时只支持mysql5.7和mysql8.0版本.

是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案,提供了高可用、高扩展、高可靠的MySQL集群服务.

也是mysql官方基于组复制概念并充分参考MariaDB Galera Cluster和Percona XtraDB Cluster结合而来的新的高可用集群架构.

MySQL Group Replication是建立在基于Paxos的XCom之上的,正因为有了XCom基础设施,保证数据库状态机在节点间的事务一致性,才能在理论和实践中保证数据库系统在不同节点间的事务一致性。

由一般主从复制概念扩展,多个节点共同组成一个数据库集群,事务的提交必须经过半数以上节点同意方可提交,在集群中每个节点上都维护一个数据库状态机,保证节点间事务的一致性。

优点:

高一致性,基于原生复制及paxos协议的组复制技术.

高容错性,有自动检测机制,当出现宕机后,会自动剔除问题节点,其他节点可以正常使用(类似zk集群),当不同节点产生资源争用冲突时,会按照先到先得处理,并且内置了自动化脑裂防护机制.

高扩展性,可随时在线新增和移除节点,会自动同步所有节点上状态,直到新节点和其他节点保持一致,自动维护新的组信息.

高灵活性,直接插件形式安装(5.7.17后自带.so插件),有单主模式和多主模式,单主模式下,只有主库可以读写,其他从库会加上super_read_only状态,只能读取不可写入,出现故障会自动选主.

缺点:

还是太新,不太稳定,暂时性能还略差于PXC,对网络稳定性要求很高,至少是同机房做.

二、环境介绍

MySQL版本:8.0.15

数据库端口:3306

集群复制端口:33006

MGR插件:group_replication.so

10.115.88.18:单主

10.115.88.19:从

10.115.88.20:从

三、安装MySQL 8.0.15

3.1.1 下载地址:

https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.15-linux-glibc2.12-x86_64.tar

3.1.2: 安装数据库

  • 解压
tar -xf mysql-8.0.15-linux-glibc2.12-x86_64.tar -C /home/work
  • 进入解压目录
cd /home/work

tar xf mysql-8.0.15-linux-glibc2.12-x86_64.tar.gz

mv mysql-8.0.15-linux-glibc2.12-x86_64 mysql

rm -rf *.xz
  • 授予权限并创建数据目录
cd /home/work

tar xf mysql-8.0.15-linux-glibc2.12-x86_64.tar.gz

mv mysql-8.0.15-linux-glibc2.12-x86_64 mysql

rm -rf *.xz

chown -R work:work mysql

mkdir data

chown work:work data

cd /home/work/mysql

cd /home/work
  mkdir /home/work/relaylog
  chown -R work:work relaylog

cd /home/work/mysql
  mkdir run
  chown -R work:work run

  • 添加my.cnf文件
[client]
default-character-set=utf8
socket=/home/work/mysql/run/mysql.sock [mysqld]
user = work
port = 3306
basedir=/home/work/mysql
datadir=/home/work/data
socket=/home/work/mysql/run/mysql.sock
pid-file=/home/work/mysql/run/mysqld.pid
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
lower_case_table_names = 1 server-id = 183306
log-bin = mysql-bin
log-bin-index = binlogs.index
binlog_format = row
binlog_rows_query_log_events = on
binlog_checksum = none slave-parallel-type = LOGICAL_CLOCK
slave-parallel-workers = 4
slave_preserve_commit_order = 1 #GITD
gtid_mode = on
enforce_gtid_consistency = 1
log-slave-updates = 1
binlog_gtid_simple_recovery = 1 relay_log = /home/work/relaylog/relay.log
relay-log-index = /home/work/relaylog/relay.index
master_info_repository = table
relay_log_info_repository = table plugin_load="group_replication=group_replication.so" #MGR
#GR配置项 基中loose前缀表示若group Replication plugin未加载 mysql server仍明治维新启动
transaction_write_set_extraction = XXHASH64 #对每个事务获取write set,并且用XXHASH64算法获取hash值
loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #组名,此处可拿select.uuid()生成
loose-group_replication_start_on_boot = off #在mysqld启动时不自动启动组复制
loose-group_replication_local_address = "10.115.88.18:33006" #本节点的IP地址和端口,注意该端口是组内成员之间通信的端口,而不是MySQL对外提供服务的端口
loose-group_replication_group_seeds = "10.115.88.18:33006,10.115.88.19:33006,10.115.88.20:33006" #种子节点的IP和端口号,新成员加入到集群的时候需要联系种子节点,启动集群的节点不使用该选项
loose-group_replication_bootstrap_group = off #关闭,如果打开会造成脑裂 #是否启动集群,注意,该选项任何时候只能用于一个节点,通常情况下启动集群的时候使用,启动之后需要关闭该选项 loose-group_replication_member_weight = 50 #权重选择 skip-host-cache
skip-name-resolve
skip-external-locking
character-set-server=utf8
lower_case_table_names=1
event_scheduler=on
log_bin_trust_function_creators=on max_connections = 3000
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 8M
join_buffer_size = 2M
thread_cache_size = 300
#query_cache_size = 64M
#query_cache_limit = 4M
read_rnd_buffer_size = 8M innodb_buffer_pool_size = 8096M
innodb_log_file_size = 128M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 2M
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1 [mysqld_safe]
log-error=/home/work/data/err.log
  • 初始化数据库
bin/mysqld --initialize  --basedir=/home/work/mysql --lower-case-table-names=1 --datadir=/home/work/data/ --user=work
  • 拷贝启动文件
cp support-files/mysql.server /etc/init.d/mysqld
  • 添加环境变量
echo 'export PATH=/home/work/mysql/bin:$PATH' >>/etc/profile
source /etc/profile
  • 数据库启动
/etc/init.d/mysqld start
  • 修改数据库密码
alter user'root'@'localhost' IDENTIFIED BY 'dashuaige'; 

flush privileges;

四、配置MGR主

4.1.1 配置my.cnf文件

修改binlog如下:

server-id = 103306
log-bin = mysql-bin
log-bin-index = binlogs.index
binlog_format = row
binlog_rows_query_log_events = on
binlog_checksum = none slave-parallel-type = LOGICAL_CLOCK
slave-parallel-workers = 4
slave_preserve_commit_order = 1

修改GTID如下:

gtid_mode = on
enforce_gtid_consistency = 1
log-slave-updates = 1
binlog_gtid_simple_recovery = 1 relay_log = /home/work/relaylog/relay.log
relay-log-index = /home/work/relaylog/relay.index
master_info_repository = table
relay_log_info_repository = table

添加MGR插件

plugin_load="group_replication=group_replication.so"

修改MGR参数

#GR配置项 基中loose前缀表示若group Replication plugin未加载 mysql server仍明治维新启动
transaction_write_set_extraction = XXHASH64 #对每个事务获取write set,并且用XXHASH64算法获取hash值
loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #组名,此处可拿select.uuid()生成
loose-group_replication_start_on_boot = off #在mysqld启动时不自动启动组复制
loose-group_replication_local_address = "10.115.88.18:33006" #本节点的IP地址和端口,注意该端口是组内成员之间通信的端口,而不是MySQL对外提供服务的端口
loose-group_replication_group_seeds = "10.115.88.18:33006,10.115.88.19:33006,10.115.88.20:33006" #种子节点的IP和端口号,新成员加入到集群的时候需要联系种子节点,启动集群的节点不使用该选项
loose-group_replication_bootstrap_group = off #关闭,如果打开会造成脑裂 #是否启动集群,注意,该选项任何时候只能用于一个节点,通常情况下启动集群的时候使用,启动之后需要关闭该选项 loose-group_replication_member_weight = 50 #权重选择

启动数据库

/etc/init.d/mysqld restart

4.1.2 配置每台hosts主机解析

[root@bj1-10-115-88-18 mysql]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.115.88.18 bj1-10-115-88-18
10.115.88.19 bj1-10-115-88-19
10.115.88.20 bj1-10-115-88-20

4.1.3 配置mgr第一个主节点

以下步骤在10.115.88.18主机上的mysql中执行

第一步:创建用于复制的用户

set sql_log_bin=0;
create user repuser@'%' identified by 'repuser123'; grant replication slave,replication client on *.* to repuser@'%'; create user repuser@'127.0.0.1' identified by 'repuser123'; grant replication slave,replication client on *.* to repuser@'127.0.0.1'; create user repuser@'localhost' identified by 'repuser123'; grant replication slave,replication client on *.* to repuser@'localhost'; set sql_log_bin=1;

第二步:配置复制所使用的用户

change master to master_user='repuser',master_password='repuser123' for channel 'group_replication_recovery';

第三步:安装mysql group replication这个插件

备注:如果在my.cnf里写写入plugin_load="group_replication=group_replication.so" 这步就可以不用操作

install plugin group_replication soname 'group_replication.so';

通过show plugins;查看是否安装成功

第四步:建个群(官方点的说法就是初始化一个复制组

set global group_replication_bootstrap_group=on;
start group_replication;
set global group_replication_bootstrap_group=off; select * from performance_schema.replication_group_members;

五、配置另外两节点,从

以下步骤在所有从主机上的mysql中执行

第一步:创建用于复制的用户
set sql_log_bin=0;
create user repuser@'%' identified by 'repuser123'; grant replication slave,replication client on *.* to repuser@'%'; create user repuser@'127.0.0.1' identified by 'repuser123'; grant replication slave,replication client on *.* to repuser@'127.0.0.1'; create user repuser@'localhost' identified by 'repuser123'; grant replication slave,replication client on *.* to repuser@'localhost'; set sql_log_bin=1;

第二步:配置复制所使用的用户

change master to master_user='repuser',master_password='repuser123' for channel 'group_replication_recovery';

第三步:安装mysql group replication这个插件

备注:如果在my.cnf里写写入plugin_load="group_replication=group_replication.so" 这步就可以不用操作

install plugin group_replication soname 'group_replication.so';

通过show plugins;查看是否安装成功

第四步:加入前面创建好的复制组

start group_replication;
select * from performance_schema.replication_group_members;

如下出现以下报错

这是binlog导致的错误,执行以下

reset master;
start group_replication;
select * from performance_schema.replication_group_members;

查看是MGR状态:

查看MGR主的读写状态

查看MGR两台从的读写状态

MySQL 8.0.15 配置 MGR单主多从的更多相关文章

  1. MySQL+MGR 单主模式和多主模式的集群环境 - 部署手册 (Centos7.5)

    MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案.MGR是MySQL官方在5.7.17版本引进的一个数据库高可用与 ...

  2. MySQL MGR 单主模式下master角色切换规则

    MGR单主模式,master节点可读可写,其余节点都是只读.当配置MGR为单主模式,非master节点自动开启super_read_only 当可读可写的节点异常宕机,会进行怎样的切换?在选择新的可写 ...

  3. windows 系统如何安装 mysql 8.0.15 数据库?

    windows 系统如何安装 mysql 8.0.15 数据库? 1. 下载安装包 下载地址:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0. ...

  4. MySQL 5.7.27 MGR 单主/多主+ ProxySQL

    1 MySQL 5.7.27 MGR 多主环境 基础信息如下: centos 6.5/vbox 实例名 A B C IP 10.15.7.29 10.15.7.28 10.15.7.27 实例端口号 ...

  5. mysql 8.0 主从复制配置

    背景: 主库: 192.168.211.128 从库: 192.168.211.129 一.关闭防火墙 [root@node01 ~]# systemctl disable firewalld [ro ...

  6. MySQL 8.0安装 + 配置环境变量 + 连接 cmd

    MySQL 安装教程 搜索 MySQL,进入官网,找到 download 点击适用于 window community 版本,点击图中第二个 450.7 M 的安装包进行下载 这里有五个选项,选择第二 ...

  7. mysql 8.0.15忘记密码重置方法

    1.打开命令窗口cmd,输入命令:net stop mysql,停止MySQL服务, 2.开启跳过密码验证登录的MySQL服务 输入命令 mysqld --console --skip-grant-t ...

  8. JDBC 连接 MySQL 8.0.15+ 常见错误记录

    课后复习 1. No suitable driver found for mysql:jdbc://localhost:3306/test 错误原因: mysql:jdbc://localhost:3 ...

  9. mysql 8.0.16 单主 mgr搭建

    mysql 8.0.16 单主 mgr搭建 环境介绍: 192.168.142.142 db142192.168.142.143 db143192.168.142.145 db145 1.安装依赖包 ...

随机推荐

  1. scratch少儿编程第一季——02、scratch界面介绍

    各位小伙伴大家好: 上期我们简单的介绍了Scratch的一些基本信息,和scratch软件的下载. 今天我们一起来了解一下Scratch的编程界面的介绍. 关于版本我考虑之后还是决定基于Scratch ...

  2. react项目中canvas之画形状(圆形,椭圆形,方形)

    组件DrawShape.jsx如下: import React, { Component } from 'react' // import ClassNames from 'classnames' i ...

  3. Post请求数据传到后台+号变成了空格

    问题: 今天遇到一个问题:页面带有"+"号的数据,传到服务端接口,结果+号变成了空格.例如:传“1+1”变成了"1 1". 解决办法: 方案一: 将“+”号替换 ...

  4. Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制

    Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制 因为没有注册中心,所以需要网关对下游服务做负载均衡,然后果断集成Ribbon.中间遇到很多坑,最后终于解决了. 其实Ribbon里面 ...

  5. C++ DLL debug版本在其他PC上缺少依赖的处理方式

    1.正常情况提供给其他人的都是Release版本DLL 2.在需要提供Debug版本时,目标机器上可能会缺少环境,或者和生成DLL的环境不匹配导致DLL无法加载,提示DLL无法找到. 3.使用DLL依 ...

  6. 8.读写锁ReadWriteLock

    /*ReadWriteLock 读写锁*/ private ReadWriteLock lock = new ReentrantReadWriteLock(); lock.readLock().loc ...

  7. 【Zookeeper】应用场景概述

    一.数据发布与订阅(配置中心) 二.负载均衡 三.命名服务(Naming Service) 四.分布式通知/协调 五.集群管理与Master选举 六.分布式锁 七.分布式事务 一.数据发布与订阅(配置 ...

  8. 【leetcode】575. Distribute Candies

    原题 Given an integer array with even length, where different numbers in this array represent differen ...

  9. django中解决跨域问题

    -跨域问题 -浏览器的:同源策略,浏览器拒绝不是当前域域返回的数据 -ip地址和端口号都相同才是同一个域 -如何解决: -CORS:跨域资源共享 -简单请求:发一次请求 -非简单请求:非简单请求是发送 ...

  10. 用js刷剑指offer(从尾到头打印链表)

    题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 牛客网链接 js代码 /*function ListNode(x){ this.val = x; this.next = nu ...