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

news2025/4/20 0:34:16

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" ]; then
		echo "$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 MASTER
    interface eth0                  # 绑定网卡A
    virtual_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 BACKUP
    interface eth1                  # 绑定网卡B
    virtual_router_id 52          
    priority 100                  
    advert_int 1
    authentication {
        auth_type PASS
        auth_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 BACKUP
    interface eth0                  # 绑定网卡C
    virtual_router_id 51            # 必须与A组相同
    priority 100                    # 低于A的优先级
    advert_int 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 MASTER
    interface eth1                  # 绑定网卡D
    virtual_router_id 52            # 必须与B组相同
    priority 105                    # 高于B的优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_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.coloradmin.cn/o/2338365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2025.04.17【Dendrogram】生信数据可视化:Dendrogram图表详解

Dendrogram customization Go further with ggraph: edge style, general layout, node features, adding labels, and more. Customized circular dendrogram Learn how to build a circular dendrogram with proper labels. 文章目录 Dendrogram customizationCustomized c…

Linux下的网络管理

一、ipv4原理 网络接口是指网络中的计算机或网络设备与其他设备实现通讯的进出口,一般是指计算机的网络接口即网卡设备 从RHEL7开始引入了一种新的“一致网络设备命名”的方式为网络接口命名,该方式可以根据固件、设备拓扑、设备类型和位置信息分配固…

Zookeeper介绍与安装配置

1.综述 1.1.Zookeeper介绍 Zookeeper 是一个分布式协调服务,由 Apache 开发,主要用于管理分布式应用中的配置信息、命名服务、分布式同步和组服务。它通过简单的接口提供高性能、高可用性和严格的顺序访问控制,广泛应用于分布式系统的协调与…

实验五 内存管理实验

实验五 内存管理实验 一、实验目的 1、了解操作系统动态分区存储管理过程和方法。 2、掌握动态分区存储管理的主要数据结构--空闲表区。 3、加深理解动态分区存储管理中内存的分配和回收。 4、掌握空闲区表中空闲区3种不同放置策略的基本思想和实现过程。 5、通过模拟程…

用Webpack 基础配置快速搭建项目开发环境

Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具,但是Webpack有大量的配置项,对新手不太友好,但是我们可以根据webpack-cli的init命令根据项目需求快速生成webpack的配置文件,本文将手把手教你如何用 Webpack 和 npm 快…

Axios 介绍及使用指南

本文将基于 Axios 原理,安装及封装方面展开描述,话不多说,现在发车! 一、原理 Axios 中文文档:起步 | Axios中文文档 | Axios中文网 赛前科普: 下文将涉及到三个关键词:Axios,Ajax…

接口自动化测试(二)

一、接口测试流程:接口文档、用例编写 拿到接口文档——编写接口用例以及评审——进行接口测试——工具/自动化框架进行自动化用例覆盖(70%)——输出测试报告 自动化的目的一般是为了回归 第一件事情:理解需求,学会看接口文档 只需要找到我…

Arduino+ESP826601s模块连接阿里云并实现温湿度数据上报

ArduinoESP826601s模块连接阿里云并实现温湿度数据上报 一、前言二、准备工作三、程序代码1. Arduino的程序2. ESP826601的程序3. 上面程序需要注意的地方 四、运行结果五、结束语 一、前言 看完我这三篇文章,相信各位朋友对于阿里云物联网平台的使用都有了一定的认…

本地生活服务信息分类信息系统

最近在找分类信息系统,看了很多市面上常见的分类信息系统: 1,私集分类信息系统 2,火鸟分类信息系统 3,觅分类信息系统 4,框分类信息系统 5,蚂蚁分类信息系统 发现很多分类信息系统,…

【Dify应用】连接数据库生成Echarts图表

这里写自定义目录标题 需求文档内容测试环境实际效果工作流内容工具安装B工作流详解A工作流详解优化建议 需求 甲方要求。根据自然语言生成对应Echarts图表,并且数据来源于私有数据库。 文档内容 本文档内容主要展示使用Dify(本地源码)进行…

RAG 实战|用 StarRocks + DeepSeek 构建智能问答与企业知识库

文章作者: 石强,镜舟科技解决方案架构师 赵恒,StarRocks TSC Member 👉 加入 StarRocks x AI 技术讨论社区 https://mp.weixin.qq.com/s/61WKxjHiB-pIwdItbRPnPA RAG 和向量索引简介 RAG(Retrieval-Augmented Gen…

ubuntu 22.04 使用ssh-keygen创建ssh互信账户

现有两台ubuntu 22.04服务器,ip分别为192.168.66.88和192.168.88.66。需要将两台服务器创建新用户并将新用户做互信。 创建账户 adduser user1 # 如果此用户不想使用密码,直接一直回车就行,创建的用户是没法使用用户密码进行登陆的 su - …

【Linux网络】Socket 编程TCP

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12891150.html 目录 TCP socket API 详解 socket(): bind(): listen(): accept(): connect V0…

ESP32-idf学习(二)esp32C3作服务端与电脑蓝牙数据交互

一、当前需求 目前是想利用蓝牙来传输命令,或者一些数据,包括电脑、手机与板子的数据传输,板子与板子之间的数据传输。构思是一个板子是数据接收终端,在电脑或手机下发指令后,再给其他板子相应指令,也需要…

NHANES指标推荐:CMI

文章题目:Association between cardiometabolic index and biological ageing among adults: a population-based study DOI:10.1186/s12889-025-22053-3 中文标题:成年人心脏代谢指数与生物衰老之间的关系:一项基于人群的研究 发…

前端单元测试实战:如何开始?

实战:如何开始单元测试 1.安装依赖 npm install --save-dev jest2.简单的例子 首先,创建一个 sum.js 文件 ./sum.js function sum(a, b) {return a b; }module.exports sum;创建一个名为 sum.test.js 的文件,这个文件包含了实际测试内…

react-native搭建开发环境过程记录

主要参考:官网的教程 https://reactnative.cn/docs/environment-setup 环境介绍:macos ios npm - 已装node18 - 已装,通过nvm进行版本控制Homebrew- 已装yarn - 已装ruby - macos系统自带的2.2版本。watchman - 正常安装Xcode - 正常安装和…

观察者模式详解与C++实现

1. 模式定义 观察者模式(Observer Pattern)是一种行为型设计模式,定义了对象间的一对多依赖关系。当一个对象(被观察者/主题)状态改变时,所有依赖它的对象(观察者)都会自动收到通知…

UE5 关卡序列

文章目录 介绍创建一个关卡序列编辑动画添加一个物体编辑动画时间轴显示秒而不是帧时间轴跳转到一个确定的时间时间轴的显示范围更改关键帧的动画插值方式操作多个关键帧 播放动画 介绍 类似于Unity的Animation动画,可以用来录制场景中物体的动画 创建一个关卡序列…

AI测试用例生成平台

AI测试用例生成平台 项目背景技术栈业务描述项目展示项目重难点 项目背景 针对传统接口测试用例设计高度依赖人工经验、重复工作量大、覆盖场景有限等行业痛点,基于大语言模型技术实现接口测试用例智能生成系统。 技术栈 LangChain框架GLM-4模型Prompt Engineeri…