完整教程:MySQL 5.7 主主复制 + Keepalived 高可用配置实例

news/2025/10/4 20:31:07/文章来源:https://www.cnblogs.com/lxjshuju/p/19125899

前言

环境准备

一、MySQL 5.7 主主复制配置

1. 修改 my.cnf 核心配置

2. 创建复制账号

3. 配置主主复制

4. 测试复制状态

二、Keepalived 编译安装与配置

1. 编译安装 Keepalived

2. Keepalived 配置文件示例

3. MySQL 状态检测脚本

4. 启动 Keepalived

三、VIP 漂移测试

四、常见问题

五、Keepalived 配置参数详解

1️⃣ 全局配置 global_defs

2️⃣ VRRP 脚本配置 vrrp_script

3️⃣ VRRP 实例配置 vrrp_instance

4️⃣ VIP 漂移逻辑

总结

前言

在高可用数据库架构中,主主复制(Master-Master Replication) 可以实现数据双向同步,而 Keepalived 则提供 VIP 漂移机制,保证在主节点故障时,客户端仍能通过虚拟 IP 访问数据库,从而实现业务连续性。

本文整理了一个 MySQL 5.7 主主复制 + VIP 漂移高可用环境 的完整配置流程,包括配置参数详解、Keepalived 编译安装、健康检查脚本等,帮助运维快速搭建可靠的高可用 MySQL 环境。


环境准备

  • 两台 MySQL 节点:mysql1mysql2

  • mysql1:172.16.0.110 | mysql2:172.16.0.115

  • Keepalived 用于 VIP 漂移

  • 操作系统:CentOS 7

  • MySQL 已通过 RPM 安装好

注:RPM安装mysql请阅读https://blog.csdn.net/kirito0000/article/details/152375295?spm=1001.2014.3001.5501

一、MySQL 5.7 主主复制配置

1. 修改 my.cnf 核心配置

路径:/etc/my.cnf

#mysql1
[mysqld]
datadir=/var/lib/mysql              
socket=/var/lib/mysql/mysql.sock
port=3306
bind-address=0.0.0.0               
default-storage-engine=INNODB       
character-set-server=utf8
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
​
# 二进制日志配置(主主复制必须)
log-bin=mysql-bin                   
binlog_format=MIXED                 
sync_binlog=1                        
expire_logs_days=7                   
​
# 主从复制核心参数
master_info_repository=TABLE         
relay_log_info_repository=TABLE      
relay_log_recovery=ON                
​
# 自增冲突控制(主主复制)
auto_increment_increment=2           
auto_increment_offset=1              
​
server-id=1
​
#mysql2
[mysqld]
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
port = 3306
bind-address = 0.0.0.0
default-storage-engine=INNODB
character-set-server=utf8
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
validate_password_policy=LOW   
validate_password_length=6       
​
log-bin=mysql-bin 
binlog_format=MIXED 
sync_binlog=1
expire_logs_days=7
​
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
​
auto_increment_increment = 2   
auto_increment_offset = 2      
​
server-id=2

参数详解:

参数含义
log-bin开启二进制日志,用于复制
binlog_format设置二进制日志格式(STATEMENT/ROW/MIXED)
sync_binlog日志同步策略,保证主主一致性
expire_logs_days自动清理旧日志
server-id每台主机唯一标识,主主复制必须不同
auto_increment_increment/offset防止自增主键冲突,主主必配
master_info_repository/relay_log_info_repository复制信息存储位置,建议表存储更可靠
relay_log_recovery保证中继日志异常恢复时不会丢数据

2. 创建复制账号

#两个mysql都要创建
CREATE USER 'repl'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

3. 配置主主复制

注意:MASTER_LOG_FILE和MASTER_LOG_FILE通过show master status;查看,这里都是写对方的

  • mysql1

CHANGE MASTER TOMASTER_HOST='172.16.0.115',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=313;
START SLAVE;
  • mysql2

CHANGE MASTER TOMASTER_HOST='172.16.0.110',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=313;
START SLAVE;

4. 测试复制状态

SHOW SLAVE STATUS\G

确认 Slave_IO_RunningSlave_SQL_Running 均为 Yes


二、Keepalived 编译安装与配置

1. 编译安装 Keepalived

