当前位置: 首页 > ds >正文

[经验总结]Linux双机双网卡Keepalived高可用配置及验证细节

1. 前言

这种配置需求比较少见,在网上也很少有相关文章,于是记录在此,供有需要的朋友参考。
本篇重点介绍配置的关键点,基础部分简单提及,不赘述。

2. 需求描述

在这里插入图片描述

如上图,即给两个主机配置两对高可用主从配置。

3. 配置步骤

3.1 安装Keepalived

3.1.1 官网下载安装包

https://www.keepalived.org/download.html
之后将安装包上传到服务器上。
如果服务器可直连外网,那么可直接使用wget进行下载。

wget https://www.keepalived.org/software/keepalived-2.3.3.tar.gz

3.1.2 在主机上解压包

tar -xzvf keepalived-2.3.3.tar.gz

在主机上安装keepalived

mkdir -p ~/keepalived # 新建一个空目录,为keepalived需要安装到的目录
cd keepalived-2.3.3 # 进入解压后的源码目录
./configure --prefix=~/keepalived
sudo make && sudo make install

configureprefix参数,指定了keepalived安装的目录,在指定之前,需要新建该目录。

3.2 配置nginx检查脚本

mkdir -p /home/wingaso/keepalived/log # 新建一个存储日志的目录
cd /home/wingaso/keepalived/etc/keepalived

该目录下有一个keepalived.conf.sample文件。
我们在这个目录下新建一个check_ng.sh文件,其中填写如下内容(注意将以下脚本中的目录改为你服务器上的对应目录)

#/bin/sh
d=`date +%Y%m%d%H%M`;
n=`ps -C nginx --no-heading|wc -l`;
if [ $n -eq "0" ]; then/home/wingaso/nginx/sbin/nginx;n2=`ps -C nginx --no-heading|wc -l`;if [ $n2 -eq "0" ]; thenecho "$d nginx down,keepalived will stop">>/home/wingaso/keepalived/log/check_ng.log;sudo systemctl stop keepalived;fi
fi

3.3 配置keepalived.conf

分别进入两个主机,进入keepalived/etc/keepalived目录(即keepalived.conf.sample),新建keepalived.conf文件。

3.3.1 主机1配置

vrrp_script chk_nginx {script "/home/wingaso/keepalived/etc/keepalived/check_ng.sh"interval 3   # 每3秒执行一次脚本
}
vrrp_instance VIP_A_GROUP {  # VIP A(渠道1)的主备组state MASTERinterface eth0                  # 绑定网卡Avirtual_router_id 51          # 虚拟路由ID,同一组主备必须相同,不同组需唯一priority 105                  # 优先级105(需高于同一组的备节点)advert_int 1                   # 主备心跳间隔1秒authentication {auth_type PASS       # 使用密码认证auth_pass 密码A}virtual_ipaddress {Vip1/24}track_script {              # 绑定健康检查脚本chk_nginx}
}vrrp_instance VIP_B_GROUP {  # VIP B(渠道2)的主备组state BACKUPinterface eth1                  # 绑定网卡Bvirtual_router_id 52          priority 100                  advert_int 1authentication {auth_type PASSauth_pass 密码B}virtual_ipaddress {Vip2/24}track_script {chk_nginx}
}

3.3.2 主机2配置

vrrp_script chk_nginx {script "/home/wingaso/keepalived/etc/keepalived/check_ng.sh"interval 3
}
vrrp_instance VIP_A_GROUP {  # VIP A(渠道1)的主备组state BACKUPinterface eth0                  # 绑定网卡Cvirtual_router_id 51            # 必须与A组相同priority 100                    # 低于A的优先级advert_int 1authentication {auth_type PASSauth_pass 密码A}virtual_ipaddress {Vip1/24}track_script {chk_nginx}
}vrrp_instance VIP_B_GROUP {  # VIP B(渠道2)的主备组state MASTERinterface eth1                  # 绑定网卡Dvirtual_router_id 52            # 必须与B组相同priority 105                    # 高于B的优先级advert_int 1authentication {auth_type PASSauth_pass 密码B}virtual_ipaddress {Vip2/24}track_script {chk_nginx}
}

部分参数的含义已在以上配置中进行注明,不赘述。

3.3.3 配置细节

3.3.3.1 网卡名查看

至于网卡名的查看,可以通过以下命令

ip a  # 即 ip address的缩写

如下所示,其中蓝色框项为回环接口,下边两红色框为网卡1和网卡2。
在这里插入图片描述

3.3.3.2 Vip与网卡对应

VIP需与 对应网卡在同一子网,例如,假设 eth0 网卡的IP为 192.168.1.10/24(即子网掩码 255.255.255.0),其子网范围是 192.168.1.0 ~ 192.168.1.255。
此时,VIP(例如可取192.168.1.100/24)必须在此范围内,否则无法直接通过 eth0 网卡通信。

