news 2026/4/24 11:26:28

【网络架构】Keepalived + LVS(DR) + MariaDB 双主备实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【网络架构】Keepalived + LVS(DR) + MariaDB 双主备实践

Keepalived + LVS(DR) + MariaDB 双主备实践

一、架构背景与核心诉求

这套架构旨在解决传统单节点或简单主从数据库的痛点,实现以下目标:

  • 高可用(无间断服务):消除单点故障,故障自动切换,目标可用性 99.99%
  • 高性能(高并发承载):突破单主写瓶颈(双主同时写),LVS统一分发读请求,消除负载不均。
  • 数据可靠性(零丢失):双主实时双向同步,任一节点故障数据不丢。
  • 可扩展性:增加节点无需修改业务代码。

二、技术原理

1、MariaDB 主主复制原理:

实质是==双主双向同步==,即将两台服务器互为主从。

  • 主库:将数据变更写入二进制日志(binlog)。
  • 从库IO线程:连接主库,拉取binlog,写入本地中继日志(relay log)。
  • 从库SQL线程:读取relay log并在本地执行,实现数据同步。
  • 主主核心:先配置 db1→db2 的主从同步,再配置 db2→db1 的同步,双方即可互相同步数据。

2、LVS(DR模式)原理

  • 工作层级:四层(传输层),基于IP和端口转发,性能极高
  • DR模式(直接路由)
    • 请求路径:客户端 → LVS → 后端数据库(Real Server)。
    • 响应路径:后端数据库 → 客户端(直接返回,不经LVS)。
    • 关键点:LVS和后端服务器需配置相同的虚拟IP(VIP),并抑制后端服务器对VIP的ARP响应。

3、Keepalived 原理

  • 作用:为LVS提供高可用,解决LVS本身的单点故障。
  • 机制:通过VRRP协议在主备LVS节点间虚拟出一台路由器。
  • 工作方式:主节点拥有VIP,故障时备用节点在1~3秒内抢占VIP,接管流量,实现无感知切换。

三、环境准备

主机名IP地址服务器角色
client110.1.8.21/24客户端(vmnet8网段)
client210.1.1.21/24客户端(vmnet1网段)
ha110.1.8.13/24LVS + Keepalived 主节点
ha210.1.8.14/24LVS + Keepalived 备节点
db110.1.8.11/24MariaDB 主库1(主主互备)
db210.1.8.12/24MariaDB 主库2(主主互备)
router10.1.8.20/24 10.1.1.20/24路由器(转发跨网段流量)
VIP10.1.8.100集群对外服务虚拟IP

四、实践步骤

第一部分:环境基础配置

1、所有节点:设置主机名与IP

以ha1为例,其他节点类似,确保IP、网关正确。

hostnamectl set-hostname ha1.harvy.cloud nmcli connection modify ens33 ipv4.method manual ipv4.addresses10.1.8.13/24 ipv4.gateway10.1.8.20 ipv4.dns223.5.5.5 autoconnectyesnmcli connection up ens33

2、路由转发

# 开启路由转发echo"net.ipv4.ip_forward = 1">>/etc/sysctl.confsysctl-p# 配置防火墙伪装,使不同网段客户端能互访【不设置会影响client2的网络访问】systemctlenablefirewalld--nowfirewall-cmd --set-default-zone=trusted firewall-cmd --add-masquerade--permanentfirewall-cmd--reload
第二部分: MariaDB 主主复制配置

1、安装并初始化db1和db2

两台都要做

# 安装yuminstall-ymariadb-server# 开启二进制日志(主主复制必需)vim/etc/my.cnf.d/server.cnf[mysqld]server-id=1# db2上设为2,两者不能相同log_bin=mysql-binrelay_log=mysql-relay-bin systemctlenablemariadb--nowmysql_secure_installation# 按提示设置root密码,删除匿名用户等

2、配置db1 --> db2主从同步

  • 在db1上(将此节点视为主库)创建复制账号:
mysql-uroot-pgrant replication slave, replication client on *.* to'repl'@'10.1.8.12'identified by'huawei';flush privileges;show master status;-- 记住 File 和 Position 值,如 mysql-bin.000003,327
  • 在db2上(将此节点视为db1的从库)配置并启动同步:
mysql-uroot-pchange master tomaster_host='10.1.8.11',master_user='repl',master_password='huawei',master_port=3306,master_log_file='mysql-bin.000003', -- 需与上面show master status结果一致master_log_pos=327,master_connect_retry=30;start slave;show slave status\G;-- 确认 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes

3、验证单向同步

在db上建库、表、插入数据,到db2上查询,确认数据已同步。

4、配置db2–>db1主从同步,实现主主互备

  • 在db2上创建复制账号并查看状态:
-- 在db2上执行 grant replication slave, replication client on *.* to'repl'@'10.1.8.11'identified by'huawei';flush privileges;show master status;-- 记下结果,用于db1的同步配置
  • 在db1上配置并启动反向同步