# 安装依赖
yum install -y gcc gcc-c++ make openssl-devel pcre-devel libnl3-devel
​
# 下载并解压
cd /opt
wget https://www.keepalived.org/software/keepalived-2.2.5.tar.gz
tar zxvf keepalived-2.2.5.tar.gz
cd keepalived-2.2.5
​
# 编译安装
./configure --prefix=/usr/local/keepalived
make && make install
​
# 创建配置目录
mkdir -p /usr/local/etc/keepalived
mkdir -p /etc/keepalived     # 存放检测脚本

2. Keepalived 配置文件示例

路径:/usr/local/etc/keepalived/keepalived.conf

vim /usr/local/etc/keepalived/keepalived.conf
#MASTER
global_defs {  router_id LVS_MASTER  #名称标记为master,名字随便取  vrrp_gna_interval 0
}
vrrp_script check_mysql {   script "/etc/keepalived/check_mysql.sh"   interval 2      # 每 2 秒检测一次   rise 1          # 连续 1 次成功才认为 UP   fall 2          # 连续 2 次失败才认为 DOWN,避免短暂波动   weight -50
}
​
vrrp_instance VI_1 {   state MASTER   interface ens33   virtual_router_id 99   priority 200           # MASTER 节点优先级   advert_int 1   virtual_ipaddress {       172.16.0.250   }   track_script {       check_mysql   }
} 
​
#BACKUP
global_defs {  router_id LVS_SLAVE  #名称标记为slave,名字随便取  vrrp_gna_interval 0
}
vrrp_script check_mysql {   script "/etc/keepalived/check_mysql.sh"   interval 2      # 每 2 秒检测一次   rise 1          # 连续 1 次成功才认为 UP   fall 2          # 连续 2 次失败才认为 DOWN,避免短暂波动
}
​
vrrp_instance VI_1 {   state BACKUP   interface ens33   virtual_router_id 99   priority 199           # BACKUP 节点优先级   advert_int 1   virtual_ipaddress {       172.16.0.250   }   track_script {       check_mysql   }
}

3. MySQL 状态检测脚本

路径:/etc/keepalived/check_mysql.sh

vim /etc/keepalived/check_mysql.sh
#!/bin/bash
#以下给出两种可选检测方案,自行选择
-------------------------------------------------------------------------
#检测方案1
# 检查 MySQL 是否监听 3306
#if ss -lnt | grep -q ":3306"; then
#    exit 0  # MySQL up
#else
#    exit 1  # MySQL down
#fi
-------------------------------------------------------------------------
#检测方案2
echo "$(date) running script" >> /tmp/check_mysql.log
#mysqladmin ping -h 127.0.0.1 -uroot -p123456 --ssl-mode=DISABLED > /dev/null 2>&1 (如果报错ssl尝试这条)
mysqladmin ping -h 127.0.0.1 -uroot -p123456 > /dev/null 2>&1
if [ $? -ne 0 ]; then   echo "$(date) MySQL down" >> /tmp/check_mysql.log   exit 1
fi
echo "$(date) MySQL up" >> /tmp/check_mysql.log
exit 0

4. 启动 Keepalived

systemctl start keepalived

三、VIP 漂移测试

  1. 停掉 master 节点 MySQL:

systemctl stop mysqld
  1. 检查备节点 VIP 是否漂移:

ip a
  1. 恢复 MySQL:

systemctl start mysqld

VIP 会重新回到原 master(如果 priority 较高)。


四、常见问题

  1. MySQL SSL 报错

解决方法:脚本加 --ssl-mode=DISABLED

  1. Keepalived “script is already running”

原因:VRRP 同步多次执行脚本,建议脚本内加互斥或使用 systemctl 管理 Keepalived

  1. VIP 不漂移

  • 检查 track_script 是否正确引用

  • 确保 MySQL 检测脚本能准确返回状态

  • 检查 Keepalived 权限和 SELinux 状态(建议 Permissive)


五、Keepalived 配置参数详解

1️⃣ 全局配置 global_defs

global_defs {   router_id LVS_MASTER    # 当前节点标识(唯一名称),用于日志和 VRRP 标识   vrrp_gna_interval 0    # VRRP通告组播间隔(通常保持0即可)
}

参数说明

