MySQL的半同步模式

embedded/2024/12/22 19:08:02/

MySQL 的半同步复制

MySQL 的半同步复制(Semi-Synchronous Replication, SSR)是一种增强的复制机制,旨在减少主服务器(Master)发生故障时的数据丢失风险,并在一定程度上提高复制的可靠性。半同步复制结合了异步复制和全同步复制的优点,既提高了系统的可用性也增强了数据的一致性。
在这里插入图片描述

半同步复制的工作原理

在传统的异步复制中,主服务器将事务提交到二进制日志(bin-log)后,会立即向客户端返回成功响应,而不管从服务器(Slave)是否已经接收到该事务。这种方式虽然提供了较高的系统吞吐量,但在主服务器突然宕机的情况下,尚未被从服务器接收的事务可能会丢失。

在全同步复制中,主服务器只有在至少一个从服务器确认接收到事务后才会返回成功响应。这种方法虽然保证了数据的一致性,但由于等待从服务器确认的时间可能会造成性能下降。

半同步复制则试图在这两者之间找到平衡。在这种模式下,主服务器在提交事务前会等待至少一个从服务器确认接收到了该事务的二进制日志事件。一旦得到确认,主服务器就会向客户端返回成功响应,并继续处理下一个事务。这样做的好处是,在大多数情况下,可以保证至少有一个从服务器拥有最新的数据,从而减少了数据丢失的风险。

1.用户线程写入完成后master中的dump会把日志推送到slave端
2.slave中的io线程接收后保存到relaylog中继日志
3.保存完成后slave向master端返回ack
4.在未接受到slave的ack时master端时不做提交的,一直处于等待当收到ack后提交到存储引擎
5.在5.6版本中用到的时after_commit模式,after_commit模式时先提交在等待ack返回后输出ok

配置半同步复制

要配置 MySQL 的半同步复制,您需要对主服务器和从服务器进行一些特定的配置。以下是基本的配置步骤:

主服务器配置
  1. 安装半同步插件:确保您的 MySQL 版本支持半同步插件。对于 MySQL 5.7 及更高版本,半同步复制插件通常是默认包含的。如果您的 MySQL 版本不包含此插件,您需要手动安装。

  2. 配置主服务器:编辑 MySQL 的配置文件(通常是 my.cnfmy.ini),添加半同步复制相关的配置项。

