MySQL8基于GTID以及VIP实现高可用主从架构

2024-06-10 23:04

本文主要是介绍MySQL8基于GTID以及VIP实现高可用主从架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

jdbc客户端配置高可用以及故障切换

jdbc客户端实现故障切换

MySQL Connector/J 支持服务器故障转移。当底层活动连接发生与连接相关的错误时,就会发生故障转移

参考官网地址
jdbc:mysql://[primary host][:port],[secondary host 1][:port]

jdbc客户端实现故障切换

Connector/J 长期以来一直提供一种有效方法,用于在集群或主从复制部署中跨多个 MySQL 服务器实例分配读/写负载
参考 官网网站
jdbc:mysql:loadbalance://[host1][:port],[host2][:port]

服务端高可用架构

MySQL支持的复制方式

  • binlog复制方式【基于二进制日志binlog复制】
  • GTID复制方式【基于事务】

基于binlog主从复制原理

binlog主从复制原理

1、主库会生成多个 binlog 日志文件。
2、从库的 I/O 线程请求指定文件和指定位置的 binlog 日志文件(位点)。
3、主库 dump 线程获取指定位点的 binlog 日志。
4、主库按照从库发送给来的位点信息读取 binlog,然后推送 binlog 给从库。
5、从库将得到的 binlog 写到本地的 relay log (中继日志) 文件中。
6、从库的 SQL 线程读取和解析 relay log 文件。
7、从库的 SQL 线程重放 relay log 中的命令。

binlog 配置方式
主库上执行SHOW MASTER STATUS查看同步的文件以及偏移量

从库设置主库的地址以及指定同步的文件以及偏移量
change replication source to source_host='xxx', source_user='root', source_password='root', source_port=3306, source_log_file='mysql-bin.000003', source_log_pos=12, source_connect_retry=30;

binlog 复制缺点

1、首次开启主从复制步骤复杂

  • 找到主库的 binlog 位点。
  • 设置从库的 binlog 位点。
    2、恢复主从复制的步骤负责
    需要找到从库线程停止的位点

GTID 复制原理

GTID是一个基于原始mysql服务器生成的一个已经被成功执行的全局事务ID,它由服务器ID以及事务ID组合而成

GTID 的优势

  • 更简单的实现 failover,不用以前那样在需要找位点(log_file 和 log_pos)。
  • 更简单的搭建主从复制。
  • 比传统的复制更加安全。
  • GTID 是连续的没有空洞的,保证数据的一致性,零丢失。

GTID结构

GTID表示为一对坐标,由冒号(:)分隔,如下所示:
GTID = source_id:transaction_id

  • source_id标识source服务器,即源服务器唯一的server_uuid,由于GTID会传递到replica,所以也可以理解为源ID。
  • transaction_id是一个序列号,由事务在源上提交的顺序决定。序列号的上限是有符号64位整数(2^63-1)

GTID工作原理

  • 主库计算主库 GTID 集合和从库 GTID 的集合的差集,主库推送差集 binlog 给从库。
  • 当从库设置完同步参数后,主库 A 的 GTID 集合记为集合 x,从库 B 的 GTID 集合记为 y

GTID工作原理

  • 从库 B 指定主库 A,基于主备协议建立连接。
  • 从库 B 把集合 y 发给主库 A。
  • 主库 A 计算出集合 x 和集合 y 的差集,也就是集合 x 中存在,集合 y 中不存在的 GTID 集合。比如集合 x 是 1~100,集合 y 是 1~90,那么这个差集就是 91~100。这里会判断集合 x 是不是包含有集合 y 的所有 GTID,如果不是则说明主库 A 删除了从库 B 需要的 binlog,主库 A 直接返回错误。
  • 主库 A 从自己的 binlog 文件里面,找到第一个不在集合 y 中的事务 GTID,也就是找到了 91。
  • 主库 A 从 GTID = 91 的事务开始,往后读 binlog 文件,按顺序取 binlog,然后发给 B。
  • 从库 B 的 I/O 线程读取 binlog 文件生成 relay log,SQL 线程解析 relay log,然后执行 SQL 语句。

GTID以及VIP实现高可用

GTID以及VIP实现高可用
实现方案:
选择配置比较高的一台为主服务器,提供读写功能,另一台 从服务器作为 BackUP 热备,同时通过复制与主服务器数据保持一致,二者均开启 bin-log 功能。Keepalived 自带服务监控功能,实现故障时 VIP 的无缝切换,当活跃节点出现故障时,通过 VIP+keepalived脚本执行实现向另一台主数据库的切换,以此实现 MySQL 架构的高可用

从节点一般会设置为只读模式,线上一般通过keeplive实现高可用
可参考脚本,如果主节点宕机,将从节点的只读变成可读可写,使用高可用

   STATUS=$(mysqladmin -uroot -proot ping|grep -c alive)if [ $STATUS -eq 1 ];thenmysql -uroot -proot -e stop slave;set global super_read_only=0;set global read_only=0;"

这篇关于MySQL8基于GTID以及VIP实现高可用主从架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Python实现PDF按页分割的技术指南

《Python实现PDF按页分割的技术指南》PDF文件处理是日常工作中的常见需求,特别是当我们需要将大型PDF文档拆分为多个部分时,下面我们就来看看如何使用Python创建一个灵活的PDF分割工具吧... 目录需求分析技术方案工具选择安装依赖完整代码实现使用说明基本用法示例命令输出示例技术亮点实际应用场景扩

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使