参数含义
router_id节点标识,随便取,但要唯一。VRRP 日志中会显示该 ID。
vrrp_gna_interval保留字段,可配置 VRRP Gratuitous ARP 的间隔,一般默认 0 即可。

2️⃣ VRRP 脚本配置 vrrp_script

vrrp_script check_mysql {   script "/etc/keepalived/check_mysql.sh"   interval 2   rise 1   fall 2   weight -50
}

参数说明

参数含义
script指定要执行的脚本路径,用于健康检查(如 MySQL 是否可用)
interval脚本执行间隔,单位秒
rise连续执行成功达到次数后认为服务恢复
fall连续执行失败达到次数后认为服务不可用
weight成功或失败时对节点优先级的增减值(负值表示失败降低优先级)

示例:如果 priority=150weight=-50,脚本失败后优先级变成 100,VIP 会漂移到 Backup 节点。


3️⃣ VRRP 实例配置 vrrp_instance

vrrp_instance VI_1 {   state MASTER   interface ens33   virtual_router_id 50   priority 200   advert_int 1   authentication {       auth_type PASS       auth_pass 1234   }   virtual_ipaddress {       172.16.0.250   }   track_script {       check_mysql   }
}

参数说明

参数含义
state当前节点状态:MASTERBACKUP
interface绑定虚拟 IP 的网卡名称
virtual_router_idVRRP 实例 ID(0-255),Master 和 Backup 要相同,表示同一组 VIP
priorityVRRP 优先级,Master 节点必须大于 Backup 节点
advert_intVRRP 通告间隔(秒),用于 Master 向 Backup 发送心跳
authenticationVRRP 认证,防止非法节点加入
virtual_ipaddressVIP 地址,可配置多个
track_script绑定健康检查脚本,脚本结果会影响优先级

4️⃣ VIP 漂移逻辑

  • Master 节点启动时,优先级最高,持有 VIP。

  • 如果 track_script 脚本失败且优先级低于 Backup 节点,VIP 漂移。

  • 当 Master 脚本恢复,优先级重新计算,VIP 可漂回。

总结

通过本文步骤:

  • 配置了 MySQL 5.7 主主复制,解决自增主键冲突

  • 配置 Keepalived 实现 VIP 漂移,提高数据库高可用性

  • 使用脚本自动监控 MySQL 服务状态,自动停止/启动 Keepalived

  • 解决 MySQL 5.7 SSL 报错问题,保证检测脚本可靠运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

题解:P14074 [GESP202509 五级] 有趣的数字和

