MySQL-MGR部署

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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 个节点,将拒绝新节点的加入。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
Kubernetes Cloud Native 关系型数据库
提升数据安全与性能,掌握Helm一键部署MySQL 8.0主从技巧
【4月更文挑战第9天】提升数据安全与性能,掌握Helm一键部署MySQL 8.0主从技巧
279 0
|
22天前
|
Kubernetes 关系型数据库 MySQL
k8s快速部署MySQL单机
k8s快速部署MySQL单机
|
17天前
|
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
|
4月前
|
关系型数据库 MySQL 网络安全
Docker部署MySQL,2024网络安全通用流行框架大全
Docker部署MySQL,2024网络安全通用流行框架大全
|
18天前
|
存储 关系型数据库 MySQL
使用Docker快速部署Mysql服务器
本文介绍了如何使用Docker快速部署MySQL服务器,包括下载官方MySQL镜像、启动容器、设置密码、连接MySQL服务器以及注意事项。
101 18
|
29天前
|
关系型数据库 MySQL 应用服务中间件
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
这篇文章介绍了如何在Windows 7系统上搭建PHP、MySQL和Apache环境,并部署ECShop项目,包括安装配置步骤、解决常见问题以及使用XAMPP集成环境的替代方案。
37 1
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
|
1月前
|
存储 关系型数据库 MySQL
[mysql]MGR简介与部署
[mysql]MGR简介与部署
|
28天前
|
关系型数据库 MySQL 测试技术
使用docker部署MySQL测试环境
使用docker部署MySQL测试环境
19 0
|
28天前
|
固态存储 关系型数据库 MySQL
mysql多实例一键部署
mysql多实例一键部署
19 0
|
30天前
|
Kubernetes 关系型数据库 MySQL
k8s练习--通过NFS+PV+PVC+POD,部署一个MySQL服务,并将MySQL的数据进行持久化存储
本文档介绍了如何使用Kubernetes (K8s)、NFS、PersistentVolume (PV)、PersistentVolumeClaim (PVC)和Pod来部署并实现MySQL服务的数据持久化存储。Kubernetes是一个用于自动化部署、扩展和管理容器化应用的强大平台。NFS作为一种网络文件系统协议,能够使Kubernetes集群中的Pod跨节点访问共享文件。PV和PVC机制则提供了持久化的存储解决方案,确保数据即使在Pod生命周期结束后仍得以保留。

热门文章

最新文章