MySQL-MGR部署

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL-MGR部署

屏幕截图 2023-08-28 195743.png

目录

MGR介绍

1. 创建用户,修改hosts

2. 上传5.7.20软件到/usr/local解压

3. 环境变量

4. 配置文件说明

5. 初始化数据,并启动数据库节点

6. 3306节点加入GR

7. 3307加入GR:

8. 3308加入GR

网络限制


MGR介绍

基于传统异步复制和半同步复制的缺陷——数据的一致性问题无法保证,MySQL官方在5.7.17版本正式推出组复制(

MySQL Group Replication,简称MGR)。  

   由若干个节点共同组成一个复制组,一个事务的提交,必须经过组内大多数节点(N / 2 + 1)决议并通过,才

能得以提交。

   引入组复制,主要是为了解决传统异步复制和半同步复制可能产生数据不一致的问题。

   组复制依靠分布式一致性协

议(Paxos协议的变体),实现了分布式下数据的最终一致性,提供了真正的数据高可用方案。

================================================

1. 创建用户,修改hosts


hostnamectl set-hostname mysql 
useradd -M -s /sbin/nologin mysql
vim /etc/hosts

添加:

192.168.8.10 mysql

保存退出

2. 上传5.7.20软件到/usr/local解压


tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz 
mv mysql-5.7.20-linux-glibc2.12-x86_64/  /usr/local/mysql

3. 环境变量

vi /root/.bash_profile

添加:

export PATH=$PATH:/usr/local/mysql/bin

保存退出

source /root/.bash_profile
mkdir -p /data/3306/data  /data/3307/data /data/3308/data
chown -R mysql.mysql /data /usr/local/mysql

4. 配置文件说明

配置示例:

cat >> /data/3306/my.cnf << END
[mysqld]
user=mysql
datadir=/data/3306/data
basedir=/usr/local/mysql
port=3306
socket=/data/3306/mysql.sock
server_id=1
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="22d56f7c-dfe5-4eb1-a21a-cf9c27e8d625"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="192.168.8.10:33061"
loose-group_replication_group_seeds="192.168.8.10:33061,192.168.8.10:33062,192.168.8.10:33063"
loose-group_replication_bootstrap_group=off
END
cat >> /data/3307/my.cnf << END
[mysqld]
user=mysql
datadir=/data/3307/data
basedir=/usr/local/mysql
port=3307
socket=/data/3307/mysql.sock
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="22d56f7c-dfe5-4eb1-a21a-cf9c27e8d625"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="192.168.8.10:33062"
loose-group_replication_group_seeds="192.168.8.10:33061,192.168.8.10:33062,192.168.8.10:33063"
loose-group_replication_bootstrap_group=off
END
cat >> /data/3308/my.cnf << END
[mysqld]
user=mysql
datadir=/data/3308/data
basedir=/usr/local/mysql
port=3308
socket=/data/3308/mysql.sock
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="22d56f7c-dfe5-4eb1-a21a-cf9c27e8d625"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="192.168.8.10:33063"
loose-group_replication_group_seeds="192.168.8.10:33061,192.168.8.10:33062,192.168.8.10:33063"
loose-group_replication_bootstrap_group=off
END

组复制部分,配置文件介绍:

group_replication变量使用的loose-前缀是指示Server启用时尚未加载复制插件也将继续启动

transaction_write_set_extraction = XXHASH64

##指示Server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列

loose-group_replication_group_name="01e5fb97-be64-41f7-bafd-3afc7a6ab555"

##表示将加入或者创建的复制组命名为01e5fb97-be64-41f7-bafd-3afc7a6ab555

##可自定义(通过cat /proc/sys/kernel/random/uuid)

loose-group_replication_start_on_boot=off

##设置为Server启动时不自动启动组复制

loose-group_replication_local_address="192.168.8.10:33061"

##绑定本地的192.168.8.10及33061端口接受其他组成员的连接,IP地址必须为其他组成员可正常访问

loose-group_replication_group_seeds="192.168.8.10:33061,192.168.8.10:33062,192.168.8.10:33063"

##本行为告诉服务器当服务器加入组时,应当连接到192.168.8.10:33061,192.168.8.10:33062,192.168.8.10:33063

##这些种子服务器进行配置。本设置可以不是全部的组成员服务地址。

loose-group_replication_bootstrap_group = off

##配置是否自动引导组

loose-group_replication_ip_whitelist=”10.30.0.0/16,10.31.0..0/16,10.27.0.0/16″

##配置白名单,默认情况下只允许192.168.8.10连接到复制组,如果是其他IP则需要配置。

5. 初始化数据,并启动数据库节点


/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
/
usr/local/mysql/bin/mysqld --initialize-insecure  --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
mysqld_safe --defaults-file=/data/3306/my.cnf &
mysqld_safe --defaults-file=/data/3307/my.cnf &
mysqld_safe --defaults-file=/data/3308/my.cnf &

6. 3306节点加入GR

创建复制用户

mysql -S /data/3306/mysql.sock
set sql_log_bin=0;
grant replication slave,replication client on *.* to repl@'localhost' identified by '123';
grant replication slave,replication client on *.* to repl@'127.0.0.1' identified by '123';
grant replication slave,replication client on *.* to repl@'192.168.8.%' identified by '123';
flush privileges;
SET SQL_LOG_BIN=1;

