从零开始的云计算生活——番外4,使用 Keepalived 实现 MySQL 高可用

目录

前言

一、架构原理​

[​Keepalived 作用​](#Keepalived 作用)

[​MySQL 主从复制​](#MySQL 主从复制)

二、环境准备​

服务器要求​:

安装基础软件​

[三、配置 MySQL 主从复制](#三、配置 MySQL 主从复制)

[四、配置 Keepalived](#四、配置 Keepalived)

主节点配置​(/etc/keepalived/keepalived.conf)

从节点配置

五、启动与验证

六、注意事项​


前言

使用 Keepalived 实现 MySQL 高可用(HA)的核心是通过 ​虚拟 IP(VIP)漂移​ 在主节点故障时自动切换流量到备用节点,结合 MySQL 主从复制保证数据一致性。以下是详细步骤和配置说明:

一、架构原理

Keepalived 作用

  • 基于 VRRP 协议管理 VIP,主节点正常时持有 VIP。
  • 通过健康检查脚本监控 MySQL 服务状态,若主节点故障,VIP 漂移到备用节点。
  • 客户端通过 VIP 访问 MySQL,无需感知后端节点切换

MySQL 主从复制

  • 主节点(Master)处理写请求,从节点(Slave)同步数据。
  • 故障切换后,原从节点提升为新主节点(需配合复制配置或工具)

二、环境准备

服务器要求​:

  • 两台 Linux 服务器(如 CentOS 7+),分别部署 MySQL 主从复制。
  • 示例 IP:
    • 主节点:192.168.71.177
    • 从节点:192.168.71.169
  • 虚拟 IP(VIP):192.168.71.100

安装基础软件

复制代码
# 在两台服务器上安装 MySQL 和 Keepalived
yum install -y mysql-server keepalived
systemctl enable mysqld keepalived

三、配置 MySQL 主从复制

创建了一个测试用的数据库

主节点配置​(my.cnf):

复制代码
[mysqld]
server-id = 1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = your_database  # 需同步的数据库

从节点配置(my.cnf)

复制代码
[mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin

启动复制

-- 在主节点创建复制用户

CREATE USER 'repl'@'%' IDENTIFIED BY 'password';

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

-- 在从节点配置主库信息

CHANGE MASTER TO

MASTER_HOST='192.168.71.177',

MASTER_USER='repl',

MASTER_PASSWORD='password';

START SLAVE;

验证同步:SHOW SLAVE STATUS\G 检查 Slave_IO_Running: Yes

四、配置 Keepalived

主节点配置 ​(/etc/keepalived/keepalived.conf

复制代码
global_defs {
    router_id mysql_master  # 唯一标识,建议用主机名
}

vrrp_script chk_mysql {
    script "/usr/bin/mysqladmin ping"  # MySQL 健康检查命令
    interval 2                          # 每 2 秒检查一次
    weight 2                            # 检查失败时降低优先级
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0                      # 绑定 VIP 的网卡
    virtual_router_id 51                # 集群 ID,主从必须一致
    priority 100                        # 主节点优先级更高(范围 1-254)
    advert_int 1                        # 心跳间隔

    authentication {
        auth_type PASS
        auth_pass 1111                  # 主从密码需相同
    }

    virtual_ipaddress {
        192.168.71.100/24 dev eth0       # VIP 配置
    }

    track_script {
        chk_mysql                       # 引用健康检查脚本
    }

    notify_master "/path/to/promote_script.sh"  # 切换为主时执行的脚本(可选)
}

从节点配置

五、启动与验证

启动服务​:

故障转移测试​:

模拟主节点故障

观察 VIP 漂移 ​:

在从节点执行 ip addr,应看到 VIP 绑定到从节点网卡。

主:

从:

客户端连接测试​:

恢复主节点​:

  • 重启主节点 MySQL 后,若需切回 VIP,可手动重启主节点 Keepalived(或通过优先级调整)

此时从节点无法登录

六、注意事项

  1. 数据一致性风险
    • 主从复制延迟可能导致数据丢失。建议启用半同步复制(Semi-Sync Replication)或 GTID
  2. 脑裂问题
    • 确保 virtual_router_id 唯一,避免多个集群冲突
  3. 自动切换限制
    • Keepalived 仅负责 VIP 漂移,不会自动切换 MySQL 主从角色。需配合脚本或工具(如 MHA、Orchestrator)实现完整故障转移
  4. 监控与告警
    • 配置 Keepalived 邮件通知(global_defs 区块),实时感知切换事件