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

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

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

1. ‌主库(Master)配置‌

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

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

重启 MySQL:systemctl restart mysqld

创建复制账号‌:

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

查看主库状态‌:

sql 复制代码
SHOW MASTER STATUS;  -- 记录 File(如 mysql-bin.000001)和 Position(如 154)

2. ‌从库(Slave)配置‌

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

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

重启 MySQL:systemctl restart mysqld

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

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

配置主从链路‌:

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;

验证复制状态‌:

sql 复制代码
SHOW SLAVE STATUS\G  
-- 确保 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes

二、Keepalived + VIP 高可用配置

1. ‌环境规划‌

角色‌ IP‌ VIP‌
MySQL Master 192.168.1.10 192.168.1.100
MySQL Slave 192.168.1.11

2. ‌Install Keepalived‌

在两台 MySQL 节点安装 Keepalived:

bash 复制代码
yum install keepalived -y  # CentOS
apt install keepalived -y  # Ubuntu

3. ‌配置 Keepalived‌

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

conf 复制代码
global_defs {
  router_id mysql_ha_master
}

vrrp_script chk_mysql {
  script "/etc/keepalived/check_mysql.sh"  # 检测MySQL是否存活
  interval 2
  weight 2
}

vrrp_instance VI_1 {
  state MASTER
  interface eth0  # 网卡名称
  virtual_router_id 51
  priority 100    # 主库优先级高于从库(如从库设为90)
  advert_int 1

  authentication {
    auth_type PASS
    auth_pass 1111
  }

  virtual_ipaddress {
    192.168.1.100/24  # VIP
  }

  track_script {
    chk_mysql  # 绑定健康检查脚本
  }
}

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

conf 复制代码
global_defs {
  router_id mysql_ha_slave
}

vrrp_script chk_mysql {
  script "/etc/keepalived/check_mysql.sh"
  interval 2
  weight 2
}

vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 90
  advert_int 1

  authentication {
    auth_type PASS
    auth_pass 1111
  }

  virtual_ipaddress {
    192.168.1.100/24
  }

  track_script {
    chk_mysql
  }
}

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

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

bash 复制代码
#!/bin/bash
if ! systemctl is-active mysqld >/dev/null 2>&1; then
  exit 1  # MySQL停止,触发VIP漂移
else
  exit 0
fi

赋予执行权限:

bash 复制代码
chmod +x /etc/keepalived/check_mysql.sh

5. ‌启动 Keepalived‌

bash 复制代码
systemctl start keepalived
systemctl enable keepalived

三、验证高可用性

1. ‌查看 VIP 绑定状态‌

在主库执行:

bash 复制代码
ip addr show eth0 | grep 192.168.1.100

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

2. ‌模拟主库故障‌

停止主库的 MySQL 服务:

bash 复制代码
systemctl stop mysqld

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

bash 复制代码
# 在从库执行
ip addr show eth0 | grep 192.168.1.100

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

重启主库的 MySQL 和 Keepalived:

bash 复制代码
systemctl start mysqld
systemctl restart keepalived

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

四、注意事项

脑裂问题‌:

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

主从切换后的处理‌:

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

应用连接配置‌:

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

五、方案优缺点

优点‌ ‌ 缺点‌
简单轻量,快速切换(秒级) 需手动处理主从复制链路切换
与应用解耦,无需修改应用配置 依赖脚本实现故障检测,可靠性依赖脚本逻辑
适合小规模集群 不自动处理数据一致性校验
相关推荐
MmeD UCIZ12 小时前
MySQL单表存多大的数据量比较合适
数据库·mysql
SarL EMEN12 小时前
mysql之联合索引
数据库·mysql
meta INGU12 小时前
mysql数据被误删的恢复方案
数据库·mysql
uElY ITER13 小时前
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
数据库·mysql
NCIN EXPE13 小时前
MySQL--》理解锁机制中的并发控制与优化策略
数据库·mysql·oracle
Nightwish513 小时前
Linux随记(三十)
linux·运维·mysql·ambari
lKWO OMET13 小时前
mysql之字符串函数
android·数据库·mysql
misL NITL1 天前
mysql之如何获知版本
数据库·mysql
北极的冰箱1 天前
MySQL Ver 8.0.41 for macos14.7密码遗忘
数据库·mysql
XDH_CS1 天前
MySQL 8.0 安装与 MySQL Workbench 使用全流程(超详细教程)
开发语言·数据库·mysql