在Linux环境下搭建高可用数据库复制,核心是通过主从复制实现数据同步,再配合高可用组件实现故障自动转移,保障数据库服务的连续性。本文以MySQL数据库和keepalived组件为例,讲解完整的搭建流程。

环境准备
本次搭建需要两台Linux服务器,系统版本建议为CentOS 7及以上,两台服务器分别作为主节点和从节点,同时需要提前安装好MySQL 5.7及以上版本,以及keepalived组件。以下是两台服务器的规划信息:
| 节点角色 | IP地址 | 作用 |
|---|---|---|
| 主节点 | 192.168.0.10 | 处理写请求,同步数据到从节点 |
| 从节点 | 192.168.0.11 | 同步主节点数据,提供读请求服务 |
| 虚拟IP | 192.168.0.100 | 对外提供数据库服务的统一访问地址 |
配置MySQL主从复制
主节点配置
首先修改主节点的MySQL配置文件,默认路径为/etc/my.cnf,在[mysqld]段添加以下配置:
[mysqld] # 设置服务器唯一ID,主从节点不能重复 server-id=1 # 开启二进制日志,用于记录数据变更 log-bin=mysql-bin # 二进制日志格式,推荐使用ROW格式 binlog_format=ROW # 需要同步的数据库,不配置则同步所有数据库 # binlog-do-db=test_db # 忽略同步的数据库 binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema
修改完成后重启MySQL服务:
systemctl restart mysqld
登录主节点MySQL,创建用于从节点同步的账号,并授权复制权限:
-- 创建同步账号,密码为repl_password CREATE USER 'repl'@'192.168.0.%' IDENTIFIED BY 'repl_password'; -- 授予复制权限 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%'; -- 刷新权限 FLUSH PRIVILEGES; -- 查看主节点状态,记录File和Position值 SHOW MASTER STATUS;
从节点配置
修改从节点的MySQL配置文件,同样在[mysqld]段添加配置:
[mysqld] # 设置服务器唯一ID,和主节点区分 server-id=2 # 开启中继日志 relay-log=mysql-relay # 只读模式,从节点只处理读请求 read-only=1 # 忽略同步的数据库 replicate-ignore-db=mysql replicate-ignore-db=information_schema replicate-ignore-db=performance_schema
重启从节点MySQL服务:
systemctl restart mysqld
登录从节点MySQL,配置主节点连接信息,执行以下命令,注意替换之前记录的主节点File和Position值:
CHANGE MASTER TO MASTER_HOST='192.168.0.10', MASTER_USER='repl', MASTER_PASSWORD='repl_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
启动从节点复制进程,并查看同步状态:
-- 启动复制 START SLAVE; -- 查看复制状态 SHOW SLAVE STATUSG
如果Slave_IO_Running和Slave_SQL_Running两个参数值都为Yes,说明主从复制配置成功。
配置keepalived实现高可用
keepalived可以实现虚拟IP的漂移,当主节点出现故障时,自动将从节点提升为主节点,接管虚拟IP提供服务。
安装keepalived
两台节点都执行以下命令安装keepalived:
yum install -y keepalived
主节点keepalived配置
修改主节点keepalived配置文件,默认路径为/etc/keepalived/keepalived.conf,内容如下:
global_defs {
# 通知邮箱配置,可选
notification_email {
admin@ipipp.com
}
notification_email_from keepalived@ipipp.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
# 节点标识,唯一即可
router_id mysql_master
}
vrrp_instance VI_1 {
# 角色,主节点为MASTER
state MASTER
# 绑定的网卡,根据实际网卡名称调整
interface eth0
# 虚拟路由ID,主从节点保持一致
virtual_router_id 51
# 优先级,主节点高于从节点
priority 100
# 检查间隔,单位秒
advert_int 1
# 认证配置
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP地址
virtual_ipaddress {
192.168.0.100
}
}
# 健康检查配置
virtual_server 192.168.0.100 3306 {
delay_loop 6
# 负载均衡算法,这里使用轮询
lb_algo rr
# 负载均衡模式,DR模式
lb_kind DR
persistence_timeout 50
protocol TCP
# 主节点真实服务配置
real_server 192.168.0.10 3306 {
weight 1
# 健康检查脚本,检查MySQL是否存活
MISC_CHECK {
misc_path "/etc/keepalived/check_mysql.sh"
misc_timeout 10
}
}
}
创建MySQL健康检查脚本/etc/keepalived/check_mysql.sh,内容如下:
#!/bin/bash
# 检查MySQL服务是否存活
mysqladmin -uroot -p'root_password' ping >/dev/null 2>&1
if [ $? -eq 0 ]; then
exit 0
else
exit 1
fi
给脚本添加执行权限:
chmod +x /etc/keepalived/check_mysql.sh
从节点keepalived配置
从节点配置文件内容和主节点类似,只需要修改以下参数:
global_defs {
router_id mysql_slave
}
vrrp_instance VI_1 {
# 角色为BACKUP
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
}
}
virtual_server 192.168.0.100 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.0.11 3306 {
weight 1
MISC_CHECK {
misc_path "/etc/keepalived/check_mysql.sh"
misc_timeout 10
}
}
}
从节点的健康检查脚本和主节点一致,同样需要创建并赋予执行权限。
启动keepalived
两台节点都启动keepalived服务,并设置开机自启:
systemctl start keepalived systemctl enable keepalived
启动后可以在主节点执行ip addr show eth0命令,查看虚拟IP是否已经绑定到主节点网卡上。
高可用验证
可以通过以下方式验证高可用效果:
- 在主节点创建测试数据库和表,插入数据,查看从节点是否同步成功
- 使用虚拟IP 192.168.0.100 连接数据库,执行读写操作,验证服务正常
- 手动停止主节点的MySQL服务,查看虚拟IP是否自动漂移到从节点,同时数据库服务是否仍可正常访问
- 恢复主节点MySQL服务后,重新查看虚拟IP归属,确认服务恢复正常
通过以上步骤,就可以在Linux上完成高可用数据库复制的搭建,当主节点出现故障时,从节点会自动接管服务,保障数据库业务的连续性。
MySQL主从复制高可用keepalived修改时间:2026-06-21 18:54:48