0823Keepalived + LVS(DR) + MariaDB主主 小白完整实战教程

发布时间:2026/10/26 21:13:34

0823Keepalived + LVS(DR) + MariaDB主主 小白完整实战教程 文章目录Keepalived LVS(DR) MariaDB主主 小白完整实战教程一、业务背景与架构选型数据库业务四大刚性需求传统架构痛点本套方案组件分工项目预期收益二、MariaDB主从/主主复制原理核心日志与线程完整同步流程三、实验环境规划四、基础环境初始化所有机器1. 修改主机名、网卡IP2. router路由器开启IP转发五、部署MariaDB配置主主双向复制db1配置db2配置第一步db2作为从库同步db1db1→db2第二步db1作为从库同步db2db2→db1完成双向主主六、数据库后端RS配置LVS‑DR环境db1、db2两台都操作七、KeepalivedLVS配置调度器ha1、ha2ha1主调度器priority 110ha2备调度器priority 100八、业务测试验证1. 在数据库创建远程测试账号db1执行即可主主会同步到db22. client客户端安装mysql客户端工具访问VIP故障模拟测试核心高可用验证九、常见踩坑排错清单Keepalived LVS(DR) MariaDB主主 小白完整实战教程整套架构四层负载均衡LVS‑DR Keepalived实现调度器主备高可用 MariaDB双主互备复制实现数据库无间断对外服务企业常用数据库高可用方案。 整体流程客户端连接VIP访问数据库 → KeepalivedLVS做四层调度分发请求到两台MariaDB数据库双向主主复制保证两边数据一致任意一台调度器/数据库故障自动切换业务无感知。一、业务背景与架构选型数据库业务四大刚性需求高可用24×7不间断硬件宕机、进程崩溃不能导致业务中断故障自动转移。高并发承载读写量大单台数据库CPU/IO容易瓶颈。数据可靠性故障不丢失数据多节点之间数据同步一致。可扩展增加数据库节点不用修改业务代码。传统架构痛点架构问题单节点数据库单点故障宕机业务全部中断恢复慢有丢数据风险简单一主一从写操作全部压在主库故障切换需要人工操作容易出错业务层硬编码地址没有故障检测后端宕机业务还会继续访问故障节点新增节点需要改代码重启服务本套方案组件分工组件作用MariaDB主主复制两台数据库互为主从双向binlog同步两台库都可以读写一台故障另一台拥有完整数据LVS‑DR四层负载均衡转发数据库3306端口请求响应报文数据库直接返回客户端不经过调度器性能极高自带后端节点健康检测故障节点自动剔除Keepalived1. 给LVS做主备高可用VIP故障漂移消除调度器单点2. 直接写配置生成ipvs规则不用敲命令3. TCP健康检查后端数据库3306端口数据库挂掉自动摘除节点项目预期收益可用性提升故障自动切换无需人工干预写能力双库分担读能力可以继续追加从库横向扩展业务只需要连接一个VIP地址后端数据库变更业务代码零修改。二、MariaDB主从/主主复制原理主主复制本质就是两台数据库互做对方的主从复制A同步BB同步A实现双向数据同步。核心日志与线程binlog二进制日志主库记录所有增删改DDL/DML语句是复制的数据源。relay log中继日志从库从库拉取到binlog先存成本地中继日志再执行。binlog dump线程主库把binlog事件发送给从库IO线程。IO线程从库连接主库拉取binlog写入relay‑log。SQL线程从库读取relay‑log在本机回放SQL实现数据同步。完整同步流程主库执行写操作事务提交写入binlog日志。从库IO线程连接主库指定binlog文件名和position位置请求日志。主库dump线程读取binlog把事件传给从库IO线程。IO线程收到数据写入本机relay‑log记录同步位点。SQL线程读取relay‑log回放SQL语句完成数据同步。主主复制db1→db2做一遍主从db2→db1再反向做一遍主从双向同步。三、实验环境规划主机名IP地址网关角色VIPclient2.meng.cloud10.1.1.2110.1.1.20外部测试客户端无client1.meng.cloud10.1.8.2110.1.8.20内网测试客户端无router.meng.cloud10.1.8.20 / 10.1.1.2010.1.8.2路由器无ha1.meng.cloud10.1.8.1310.1.8.20LVSKeepalived主调度器10.1.8.100ha2.meng.cloud10.1.8.1410.1.8.20LVSKeepalived备调度器10.1.8.100db1.meng.cloud10.1.8.1110.1.8.20MariaDB数据库110.1.8.100dummy网卡db2.meng.cloud10.1.8.1210.1.8.20MariaDB数据库210.1.8.100dummy网卡VIP统一10.1.8.100业务客户端只连接这个IP访问数据库3306端口。四、基础环境初始化所有机器1. 修改主机名、网卡IP#### client2 hostnamectl set-hostname client2.meng.cloud nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.1.21/24 ipv4.gateway 10.1.1.20 ipv4.dns 223.5.5.5 autoconnect yes nmcli connection up ens33 #### client1 hostnamectl set-hostname client1.meng.cloud nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.21/24 ipv4.gateway 10.1.8.20 ipv4.dns 223.5.5.5 autoconnect yes nmcli connection up ens33 #### router路由器 hostnamectl set-hostname router.meng.cloud nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.20/24 ipv4.gateway 10.1.8.2 ipv4.dns 223.5.5.5 autoconnect yes nmcli connection up ens33 nmcli connection add type ethernet con-name ens36 ifname ens36 ipv4.method manual ipv4.addresses 10.1.1.20/24 autoconnect yes nmcli connection up ens36 #### ha1调度器 hostnamectl set-hostname ha1.meng.cloud nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.13/24 ipv4.gateway 10.1.8.20 ipv4.dns 223.5.5.5 autoconnect yes nmcli connection up ens33 #### ha2调度器 hostnamectl set-hostname ha2.meng.cloud nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.14/24 ipv4.gateway 10.1.8.20 ipv4.dns 223.5.5.5 autoconnect yes nmcli connection up ens33 #### db1数据库 hostnamectl set-hostname db1.meng.cloud nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.11/24 ipv4.gateway 10.1.8.20 ipv4.dns 223.5.5.5 autoconnect yes nmcli connection up ens33 #### db2数据库 hostnamectl set-hostname db2.meng.cloud nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.12/24 ipv4.gateway 10.1.8.20 ipv4.dns 223.5.5.5 autoconnect yes nmcli connection up ens332. router路由器开启IP转发echo net.ipv4.ip_forward1 /etc/sysctl.conf sysctl -p systemctl enable --now firewalld firewall-cmd --set-default-zonetrusted firewall-cmd --add-masquerade --permanent firewall-cmd --add-masquerade五、部署MariaDB配置主主双向复制db1配置安装服务开启binlog、relay‑logyum install -y mariadb-server vim /etc/my.cnf.d/server.cnf写入mysqld段落[mysqld] server-id1 log_binmysql-bin relay_logmysql-relay-bin启动服务systemctl enable --now mariadb安全初始化设置root密码huawei移除匿名用户等mysql_secure_installation交互步骤回车(旧密码为空) → Y设置密码输入huawei确认后面全部回车确认。创建复制账号授权给db2mysql -uroot -phuawei grant replication slave, replication client on *.* to repl10.1.8.12 identified by huawei; flush privileges; show master status\G;记录输出File、Position这里示例mysql‑bin.000003Position:327db2配置安装配置my.cnfserver‑id必须不一样db2写2yum install -y mariadb-server vim /etc/my.cnf.d/server.cnf [mysqld] server-id2 log_binmysql-bin relay_logmysql-relay-bin systemctl enable --now mariadb mysql_secure_installation创建复制账号授权给db1mysql -uroot -phuawei grant replication slave, replication client on *.* to repl10.1.8.11 identified by huawei; flush privileges; show master status\G;记录File、Position示例mysql‑bin.000002Position:1769第一步db2作为从库同步db1db1→db2db2数据库执行mysql命令替换成刚刚show master status拿到的文件名和positionchange master to master_host10.1.8.11, master_userrepl, master_passwordhuawei, master_port3306, master_log_filemysql-bin.000003, master_log_pos327, master_connect_retry30; start slave; show slave status\G;✅必须看到Slave_IO_Running: Yes、Slave_SQL_Running: Yes才算正常。测试db1建库建表插入数据db2查询确认数据同步过来。第二步db1作为从库同步db2db2→db1完成双向主主db1数据库执行替换db2的binlog文件名和positionchange master to master_host10.1.8.12, master_userrepl, master_passwordhuawei, master_port3306, master_log_filemysql-bin.000002, master_log_pos1769, master_connect_retry30; start slave; show slave status\G;✅db1这边也必须IO、SQL线程全部Yes双向复制完成两边写数据都可以互相同步。⚠️主主复制注意业务层要做好主键冲突规避否则双向同时插入相同主键会报错。六、数据库后端RS配置LVS‑DR环境db1、db2两台都操作DR模式关键点后端数据库也要绑定VIP/32掩码ARP抑制不对外响应VIP的ARP请求防止ARP漂移。# 创建dummy虚拟网卡绑定VIP掩码32位 nmcli connection add type dummy ifname dummy con-name dummy ipv4.method manual ipv4.addresses 10.1.8.100/32 nmcli connection up dummy # 配置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 EOF sysctl -p参数解释arp_ignore1只接收本机真实网卡IP的ARP请求dummy上的VIP不回复ARParp_announce2发送ARP广播不用VIP做源IP避免把VIP‑MAC广播出去造成冲突。七、KeepalivedLVS配置调度器ha1、ha2Keepalived的virtual_server段直接生成ipvs规则TCP_CHECK每隔一段时间探测3306端口数据库端口不通自动把该RS剔除负载均衡集群。ha1主调度器priority 110安装软件yum install -y keepalived ipvsadm cp /etc/keepalived/keepalived.conf{,.bak} vim /etc/keepalived/keepalived.conf完整配置文件! Configuration File for keepalived global_defs { router_id ha1 } vrrp_instance db { state MASTER interface ens33 virtual_router_id 51 priority 110 advert_int 1 authentication { auth_type PASS auth_pass meng123 } virtual_ipaddress { 10.1.8.100/24 } } virtual_server 10.1.8.100 3306 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 10.1.8.11 3306 { weight 1 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 3 } } real_server 10.1.8.12 3306 { weight 1 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 3 } } }启动服务systemctl enable --now keepalived ipvsadm -Ln ip addrha2备调度器priority 100yum install -y keepalived ipvsadm cp /etc/keepalived/keepalived.conf{,.bak} vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id ha2 } vrrp_instance db { state BACKUP interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass meng123 } virtual_ipaddress { 10.1.8.100/24 } } virtual_server 10.1.8.100 3306 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 10.1.8.11 3306 { weight 1 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 3 } } real_server 10.1.8.12 3306 { weight 1 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 3 } } } systemctl enable --now keepalived参数说明 virtual_serverdelay_loop 6每6秒执行一次后端TCP健康检查lb_algo rr轮询调度算法lb_kind DRLVS DR模式persistence_timeout 50会话保持50秒同一个客户端50秒内分配到同一台后端TCP_CHECK探测3306端口端口访问失败自动从ipvs集群移除该real_server。重要提醒real_server后面只能写IP不支持域名LVS四层工作不做域名解析填域名直接启动报错。八、业务测试验证1. 在数据库创建远程测试账号db1执行即可主主会同步到db2mysql -uroot -phuawei grant ALL PRIVILEGES on *.* to meng% identified by huawei; flush privileges;2. client客户端安装mysql客户端工具访问VIPyum install -y mysql # 访问VIP不需要写db1/db2真实IP mysql -umeng -phuawei -h 10.1.8.100故障模拟测试核心高可用验证调度器故障测试ha1执行systemctl stop keepalived观察VIP漂移到ha2客户端依然可以正常连接数据库。恢复ha1 keepalivedVIP切回ha1。数据库节点故障测试db1执行systemctl stop mariadbkeepalived检测3306端口不通自动将db1剔除集群客户端访问VIP只会调度到db2业务不中断启动db1数据库自动重新加入集群。双向复制验证db1新建库表插入数据db2查询看是否同步db2插入数据db1查询看是否同步。九、常见踩坑排错清单LVS‑DR访问不通db1/db2是否配置dummy网卡VIP掩码/32arp_ignore / arp_announce内核参数是否生效所有机器必须在同一个二层广播域DR模式依靠MAC转发跨VLAN不行。MariaDB主主不同步server‑id两台数据库不能相同repl复制账号授权IP是否正确密码一致show slave status\G看IO/SQL线程状态Last_IO_Error、Last_SQL_Error查看报错。Keepalived脑裂两台调度器同时拿到VIP防火墙放行VRRP协议firewall‑cmd --add‑protocolvrrp --permanentvrrp实例virtual_router_id两台必须一致auth_pass密码两台必须一模一样多网卡机器使用mcast_src_ip指定心跳报文发出网卡IP。keepalived启动失败virtual_server、real_server语法不能写错大括号配对不能使用域名写后端地址。主主复制业务坑应用层尽量规避两台库同时生成自增主键否则主键冲突复制报错生产建议配合中间件ProxySQL做读写分离。制账号授权IP是否正确密码一致show slave status\G看IO/SQL线程状态Last_IO_Error、Last_SQL_Error查看报错。Keepalived脑裂两台调度器同时拿到VIP防火墙放行VRRP协议firewall‑cmd --add‑protocolvrrp --permanentvrrp实例virtual_router_id两台必须一致auth_pass密码两台必须一模一样多网卡机器使用mcast_src_ip指定心跳报文发出网卡IP。keepalived启动失败virtual_server、real_server语法不能写错大括号配对不能使用域名写后端地址。主主复制业务坑应用层尽量规避两台库同时生成自增主键否则主键冲突复制报错生产建议配合中间件ProxySQL做读写分离。
延伸阅读

