高可用架构实战:Keepalived+LVS(DR)+MariaDB主主集群搭建指南

高可用架构实战:Keepalived+LVS(DR)+MariaDB主主集群搭建指南

在生产环境中,数据库单点故障、访问压力不均、服务切换中断是绝大多数业务系统的核心痛点。普通 MariaDB 单节点架构无法承载高并发、高可用业务,常规主从架构存在主节点单点故障、读写切换繁琐等问题。

今天给大家拆解一套生产级高可用高性能架构:Keepalived+LVS(DR)+MariaDB主主集群。这套架构结合了 LVS 四层高性能负载均衡、DR 模式无损耗转发、Keepalived 故障自动漂移、MariaDB 主主双向同步的核心优势,彻底解决数据库单点故障、并发瓶颈、手动切换运维难题,适配中小型企业生产业务、高并发接口、核心数据存储场景。

本文从架构原理、组件分工、环境规划、分步实操、故障演练、生产避坑全方位讲解,全程可直接复刻部署,零基础也能落地。

一、架构整体介绍:

1. 架构核心痛点解决

传统数据库架构缺陷:

  • 单节点 MariaDB:单点故障,宕机业务直接中断,无法扩容

  • MariaDB 主从架构:主节点唯一写入口,主库宕机需手动切换,存在数据延迟、单点风险

  • 单一负载均衡节点:负载均衡器自身形成新的单点故障

Keepalived+LVS(DR)+MariaDB 主主 架构实现了全链路无单点故障、读写负载均衡、自动故障切换、数据双向同步,是轻量、低成本、高性能的生产最优解。

2. 各组件核心分工

  • MariaDB 主主集群:两台数据库双向同步,互为主从,均可读写,数据实时同步;单库宕机不丢失数据,无需手动切换主从角色

  • LVS(DR直接路由模式):四层负载均衡,基于IP+端口转发数据库请求;DR模式不修改数据包、不占用带宽,转发性能极高,支持百万级并发,远超Nginx七层转发

  • Keepalived:基于VRRP协议实现LVS节点高可用,监控LVS服务与数据库状态;主节点故障自动漂移VIP,秒级切换备节点,全程无人工干预

3. 架构运行流程

客户端统一连接虚拟VIP访问数据库,请求经过以下链路:

客户端SQL请求 → VIP → Keepalived主节点LVS → 按照调度规则分发至两台MariaDB主主节点 → 数据库处理请求并返回数据 → 直接原路返回客户端(DR模式特性)

任意LVS节点、任意MariaDB节点宕机,架构自动容错,业务无感知中断。

二、核心技术原理精讲

1. LVS DR模式核心优势

LVS 包含 NAT、TUN、DR 三种模式,生产数据库场景首选DR直接路由模式

  • 请求入站经过LVS调度,响应出站直接由数据库节点返回客户端,不经过LVS,极大降低调度节点压力

  • 无需修改数据包IP地址,转发效率极高,性能损耗极低

  • 支持大规模并发连接,完美适配数据库高频读写场景

关键注意:DR模式需要所有数据库节点抑制ARP广播,避免VIP地址冲突导致调度异常。

2. MariaDB主主同步原理

两台 MariaDB 节点互相开启binlog日志,双向配置主从同步:

  • 节点A的数据变更同步至节点B,节点B的数据变更同步至节点A

  • 双节点均可独立读写,实现读写负载分担

  • 配合自增ID偏移配置,避免双节点同时写入导致主键冲突

3. Keepalived高可用原理

部署双LVS节点(主备模式),通过VRRP协议通信:

  • 正常情况下,主节点绑定VIP,承担所有请求调度

  • 实时监控LVS服务、网络状态、数据库节点存活

  • 主节点故障后,备节点秒级抢占VIP,接管所有业务,实现故障自动转移

三、实验环境规划

本次搭建采用双LVS+双MariaDB架构,无单点故障,环境参数统一规划:

节点角色 真实IP 软件版本 核心服务
LVS主节点(MASTER) 192.168.10.10 CentOS7+、LVS、Keepalived 负载调度、VIP主承载
LVS备节点(BACKUP) 192.168.10.11 CentOS7+、LVS、Keepalived 故障冗余、VIP漂移接管
MariaDB主主节点1 192.168.10.12 MariaDB 10.6+ 数据库读写、双向同步
MariaDB主主节点2 192.168.10.13 MariaDB 10.6+ 数据库读写、双向同步