为什么VIP要和网卡在同一子网?

  • ARP协议依赖:当其他设备访问VIP时,会通过ARP协议(地址解析协议)广播查询“哪个设备的MAC地址对应VIP”。如果VIP与网卡在同一子网,Keepalived节点可以正常响应ARP请求,声明自己持有该VIP。若不在同一子网,ARP请求无法到达目标子网,其他设备无法找到VIP对应的MAC地址,导致VIP不可达。
  • 路由限制:默认情况下,操作系统只允许在同一子网内绑定额外的IP地址(即VIP)。如果VIP跨子网,需额外配置路由规则,否则数据包无法正确发送到VIP。

3.4 启动服务

sudo systemctl start keepalived

之后可以通过检查启动状态,确认配置是否存在问题。

sudo systemctl status keepalived

如果无异常,则显示如下所示:
在这里插入图片描述

3.5 验证

3.5.1 验证配置文件语法

cd /home/wingaso/keepalived/sbin
./keepalived -t -n -p -f=/home/wingaso/keepalived/etc/keepalived/keepalived.conf

-t:仅检查配置文件语法。
-n:不进入后台运行(直接输出错误)。
-f:指定配置文件路径。
如果配置无异常,则输出的结果为

Configuration file is valid
或者
SECURITY VIOLATION - scripts are being executed but script_security not enabled.

第二种输出情况,是因为我们配置了自定义脚本,但未启用脚本执行的安全权限控制,仅是一个警告,实际配置没有异常。
可以考虑增加以下配置(三选一),或者直接忽略该警告。

global_defs {script_security system   # 允许以系统用户身份执行脚本(推荐)# script_security sudo   # 或以 sudo 权限执行(需配置sudo权限)# script_security off    # 或完全关闭安全限制(不推荐)
}

3.5.2 检查ip绑定情况

在Keepalived启动无异常后,输入以下命令检查Vip绑定情况。

ip addr

正常情况下,会在输出中看到对应的Vip1和Vip2。
主机1中,网卡A绑定了Vip1:
在这里插入图片描述
主机2中,网卡D绑定了Vip2:
在这里插入图片描述

3.5.3 测试VIP漂移(主备切换)

3.5.3.1 手动停止主节点的Keepalived

在主机1运行

systemctl stop keepalived

在主机2使用ip addr命令查看Vip情况如下:
在这里插入图片描述
渠道2验证方式同理。

3.5.3.2 模拟健康检查失败

备份原check_ng.sh,然后将check_ng.sh脚本暂时改为强制返回异常。如下

#!/bin/sh
exit 1

之后通过ip addr命令,查看ip浮动情况。

3.5.3.3 通过Vip访问服务
curl http://Vip1:80       # 替换为实际VIP和端口

nginx接收并返回预期结果,则为正常。

3.6 日志检查

检查命令如下:

tail -f /var/log/messages | grep keepalived   # CentOS
tail -f /var/log/syslog | grep keepalived    # Ubuntu

3.7 其他问题

3.7.1 频繁主备切换问题

如网络抖动或检查间隔太短,可能会出现频繁主备切换的情况,此时可通过调大keepalived.conf中的参数 interval(脚本检查间隔) 和 advert_int(主备心跳间隔)解决。


原创,引用请注明。

http://www.xdnf.cn/news/203.html

相关文章:

  • IcePlayer音乐播放器项目分析及学习指南
  • 软考高级-系统架构设计师 论文范文参考(二)
  • vscode的一些使用技巧记录
  • Qt中读写结构体字节数据
  • 若依框架修改左侧菜单栏默认选中颜色
  • 【工具】文件传输工具croc
  • WebSocket:实现实时双向通信的技术
  • 密码学中的盐值是什么?
  • 获取视频封面
  • AIGC-几款本地生活服务智能体完整指令直接用(DeepSeek,豆包,千问,Kimi,GPT)
  • Pytorch的常规操作
  • C++11新特性
  • 【数据结构】第四弹——LinkedList与链表
  • 【重学Android】1.关于@Composer注解的一点知识笔记
  • ceph weight 和 reweight 的区别
  • MDA测量数据查看器【内含工具和源码地址】
  • Python 创意:AI 图像生成
  • intra-mart 开发 总结
  • 非比较排序——计数排序
  • Google专家解答:CSS选择器隐藏内容会影响SEO吗?
  • 天梯赛DP汇总
  • 面试面试面试new
  • hooker frida版just_trust_me.js 2025升级 支持boringssl unpinning
  • 【算法笔记】整除与最大公约数(GCD)专题整理
  • 量子神经网络编译器开发指南:从理论突破到产业落地全景解析
  • ubuntu系统上基于RKE2部署K8S及Rancher
  • Axure PR 9 中继器 10 编辑行
  • Gnome将默认终端设置为 Kitty
  • MCP Server驱动传统SaaS智能化转型:从工具堆叠到AI Agent生态重构,基于2025年技术演进与产业实践
  • 第六届电气技术与自动控制国际学术会议(ICETAC 2025)