[MGR-Mysql的组复制集群]详细搭建部署过程

2023-12-04 21:48

本文主要是介绍[MGR-Mysql的组复制集群]详细搭建部署过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[MGR-Mysql]的组复制集群]详细搭建部署过程

 author:石鲁坤

1,关于MySQL Group Replication
 
基于组的复制(Group-basedReplication)是一种被使用在容错系统中的技术。Replication-group(复制组)是由能够相互通信的多个服务器(节点)组成的。
 
在通信层,Groupreplication实现了一系列的机制:比如原子消息(atomicmessage delivery)和全序化消息(totalorderingof messages)。
 
这些原子化,抽象化的机制,为实现更先进的数据库复制方案提供了强有力的支持。
  
MySQL Group Replication正是基于这些技术和概念,实现了一种多主全更新的复制协议。

简而言之,一个Replication-group就是一组节点,每个节点都可以独立执行事务,而读写事务则会在于group内的其他节点进行协调之后再commit。
 
因此,当一个事务准备提交时,会自动在group内进行原子性的广播,告知其他节点变更了什么内容/执行了什么事务。
 
这种原子广播的方式,使得这个事务在每一个节点上都保持着同样顺序。
 
这意味着每一个节点都以同样的顺序,接收到了同样的事务日志,所以每一个节点以同样的顺序重演了这些事务日志,最终整个group保持了完全一致的状态。
 
然而,不同的节点上执行的事务之间有可能存在资源争用。这种现象容易出现在两个不同的并发事务上。
 
假设在不同的节点上有两个并发事务,更新了同一行数据,那么就会发生资源争用。
 
面对这种情况,GroupReplication判定先提交的事务为有效事务,会在整个group里面重演,后提交的事务会直接中断,或者回滚,最后丢弃掉。
 
因此,这也是一个无共享的复制方案,每一个节点都保存了完整的数据副本。这个复制方案,在某种程度上,和数据库状态机(DBSM)的Replication方法比较类似。
 
 MGR的限制
仅支持InnoDB表,并且每张表一定要有一个主键,用于做write set的冲突检测;
必须打开GTID特性,二进制日志格式必须设置为ROW,用于选主与write set
COMMIT可能会导致失败,类似于快照事务隔离级别的失败场景
目前一个MGR集群最多支持9个节点
不支持外键于save point特性,无法做全局间的约束检测与部分部分回滚
二进制日志不支持binlog event checksum
 

2,安装mysql 5.7.18
 
在三台db服务器上面设置/etc/hosts映射,如下:
 
192.168.117.129  mgr1
192.168.117.130  mgr2
192.168.117.131  mgr3
 
安装的数据库服务器:

在每个节点上执行安装:

1、下载二进制软件包:
  mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

2、添加MySQL用户和组:
  [root@localhost ~]# userdel mysql  (因为是新系统,所以就把现有的MySQL用户给删除了)
  [root@localhost ~]# groupadd mysql
  [root@localhost ~]# useradd -g mysql mysql
  [root@localhost ~]# passwd mysql     (MySQL密码要设置的复杂一点,或者在创建用户的时候设置不让登陆系统)

3、创建安装MySQL目标,并解压软件到指定目录
  [root@localhost ~]# mkdir -p /data/mysql/db_file  在mysql 下创建bin_log  relay_log(从节点) log 目录
  [root@localhost ~]# chown -R mysql:mysql /data
  [root@localhost ~]# tar -xvf  mysql-5.7.18-linux-glibc2.5-x86_64 
  [root@localhost ~]# mv mysql-5.7.18-linux-glibc2.5-x86_64/ /usr/local/mysql
  [root@localhost ~]# chown -R mysql:mysql /usr/local/mysql

4、切换MySQL用户,并初始化数据库
  [root@localhost ~]# su - mysql
  [mysql@localhost ~]$/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/db_file/

my.cnf的详细配置:

[root@localhost ~]# cat /etc/my.cnf 
[client]
port = 3306
socket = /tmp/mysql.sock
 
[mysqld]
port = 3306
socket = /tmp/mysql.sock
back_log = 80
basedir = /usr/local/mysql
datadir = /data/mysql/db_file
#skip-grant-tables
#-------------------gobal variables------------#
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 = /usr/local/mysql/log/mysql-bin
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.117.129:33061'
loose-group_replication_group_seeds ='192.168.117.129:33061,192.168.117.130:33061,192.168.117.131:33061'
loose-group_replication_bootstrap_group

这篇关于[MGR-Mysql的组复制集群]详细搭建部署过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/455023

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二