[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=ON
rpl_semi_sync_master_enabled=1 
symbolic-links=0

rpl_semi_sync_master_enabled=1启用半同步功能
3.安装半同步插件

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

4.查看插件情况

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
-> FROM INFORMATION_SCHEMA.PLUGINS
-> WHERE PLUGIN_NAME LIKE '%semi%';
+----------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE |
+----------------------+---------------+
1 row in set (0.01 sec)

5.打开半同步功能

SET GLOBAL rpl_semi_sync_master_enabled = 1;
从服务器配置
  1. 安装半同步插件:安装半同步复制插件。
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
  1. 配置从服务器:同样编辑 MySQL 的配置文件,添加半同步复制相关的配置项。
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=ON
rpl_semi_sync_master_enabled=1 #开启半同步功能
symbolic-links=0
  • rpl_semi_sync_slave_enabled: 启用半同步复制。
  1. 重启 MySQL 服务:重启 IO线程,半同步服务才能生效。
 STOP SLAVE IO_THREAD; START SLAVE IO_THREAD; 
设置复制关系

完成上述配置后,您需要按照常规的主从复制配置步骤来建立主从复制关系。包括创建复制用户、获取主服务器的二进制日志文件名和位置、初始化从服务器数据、配置从服务器指向主服务器等。

测试半同步复制

  • 检查状态:您可以使用 SHOW VARIABLES LIKE '%semi_sync%'; 来检查半同步复制的相关变量是否已被正确设置。
  • 监控状态:通过 SHOW STATUS LIKE '%semi_sync%'; 查看半同步复制的运行状态。

注意事项

  • 性能影响:半同步复制会增加主服务器的延迟,因为主服务器需要等待从服务器的确认才能继续处理下一个事务。不过,由于只需要等待至少一个从服务器的确认,所以性能影响相对较小。
  • 配置灵活性:您可以选择等待一个以上的从服务器确认。这可以通过修改 rpl_semi_sync_master_wait_for_slave_count 变量来实现。
  • 故障转移:半同步复制本身并不提供自动故障转移的功能。您需要另外配置故障检测和自动切换机制,如使用 MySQL Group ReplicationPercona XtraDB Cluster 等解决方案。

http://www.ppmy.cn/embedded/103908.html

相关文章

Java设计模式【解释器模式】-行为型

1. 介绍 1.1 什么是解释器模式? 解释器模式(Interpreter Pattern)是一种行为型设计模式,它为某种语言定义其文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子。通俗来说,解释…

书生大模型实战营闯关记录----第十一关:LMDeploy 量化部署进阶实践 KV cache量化部署,W4A16 模型量化和部署

文章目录 1 配置LMDeploy环境1.1 环境搭建1.2 InternStudio环境获取模型1.3 LMDeploy验证启动模型文件 2 LMDeploy与InternLM2.5 2.1 LMDeploy API部署InternLM2.52.1.1 启动API服务器 2.1.2 以命令行形式连接API服务器 2.1.3 以Gradio**网页形式连接API服务器** 2.2 LMDeploy…

Kafka分布式集群部署实战:跨越理论,直击生产环境部署难题与解决方案,性能调优、监控与管理策略大揭秘,轻松上手分布式消息中间件

本文介绍kafka的集群如何部署和安装,1-4章理论知识,第5章详解集群的部署,部署Kafka之前需要先部署好分布式的Zookeeper,不喜欢理论的可以直接看第5章,欢迎大家一起探讨技术! Zookeeper集群部署参考文章&…

Python | Leetcode Python题解之第388题文件的最长绝对路径

题目&#xff1a; 题解&#xff1a; class Solution:def lengthLongestPath(self, input: str) -> int:ans, i, n 0, 0, len(input)level [0] * (n 1)while i < n:# 检测当前文件的深度depth 1while i < n and input[i] \t:depth 1i 1# 统计当前文件名的长度l…

【Nginx】若依用nginx部署,prod-api没有成功转发到8080端口

> 今天在工位部署若依好久都没有找到问题&#xff0c;前端一直提示404/405&#xff0c;说prod-api没有成功转发&#xff0c;改了很多端口都没解决问题&#xff0c;后来改了url就成功了 - 问题如题 - 解决办法&#xff1a; - 首先确保nginx的配置文件和若依官网的一样&…

IFRS 17是什么?

IFRS 17 (International Financial Reporting Standard 17) 是一项由国际会计准则理事会&#xff08;IASB&#xff09;发布的新会计准则&#xff0c;专门用于规范保险合同的会计处理。这项准则旨在提高保险合同财务报告的透明度、一致性和可比性&#xff0c;并替代之前的临时性…

深入调研亚马逊云科技AI平台Amazon Bedrock热门开发功能

国际数据公司&#xff08;IDC&#xff09;在2024 年 8 月发布了《 中国大模型平台市场份额&#xff0c; 2023 &#xff1a;大模型元年——初局 》调研报告 。IDC的数据显示&#xff0c;2023年中国大模型平台及相关应用市场规模达惊人的17.65亿元人民币&#xff0c;且科学计算大…

【测试】——开发模型与测试模型

&#x1f4d6; 前言&#xff1a;在软件开发过程中&#xff0c;理解和应用合适的开发模型与测试模型至关重要。本文将详细介绍几种常见的开发模型&#xff0c;如瀑布模型、螺旋模型、增量模型和敏捷过程&#xff0c;以及测试模型如V模型和W模型。 目录 &#x1f552; 1. 开发模型…