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

[经验总结]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(主备心跳间隔)解决。


原创,引用请注明。

相关文章:

  • 大数据赋能,全面提升‘企业服务平台’实际效能!
  • 浏览器的存储机制 - Storage
  • NO.97十六届蓝桥杯备战|数论板块-最大公约数和最小公倍数|欧几里得算法|秦九韶算法|小红的gcd(C++)
  • 爬虫学习——Scrapy
  • Java编程语言 1.打印数组元素 2.Student类 StudentTest类
  • 【go】什么是Go语言中的GC,作用是什么?调优,sync.Pool优化,逃逸分析演示
  • alertManager部署安装、告警规则配置详解及告警消息推送
  • 华为openEuler操作系统全解析:起源、特性与生态对比
  • 机器学习模型(2/4课时):损失函数
  • 深度学习中的卷积神经网络
  • 命令行工具kubectl
  • 密码学中的盐值是什么?
  • RAII资源管理理解
  • Python 中的数据类型有哪些
  • 每日算法-250418
  • 智能化印刷新时代:Modbus 转profinet网关的完美融合,提升生产效率与环保标准
  • LangChain4j-第一篇 |几分钟完成deepseek 在线集成
  • 数据资产登记导则详解 | 企业如何规范化登记与管理数据资产?
  • ubuntu-24.04.2-live-server-arm64基于cloud-init实现分区自动扩容(LVM分区模式)
  • Selenium之 CSS 选择器详细讲解
  • 第一集|《蛮好的人生》蛮好,《悬镜》挺玄
  • 电子产品已拆封,还能申请“七天无理由退货”吗?上海法院这样判
  • 上海黄金交易所:贵金属价格波动剧烈,提示投资者做好风险防范
  • 俄“联盟MS-26”载人飞船安全返回地球
  • 美关税政策冲击本土车企:福特7月涨价,通用汽车盈利预期下调
  • 8个月女婴被指受虐后体重仅6斤?潮州警方:未发现虐待,父母有抚养意愿