如何在Linux上配置高可用数据库集群

来源:前端技术作者:上海GEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何在Linux上配置高可用数据库集群》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在Linux上配置高可用数据库集群》有用,将其分享出去将是对创作者最好的鼓励。

在Linux系统上配置高可用数据库集群,核心目标是消除单数据库节点的单点故障风险,当主节点出现故障时,集群可以自动切换到备用节点,保证业务对数据库的访问不中断。常见的高可用方案有基于Keepalived+MySQL的主从切换方案,也有基于Pacemaker+Corosync的复杂集群方案,本文以更常用的Keepalived+双主MySQL方案为例展开说明。

前置准备

本次配置需要两台Linux服务器,系统版本建议为CentOS 7及以上,提前关闭防火墙和SELinux,保证两台服务器之间网络互通。需要准备的软件版本如下:

  • MySQL 8.0及以上版本
  • Keepalived 2.0及以上版本

两台服务器的IP规划如下:

节点角色服务器IP虚拟IP(VIP)
主节点192.168.0.10192.168.0.100
备节点192.168.0.11

MySQL双主配置

首先在两台服务器上安装MySQL,安装完成后修改MySQL配置文件my.cnf,开启二进制日志和自增ID偏移,避免双主写入时的主键冲突。

主节点配置

编辑/etc/my.cnf文件,添加以下配置:

[mysqld]
# 服务器唯一ID,两台节点不能相同
server-id=1
# 开启二进制日志
log-bin=mysql-bin
# 自增ID起始值
auto_increment_increment=2
auto_increment_offset=1
# 需要同步的数据库,按需修改
binlog-do-db=test_db
# 忽略同步的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema

重启MySQL服务后,登录MySQL执行以下命令,创建用于主从同步的用户:

-- 创建同步用户,允许备节点IP访问
CREATE USER 'repl'@'192.168.0.11' IDENTIFIED BY 'Repl@123456';
-- 授予同步权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.11';
-- 刷新权限
FLUSH PRIVILEGES;
-- 查看主节点状态,记录File和Position值
SHOW MASTER STATUS;

备节点配置

备节点的my.cnf配置和主节点类似,仅修改server-idauto_increment_offset

[mysqld]
server-id=2
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
binlog-do-db=test_db
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema

重启备节点MySQL服务后,登录MySQL执行同步命令,其中master_log_filemaster_log_pos填写主节点SHOW MASTER STATUS输出的对应值:

-- 配置主节点信息
CHANGE MASTER TO
MASTER_HOST='192.168.0.10',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=156;
-- 启动同步
START SLAVE;
-- 查看同步状态,确保Slave_IO_Running和Slave_SQL_Running都是Yes
SHOW SLAVE STATUSG;

同步配置完成后,再在备节点上执行主节点创建同步用户的操作,主节点也配置同步备节点的二进制日志,实现双主互相同步。

Keepalived配置

Keepalived的作用是管理虚拟IP,监控MySQL服务状态,当主节点MySQL故障时自动将VIP漂移到备节点。

主节点Keepalived配置

安装Keepalived后,编辑/etc/keepalived/keepalived.conf文件:

global_defs {
   router_id mysql_ha_1
}

vrrp_script chk_mysql {
    # 检查MySQL服务存活的脚本路径
    script "/etc/keepalived/chk_mysql.sh"
    # 每2秒检查一次
    interval 2
    # 检查失败权重减50
    weight -50
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.100/24
    }
    track_script {
        chk_mysql
    }
}

创建MySQL服务检查脚本/etc/keepalived/chk_mysql.sh

#!/bin/bash
# 检查MySQL进程是否存在
count=$(ps -ef | grep mysql | grep -v grep | wc -l)
if [ $count -eq 0 ]; then
    # 进程不存在则停止Keepalived,触发VIP漂移
    systemctl stop keepalived
fi

给脚本添加执行权限:

chmod +x /etc/keepalived/chk_mysql.sh

备节点Keepalived配置

备节点的Keepalived配置和主节点类似,修改router_idstatepriority即可:

global_defs {
   router_id mysql_ha_2
}

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

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.0.100/24
    }
    track_script {
        chk_mysql
    }
}

备节点同样创建chk_mysql.sh脚本并添加执行权限,之后启动两台节点的Keepalived服务。

集群验证

验证集群是否正常工作可以按照以下步骤操作:

  • 在主节点执行ip addr show eth0,可以看到VIP 192.168.0.100已经绑定到主节点网卡上
  • 使用客户端连接VIP的MySQL服务,执行写入操作,数据会同步到两个节点
  • 手动停止主节点的MySQL服务,等待2秒后查看备节点的网卡,VIP已经漂移到备节点,客户端连接VIP仍然可以正常访问数据库
  • 恢复主节点的MySQL和Keepalived服务后,VIP会回到主节点,集群恢复正常状态

常见问题排查

如果集群切换失败,可以先检查以下几点:

  • 两台服务器的防火墙是否关闭,或者是否放通了VRRP协议(协议号112)的流量
  • MySQL同步状态是否正常,是否存在同步延迟或中断的情况
  • Keepalived的检查脚本是否有执行权限,脚本逻辑是否正确
  • 两台节点的virtual_router_id和认证密码是否一致
注意:生产环境中建议结合数据备份策略使用,同时可以根据业务需求选择Pacemaker+Corosync等更复杂的集群方案,实现更精细的资源管理。

Linux高可用数据库集群MySQLKeepalivedPacemaker修改时间:2026-07-20 20:45:45

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。