更多相关文章

2026/10/26 3:45:22

铸造erp系统选哪家?易呈专注中小加工厂生产管理解决方案

铸造erp系统选哪家?易呈专注中小加工厂生产管理解决方案很多中小铸造加工厂都会遇到生产进度看不清、库存对不上、铸件批次难追溯、成本算不清等难题。不少老板在搜索铸造erp系统、小型铸造厂管理软件、铸造车间工单管理、铸造厂库存怎么管好这类问题时,…

2026/10/26 12:30:57

特征工程的最后防线:防泄漏、单调性与切点一致

特征工程最后一道防线是"别作死"——防泄漏。三个保命细节,任何一个出问题,模型上线都翻车。防泄漏(最致命):不小心把答案相关信息喂给模型,导致线下好看线上崩。两类最常见:① 时间泄漏,用了申请时还不存在的信息(如贷前模型用借后还款行为——客户还没借呢);② 标签…

2026/10/25 15:09:35

制造业来料管理:构建生产质量第一道防线的核心策略

1. 来料管理:生产质量的第一道防线在制造业干了十几年,我见过太多因为一颗螺丝、一卷胶带、一块电路板导致整条生产线停摆,甚至整批产品报废的案例。这些问题的根源,往往不在复杂的装配工艺,也不在高精度的加工设备&am…