统一虚拟VIP:192.168.10.100,客户端统一访问该IP连接数据库

四、分步实操部署(全程可复刻)

部署顺序:MariaDB主主集群部署 → LVS环境配置 → Keepalived高可用配置 → ARP抑制优化 → 架构验证与故障演练

第一步:部署MariaDB主主集群(双节点)

两台数据库节点均安装MariaDB,关闭防火墙与SELinux,保证网络互通。

1. 基础环境准备(双节点执行)
Plain 复制代码
# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
# 关闭SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 安装MariaDB
yum install mariadb-server mariadb -y
systemctl start mariadb && systemctl enable mariadb
# 安全初始化
mysql_secure_installation
2. 配置主主同步参数

**节点1(192.168.10.12)**编辑配置文件 /etc/my.cnf

Plain 复制代码
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# 开启binlog日志
log_bin=mysql-bin
binlog_format=MIXED
# 服务器ID(双节点必须不同)
server-id=1
# 自增ID偏移,避免主键冲突
auto_increment_increment=2
auto_increment_offset=1
# 同步忽略系统库
binlog_ignore_db=mysql
# 开启同步日志
relay_log=relay-bin

**节点2(192.168.10.13)**编辑配置文件 /etc/my.cnf

Plain 复制代码
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log_bin=mysql-bin
binlog_format=MIXED
server-id=2
auto_increment_increment=2
auto_increment_offset=2
binlog_ignore_db=mysql
relay_log=relay-bin
3. 重启服务并创建同步账号

双节点重启MariaDB服务

Plain 复制代码
systemctl restart mariadb

节点1执行MySQL命令,授权节点2同步:

Plain 复制代码
mysql -u root -p
# 创建同步用户
GRANT REPLICATION SLAVE ON *.* TO 'sync'@'192.168.10.13' IDENTIFIED BY 'Sync@123456';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
# 查看binlog状态,记录文件名和位置
SHOW MASTER STATUS;

节点2执行MySQL命令,授权节点1同步:

Plain 复制代码
mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'sync'@'192.168.10.12' IDENTIFIED BY 'Sync@123456';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
4. 双向关联主从,完成主主同步

节点1关联节点2为主库:

Plain 复制代码
CHANGE MASTER TO
MASTER_HOST='192.168.10.13',
MASTER_USER='sync',
MASTER_PASSWORD='Sync@123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=XXX;

START SLAVE;
SHOW SLAVE STATUS\G

节点2关联节点1为主库:

Plain 复制代码
CHANGE MASTER TO
MASTER_HOST='192.168.10.12',
MASTER_USER='sync',
MASTER_PASSWORD='Sync@123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=XXX;

START SLAVE;
SHOW SLAVE STATUS\G

验证标准:双节点 Slave_IO_Running、Slave_SQL_Running 均为 Yes,主主同步搭建完成。

第二步:LVS DR模式环境配置(双LVS节点)

1. 安装依赖工具
Plain 复制代码
# 双节点安装ipvsadm工具
yum install ipvsadm -y
# 开启内核转发
echo 1 > /proc/sys/net/ipv4/ip_forward
sed -i 's/^net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/' /etc/sysctl.conf
sysctl -p
2. 数据库节点ARP抑制配置(关键)

两台MariaDB节点执行,抑制VIP的ARP广播,避免IP冲突:

Plain 复制代码
# 临时配置
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

# 永久配置
cat >> /etc/sysctl.conf << EOF
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
EOF
sysctl -p

# 回环网卡绑定VIP
ifconfig lo:0 192.168.10.100 netmask 255.255.255.255 broadcast 192.168.10.100 up

第三步:Keepalived安装与配置(双节点)

1. 安装Keepalived
Plain 复制代码
yum install keepalived -y
systemctl start keepalived && systemctl enable keepalived
2. 主节点(192.168.10.10)配置

清空默认配置,新建 /etc/keepalived/keepalived.conf

Plain 复制代码
global_defs {
   router_id LVS_MASTER
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

# VRRP实例配置
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.10.100/24 dev eth0 label eth0:1
    }
}

# LVS负载均衡规则
virtual_server 192.168.10.100 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 600
    protocol TCP

    # 真实数据库节点1
    real_server 192.168.10.12 3306 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    # 真实数据库节点2
    real_server 192.168.10.13 3306 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