-- 在db1上执行 change master tomaster_host='10.1.8.12',master_user='repl',master_password='huawei',master_port=3306,master_log_file='[db2的binlog文件]',master_log_pos=[db2的pos值],master_connect_retry=30;start slave;show slave status\G;-- 确认双Yes
第三部分:LVS + Keepalived 负载均衡高可用配置

1、后端服务器配置(db1和db2均需操作)

  • 配置VIP到本地回环口,并抑制ARP响应,这是DR模式的核心。
# 添加VIP到回环口(dummy接口)nmcli connectionaddtypedummy ifname dummy con-name dummy ipv4.method manual ipv4.addresses10.1.8.100/32 nmcli connection up dummy# 抑制对VIP的ARP解析cat>>/etc/sysctl.conf<<EOF net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.dummy.arp_ignore = 1 net.ipv4.conf.dummy.arp_announce = 2 EOFsysctl-p

2、配置主LVS+Keepalived(ha1)

yuminstall-ykeepalived ipvsadmcp/etc/keepalived/keepalived.conf{,.bak}vim/etc/keepalived/keepalived.conf

配置文件内容:

global_defs { router_id ha1 # 唯一标识 } vrrp_instance db { # VRRP实例,与ha2保持一致 state MASTER # 角色为MASTER interface ens33 virtual_router_id 51 # 主备必须相同 priority 110 # 优先级高于备机,抢占VIP advert_int 1 authentication { auth_type PASS auth_pass 1111 # 认证密码,主备一致 } virtual_ipaddress { 10.1.8.100/24 # 对外VIP } } virtual_server 10.1.8.100 3306 { # LVS虚拟服务配置 delay_loop 6 lb_algo rr # 轮询算法 lb_kind DR # 直接路由模式 persistence_timeout 50 # 持久连接超时 protocol TCP real_server 10.1.8.11 3306 { # 后端db1 weight 1 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 3 } } real_server 10.1.8.12 3306 { # 后端db2 weight 1 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 3 } } }
# 启动keepalived服务systemctlenablekeepalived--now

3、配置备LVS+Keepalived(ha2)

安装步骤与ha1完全相同,配置文件修改以下几项:

  • router_id ha2
  • state BACKUP
  • priority 100(必须小于ha1的110)
    其余配置(virtual_router_id, 密码,virtual_ipaddress,virtual_server)须与ha1完全一致

五、测试验证

1、创建远程访问测试账号(任意一个DB节点执行,会自动同步)

mysql-uroot-pgrant ALL PRIVILEGES on *.* to'harvy'@'%'identified by'123456';FLUSH PRIVILEGES;

2、功能与高可用测试

  • 基础连接测试:客户端执行mysql -uharvy -p123456 -h 10.1.8.100,能成功连上并读写。
  • LVS负载均衡测试:停掉ha1的keepalived (systemctl stop keepalived),检查VIP是否漂移到ha2 (ip a查看),客户端连接VIP不应中断。
  • DB故障转移测试:停掉db1的mariadb (systemctl stop mariadb),客户端连接VIP应能自动路由到db2,业务无感知;重启db1后,show slave status\G检查双向同步状态是否恢复正常。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 11:18:39

LinkSwift网盘直链下载助手:3分钟解决网盘限速问题的终极指南

LinkSwift网盘直链下载助手&#xff1a;3分钟解决网盘限速问题的终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘…

作者头像 李华
网站建设 2026/4/24 11:18:39

nli-MiniLM2-L6-H768快速上手:Python调用7860端口实现句子逻辑判断

nli-MiniLM2-L6-H768快速上手&#xff1a;Python调用7860端口实现句子逻辑判断 1. 认识nli-MiniLM2-L6-H768 nli-MiniLM2-L6-H768是一个基于自然语言推理(NLI)的轻量级模型&#xff0c;专门用于判断两个句子之间的逻辑关系。这个630MB的精简模型在保持较高准确率的同时&#…

作者头像 李华
网站建设 2026/4/24 11:17:35

深度学习新手必看:如何用训练环境镜像快速复现开源AI项目?

深度学习新手必看&#xff1a;如何用训练环境镜像快速复现开源AI项目&#xff1f; 1. 为什么需要训练环境镜像&#xff1f; 作为一名深度学习新手&#xff0c;你是否遇到过这些问题&#xff1a; 好不容易找到开源项目代码&#xff0c;却因为环境配置问题无法运行花费大量时间…

作者头像 李华
网站建设 2026/4/24 11:09:59

Windows和Office一键激活终极指南:KMS_VL_ALL_AIO完整教程

Windows和Office一键激活终极指南&#xff1a;KMS_VL_ALL_AIO完整教程 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗&#xff1f;&#x1f629; 每次看到"您…

作者头像 李华