2026/10/27 0:57:34

AI代理必备:确定性视频渲染框架HyperFrames实战解析

做AI代理久了,你迟早会遇到一个非常折磨人的问题:模型参数完全一样,Prompt完全一样,连随机种子都固定了,跑出来的结果就是有细微差别。一开始我怀疑是模型推理的随机性,把温度系数调到0还是对不上。直到有一…

2026/10/27 0:57:34

SAM2图像分割模型:零样本迁移与实战部署指南

1. SAM2模型概述:重新定义图像分割的开源利器Segment Anything Model 2(SAM2)是Meta公司继第一代SAM模型后推出的升级版开源图像分割工具。这个模型最吸引人的特点是"开箱即用"——官方不仅开放了预训练权重,还提供了完…

2026/10/27 0:57:34

具身智能多模态数据集RealOmni的技术解析与应用

1. 项目背景与行业意义在人工智能领域,具身智能(Embodied AI)正成为最具潜力的发展方向之一。与传统的"纯软件"AI不同,具身智能强调智能体在物理环境中的感知、交互和学习能力。这种能力对于服务机器人、工业自动化、智…

2026/10/27 0:57:34

AI提示流编排器的工业级可靠性设计

1. 这不是写提示词,是在构建AI时代的“电路板”:为什么提示流编排器必须从工业级可靠性出发你有没有试过这样调用大模型:把用户输入塞进一个固定模板,填完变量就发出去,等返回再硬切字段?我做过——三个月前…

2026/10/27 0:57:34

AI音乐创作提示词设计指南与实战技巧

1. AI音乐创作中的提示词设计原理音乐创作领域正在经历一场由AI技术驱动的变革。作为一名在音乐科技领域工作多年的从业者,我见证了AI音乐生成工具从简单的旋律模仿到如今能够创作完整作品的演进过程。在这个过程中,提示词(prompt&#xff09…

2026/10/27 0:52:33

别被“首飞成功”带偏:拆解飞行汽车eVTOL的工程化真相

1. "首飞成功"这四个字,含金量能差出十年几年前我第一次被这类消息"骗"到,是在一个行业群里。有人丢进来一段视频,几十秒,一架造型科幻的机器垂直升起、悬停、平稳落下,配文是"飞行汽车首飞成…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中,设计模式、架构模式、并发模式乃至团队协作模式的选择,往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景,剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天,新手面对最多的困惑往往不是"工具够不够强",而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径:先从 Ask(问答式交互)起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