3. 备节点(192.168.10.11)配置

仅修改 state 与 priority,其余配置完全一致

Plain 复制代码
global_defs {
   router_id LVS_BACKUP
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.10.100/24 dev eth0 label eth0:1
    }
}

virtual_server 192.168.10.100 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 600
    protocol TCP

    real_server 192.168.10.12 3306 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.10.13 3306 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
4. 重启服务生效
Plain 复制代码
systemctl restart keepalived
# 查看LVS规则
ipvsadm -Ln

五、架构功能验证与故障演练

1. 基础功能验证

  • 主节点绑定VIP 192.168.10.100,备节点无VIP

  • 客户端通过VIP:3306可正常连接MariaDB,读写数据正常

  • 双数据库节点数据双向同步,新增数据两边均可查询

  • ipvsadm可正常看到两台真实服务器调度规则

2. 故障自动切换演练

场景1:LVS主节点宕机

关闭主节点Keepalived服务,VIP秒级漂移至备节点,数据库访问无中断、无报错,业务正常运行。重启主节点后,VIP自动回迁主节点。

场景2:单台MariaDB节点宕机

关闭其中一台数据库服务,Keepalived自动检测节点状态,剔除故障节点,所有请求自动调度至正常节点;重启故障节点后,自动重新加入集群,恢复负载分担。

场景3:双数据库交叉写入

分别在两台数据库新建库表、插入数据,两边数据实时同步,无主键冲突、无数据丢失,主主同步正常生效。

六、生产环境核心避坑指南

1. DR模式必避坑

所有后端MariaDB节点必须配置ARP抑制与回环网卡绑定VIP,否则会出现IP冲突、请求调度混乱、数据库连接超时等问题,是DR模式部署最容易出错的关键点。

2. 主主同步避坑

必须配置自增ID步长与偏移,双节点同时写入时,避免主键重复导致同步失败;生产环境建议关闭mysql库同步,仅同步业务库,提升同步效率。

3. Keepalived避坑

主备节点 virtual_router_id、认证密码必须完全一致;严格区分主备优先级,防止VIP来回漂移引发业务抖动。

4. 性能优化建议

  • 根据业务场景调整调度算法:读多写少用rr轮询,热点数据用wlc加权调度

  • 合理配置会话保持时间,避免频繁断开重连

  • 开启MariaDB并行复制,提升主主同步速度

七、架构总结与适用场景

Keepalived+LVS(DR)+MariaDB主主 架构,完美融合了四层负载的高性能、VRRP的高可用、主主数据库的高容错特性,解决了传统数据库架构的所有核心痛点。

架构核心优势总结:

  • 全链路高可用:负载层、数据层均无单点故障,故障秒级自动切换

  • 高性能低损耗:LVS DR模式转发几乎无性能损耗,支撑高并发数据库访问

  • 数据高可靠:双向实时同步,双节点热备,杜绝数据丢失

  • 运维极简:全程自动化容错,无需人工干预切换

适用场景:中小型生产核心数据库、高并发读写业务、需要7*24小时不间断运行的系统、MySQL/MariaDB数据库高可用改造场景。

相关推荐
不会就选b27 分钟前
Linux之线程池(三)
linux·开发语言
Sylvia-girl33 分钟前
【一】:Linux基础指令
linux·运维·服务器
KKKlucifer1 小时前
运维域与IT域融合——云网安全一体化运营体系建设
大数据·运维·安全
loopne1 小时前
AI网文写作实验笔记(十三):系列总结——12 篇实验、8 条核心结论,把“AI 写小说“每一步拆开验证
人工智能·经验分享·笔记·ai写作·智能写作
0+1111 小时前
Linux --基础IO
linux·运维·服务器
manongdashu1881 小时前
本地静态建站工具自带页面自适应功能,良好适配手机移动端浏览。
经验分享·seo·独立站·静态站·静态网站
资深电气设计1 小时前
雕铣机主轴驱动升级趋势分析:变频器技术价值与选型逻辑探讨
运维
CZIDC1 小时前
华为服务器TS200-2280 V2 iBMC导入SSL证书后问题案例分析
服务器·https·ssl
M78佐菲1 小时前
Linux多线程:创建、回收与互斥同步
linux·笔记·学习·算法