注:如果为三台独立节点,需要将localhost、127.0.0.1和远程主机域都授权用户

开启分布式复制

change master to master_user='repl',master_password='123' for channel 'group_replication_recovery';

加载GR插件

install plugin group_replication soname 'group_replication.so';

show plugins;

启动复制程序:

set global group_replication_bootstrap_group=ON;

start group_replication;

检测组是否创建并已加入新成员:

select * from performance_schema.replication_group_members;

7. 3307加入GR:

创建复制用户

mysql -S /data/3307/mysql.sock
set sql_log_bin=0;
grant replication slave,replication client on *.* to repl@'localhost' identified by '123';
grant replication slave,replication client on *.* to repl@'127.0.0.1' identified by '123';
grant replication slave,replication client on *.* to repl@'192.168.8.%' identified by '123';
flush privileges;
SET SQL_LOG_BIN=1;

注:如果为三台独立节点,需要将localhost、127.0.0.1和远程主机域都授权用户

开启分布式复制

change master to master_user='repl',master_password='123' for channel 'group_replication_recovery';

加载GR插件

install plugin group_replication soname 'group_replication.so';

show plugins;

启动复制程序

start group_replication;

#检测组是否创建并已加入新成员

select * from performance_schema.replication_group_members;

注: 前面的用户密码修改和创建用户操作必须设置binlog不记录,执行后再打开,否则会引起START GROUP_REPLICATION执行报错:

ERROR 3092 (HY000): The server is not configured properly to be an active member of the group. Please see more details on error log.

解决方案是:根据提示打开group_replication_allow_local_disjoint_gtids_join选项,mysql命令行执行:

mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
mysql> start group_replication;

8. 3308加入GR

创建复制用户

mysql -S /data/3308/mysql.sock
set sql_log_bin=0;
grant replication slave,replication client on *.* to repl@'localhost' identified by '123';
grant replication slave,replication client on *.* to repl@'127.0.0.1' identified by '123';
grant replication slave,replication client on *.* to repl@'192.168.8.%' identified by '123';
flush privileges;
set sql_log_bin=1;

开启分布式复制

change master to master_user='repl',master_password='123' for channel 'group_replication_recovery';

加载GR插件

install plugin group_replication soname 'group_replication.so';

show plugins;

启动复制程序

start group_replication;

#检测组是否创建并已加入新成员

select * from performance_schema.replication_group_members;

--------------------------------------------------------------

网络限制

MGR 组通信引擎目前仅支持 IPv4 网络,并且对节点间的网络性能要求较高,低延迟、高带宽的网络是部署 MGR 集群的基础。

MGR 忽略表锁和命名锁,在 MGR 中 lock tables 、 unlock tables 、 get_lock 、 release_lock 等这些表锁和命名锁将被忽略。

MGR 多主模式中,默认不支持 SERIALIZABLE 隔离级别。

多主模式下,对同一个对象进行并发的有冲突的ddl 和 dml 操作导致这种冲突在部分成员节点中无法检测到,最终可能导致数据不一致。

多主模式下,不支持级联约束的外键,可能造成有冲突的操作无法检测。

不支持超大事务。

多主模式下可能导致死锁,比如select ...for update 在不同节点执行,由于多节点锁无法共享,很容易导致死锁。

不支持复制过滤,如果有节点设置了复制过滤,将影响节点间决议的达成。

MGR 最多支持 9 个节点,大于 9 个节点,将拒绝新节点的加入。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9天前
|
SQL Java 关系型数据库
MySQL原理简介—3.生产环境的部署压测
本文介绍了Java系统和数据库在高并发场景下的压测要点: 1. 普通系统在4核8G机器上每秒能处理几百个请求 2. 高并发下数据库建议使用8核16G或更高配置的机器 3. 数据库部署后需进行基准压测,以评估其最大承载能力 4. QPS和TPS的区别及重要性 5. 压测时需关注IOPS、吞吐量、延迟 6. 除了QPS和TPS,还需监控CPU、内存、磁盘IO、网络带宽 7. 影响每秒可处理并发请求数的因素包括线程数、CPU、内存、磁盘IO和网络带宽 8. Sysbench是数据库压测工具,可构造测试数据并模拟高并发场景 9. 在增加线程数量的同时,必须观察机器的性能,确保各硬件负载在合理范围
113 72
|
19天前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
1月前
|
SQL 关系型数据库 MySQL
docker-compose部署mysql8
使用docker-compose容器化部署mysql8
|
6月前
|
Kubernetes 关系型数据库 MySQL
k8s快速部署MySQL单机
k8s快速部署MySQL单机
|
2月前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
181 26
|
2月前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
80 5
|
5月前
|
关系型数据库 MySQL 数据安全/隐私保护
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置
|
4月前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
【10月更文挑战第1天】使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
125 3
|
4月前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库如何设置忽略表名大小写?
【10月更文挑战第1天】使用Docker部署的MySQL数据库如何设置忽略表名大小写?
619 1
|
5月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo