当前位置: 首页 > news >正文

mysql主从复制搭建,并基于‌Keepalived + VIP实现高可用

以下是基于 ‌Keepalived + VIP‌ 实现 MySQL 主从复制高可用的详细步骤,涵盖主从复制搭建与故障自动切换:

一、MySQL 主从复制搭建(基础步骤回顾)

1. ‌主库(Master)配置‌

修改配置文件‌ /etc/my.cnf:

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=test_db  # 指定需要同步的数据库(可选)

重启 MySQL:systemctl restart mysqld

创建复制账号‌:

CREATE USER 'repl_user'@'%' IDENTIFIED BY 'Repl_Pass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;

查看主库状态‌:

SHOW MASTER STATUS;  -- 记录 File(如 mysql-bin.000001)和 Position(如 154)

2. ‌从库(Slave)配置‌

修改配置文件‌ /etc/my.cnf:

[mysqld]
server-id=2
relay-log=mysql-relay-bin
read_only=1  # 从库只读(可选)

重启 MySQL:systemctl restart mysqld

导入主库数据‌(若主库已有数据):

# 主库导出数据
mysqldump -uroot -p --databases test_db > /tmp/backup.sql
# 从库导入数据
mysql -uroot -p < /tmp/backup.sql

配置主从链路‌:

CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl_user',
MASTER_PASSWORD='Repl_Pass123!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;START SLAVE;

验证复制状态‌:

SHOW SLAVE STATUS\G  
-- 确保 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes

二、Keepalived + VIP 高可用配置

1. ‌环境规划‌

角色‌IP‌VIP‌
MySQL Master192.168.1.10192.168.1.100
MySQL Slave192.168.1.11

2. ‌Install Keepalived‌

在两台 MySQL 节点安装 Keepalived:

yum install keepalived -y  # CentOS
apt install keepalived -y  # Ubuntu

3. ‌配置 Keepalived‌

主库(Master)配置‌ /etc/keepalived/keepalived.conf:

global_defs {router_id mysql_ha_master
}vrrp_script chk_mysql {script "/etc/keepalived/check_mysql.sh"  # 检测MySQL是否存活interval 2weight 2
}vrrp_instance VI_1 {state MASTERinterface eth0  # 网卡名称virtual_router_id 51priority 100    # 主库优先级高于从库(如从库设为90)advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100/24  # VIP}track_script {chk_mysql  # 绑定健康检查脚本}
}

从库(Slave)配置‌ /etc/keepalived/keepalived.conf:

global_defs {router_id mysql_ha_slave
}vrrp_script chk_mysql {script "/etc/keepalived/check_mysql.sh"interval 2weight 2
}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100/24}track_script {chk_mysql}
}

4. ‌编写 MySQL 健康检查脚本‌

创建 /etc/keepalived/check_mysql.sh(两节点均需配置):

#!/bin/bash
if ! systemctl is-active mysqld >/dev/null 2>&1; thenexit 1  # MySQL停止,触发VIP漂移
elseexit 0
fi

赋予执行权限:

chmod +x /etc/keepalived/check_mysql.sh

5. ‌启动 Keepalived‌

systemctl start keepalived
systemctl enable keepalived

三、验证高可用性

1. ‌查看 VIP 绑定状态‌

在主库执行:

ip addr show eth0 | grep 192.168.1.100

应看到 VIP 绑定在主库的网卡上。

2. ‌模拟主库故障‌

停止主库的 MySQL 服务:

systemctl stop mysqld

观察 VIP 是否漂移到从库(约 2~5 秒):

# 在从库执行
ip addr show eth0 | grep 192.168.1.100

3. ‌恢复主库后 VIP 回切‌

重启主库的 MySQL 和 Keepalived:

systemctl start mysqld
systemctl restart keepalived

VIP 应自动回到主库(需确保主库优先级更高)。

四、注意事项

脑裂问题‌:

  • 使用 vrrp_script 检测 MySQL 服务状态,避免仅依赖网络存活导致脑裂。
  • 可在防火墙中禁止 VRRP 协议的多播包(iptables 或 firewalld 配置)。

主从切换后的处理‌:

  • 若 VIP 漂移到从库,需手动或通过脚本执行 STOP SLAVE; 并提升为新的主库。
  • 原主库恢复后,需重新配置为主从复制中的从库。

应用连接配置‌:

  • 应用程序应通过 VIP(192.168.1.100)连接数据库,而非直接使用物理 IP。

五、方案优缺点

优点‌‌ 缺点‌
简单轻量,快速切换(秒级)需手动处理主从复制链路切换
与应用解耦,无需修改应用配置依赖脚本实现故障检测,可靠性依赖脚本逻辑
适合小规模集群不自动处理数据一致性校验
http://www.xdnf.cn/news/264781.html

相关文章:

  • MARM:推荐系统中的记忆增强突破
  • C++ - 数据容器之 forward_list(创建与初始化、元素访问、容量判断、元素遍历、添加元素、删除元素)
  • Python爬虫实战:获取企信网指定公司基本工商数据并分析,为客户选择公司做参考
  • 封装pinia并引入pinia持久化工具(pinia-plugin-persistedstate)
  • HarmonyOS NEXT——DevEco Studio的使用(还没写完)
  • 如何基于HAL库进行STM32开发
  • 华为云Flexus+DeepSeek征文|DeepSeek-V3商用服务开通教程
  • Python 学习
  • 4.29-4.30 Maven+单元测试
  • 【LeetCode Hot100】二分查找篇
  • Swift:重构开发范式的现代编程语言
  • 《高性能MySQL》第1讲:MySQL架构
  • 音视频开发技术总结报告
  • 对比表格:数字签名方案、密钥交换协议、密码学协议、后量子密码学——密码学基础
  • 3.0/Q1,Charls最新文章解读
  • batch normalization和layer normalization区别
  • 循环缓冲区
  • QNAP Duplicati 备份 123云盘
  • Java接口全面教程:从入门到精通
  • ai之paddleOCR 识别PDF python312和paddle版本冲突 GLIBCXX_3.4.30
  • C与指针4——指针
  • 每天一道面试题@第五天
  • 第九课认识倍数
  • 【C++】模板进阶
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 20)
  • 多协议 Tracker 系统架构与传感融合实战 第四章 IMU 与 UWB 传感融合框架
  • 基于Springboot旅游网站系统【附源码】
  • 步进电机中断函数解释
  • rhce第二次作业
  • 工作记录 2015-06-01