感觉这题真的不止黄(可能是我太菜了<(_ _)> 这道题会让我们联想到数位dp(其实没有多少关系(@_@) 这里还是借用的老师的思路 计算l-r之间有趣数字的个数,也就是0-r之间有趣数字的个数减去0-(l-1)之间有…

完整教程:数据结构从入门到实战————栈

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

解码Huffman 编码与 Huffman 树

为什么需要 Huffman 编码?—— 从 “编码浪费” 说起 在数据通信或存储中,我们需要将字符转换成二进制码(如 ASCII 码)。但常规编码(如 ASCII)存在一个问题:无论字符出现频率高低,都用相同长度的编码(比如 AS…

『回忆录』初三来高中的半学期

搬运自洛谷小号。看到过去的自己莫名地想哭。前情摘要:CSP2023S 90 分有关考试 估计在 560 左右,算是很差的。 语文:[80,100] 数学:[105,114] 英语:127 物理:[62,64] 化学:[87,88] 生物:97 总分:[560,580]目标…

怎么维护好网站.net网站 还原数据库备份

数据中台的定义 在云开发中&#xff0c;数据中台是一个综合性的数据管理和服务平台&#xff0c;它集成了数据管理、数据治理、数据服务等多个功能&#xff0c;并基于云计算技术架构而建立。数据中台的核心目标是为企业提供稳定、高效、安全的数据支持和服务&#xff0c;进而推…

10.1 容器云部署准备(一) - 实践

10.1 容器云部署准备(一) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

企业网站必须备案吗h5页面可以跳转到小程序吗

思路&#xff1a; 需求1&#xff1a;检测用户输入的字数 注册input事件 将输入文本长度赋值给对应的数值 需求2&#xff1a;输入不能为空 点击按钮之后判断 如果输入为空&#xff0c;则提示不能输入为空&#xff0c;并直接return 为了防止无意义的一些输入&#xff0c;利用字符…

常州网站建设怎么样网站之家查询

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 在前端开发中&#xff0c;有时候一些业务场景中&#xff0c;我们有需求要去实现excel的预览和打印功能&#xff0c;本文在vue3中如何实现Excel文件的预览和打印。 预览excel 关于实现excel文档在…

dede可以做商城网站吗一个新产品怎么推广

作者&#xff1a;Liuweifei 硬盘结构 1.硬盘结构 ​ 硬盘大致由盘片、读写头&#xff08;磁头&#xff09;、马达、底座、电路板等几大项组合而成。 ​ 硬盘的每一个盘片都有两个盘面&#xff0c;即上、下盘面。每个盘面都能利用&#xff0c;都可以存储数据&#xff0c;成为…

建筑工程招聘网站哪个好建站模板招募设计师

102. 最佳牛围栏 农夫约翰的农场由N块田地组成&#xff0c;每块地里都有一定数量的牛,其数量不会少于1头&#xff0c;也不会超过2000头。 约翰希望用围栏将一部分连续的田地围起来&#xff0c;并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。 围起区域内至少需要包…

关于缓冲区以及输出方式

先有个前置知识:CPU 速度差不多是 I/O 设备的 \(10^6\) 倍这样 CPU 访问内存的顺序:L1 缓存 → L2 缓存 → L3 缓存 → 主内存 → I/O设备 系统调用发生在「主内存 → I/O 设备」这一步中 缓冲区通常设置在主内存中为…

asp网站可运行jsp吗wordpress接入安卓

在计算机使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中“找不到msvcr120.dll”就是常见的一种。那么&#xff0c;找不到msvcr120.dll是什么意思呢&#xff1f; 一&#xff0c;msvcr120.dll文件概述 msvcr120.dll 是 Microsoft Visual C Redistributable …

详细介绍:2025三掌柜赠书活动第三十五期 AI辅助React Web应用开发实践:基于React 19和GitHub Copilot

详细介绍:2025三掌柜赠书活动第三十五期 AI辅助React Web应用开发实践:基于React 19和GitHub Copilot2025-10-04 20:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: norm…

网站推广设计制作专做女装拿货的网站

目录 1、向量点乘 2、相似度计算举例 3、QKV分析 4、整体流程 (1) 首先从词向量到Q、K、V (2) 计算Q*&#xff08;K的转置&#xff09;&#xff0c;并归一化之后进行softmax (3) 使用刚得到的权重矩阵&#xff0c;与V相乘&#xff0c;计算加权求和。 5、多头注意力 上面…

深圳建设银行宝安支行网站市场营销在线课程

1. JVM快速入门 从面试开始&#xff1a; 请谈谈你对JVM 的理解&#xff1f;java8 的虚拟机有什么更新&#xff1f; 什么是OOM &#xff1f;什么是StackOverflowError&#xff1f;有哪些方法分析&#xff1f; JVM 的常用参数调优你知道哪些&#xff1f; 内存快照抓取和MAT分…

coduck模拟赛一 补题报告 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

RippleNet: Propagating User Preferences on the Knowledge Graph for Recommender Systems

1.知识图谱嵌入的基本过程,为什么难以直观有效表达项目间的关系 1.1基本过程(知识图谱嵌入)构建三元组: 将知识图谱表示为(头实体h, 关系r, 尾实体t)集合。向量化建模: 为每个实体、关系分配可学习的向量/矩阵,常见…

特地拎出来的总结

这篇总结不太一样,为了纪念和我爸喋喋不休吵了近3h的时间和教训,用Deepseek共同完成 : 题目 T674176 T2-任务task 题目描述 时间限制: 2.0 秒 空间限制: 512 MiB 有 \(n\) 个任务,第 \(i\) 个任务需要占据 \([l_…

在线做漫画的网站wordpress多用户评论

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

漏洞赏金计划的困境:i915漏洞与ChromeOS、Intel赏金项目剖析

本文深入探讨了漏洞赏金计划存在的系统性问题,通过作者亲身经历的i915驱动漏洞案例,揭示了Google和Intel在处理安全漏洞报告过程中的沟通不畅、缺乏透明度等问题,并分析了漏洞赏金计划中权力失衡的根本原因。漏洞赏…