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

高可用 Keepalived 服务部署流程

一、配置文件

vim /etc/keepalived/keepalived.confGLOBAL    CONFIGURATION            --- 全局配置部分VRRPD     CONFIGURATION            --- VRRP协议配置部分LVS     CONFIGURATION            --- LVS服务管理配置部分[root@lb01 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs {                      --- 全局配置部分notification_email {            --- 设置发送邮件信息的收件人acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from oldboy@163.com   --- 设置连接的邮件服务器信息smtp_server 163.smtp.xxx_smtp_connect_timeout 30 router_id LVS_DEVEL           --- 高可用集群主机身份标识(集群中主机身份标识名称不能重复)}vrrp_instance oldboy {           --- Vrrp协议家族 oldboystate MASTER                 --- 标识所在家族中的身份 (MASTER/BACKUP)interface eth0               --- 指定虚拟IP地址出现在什么网卡上virtual_router_id 51         --- 标识家族身份信息 多台高可用服务配置要一致 priority 100                 --- 设定优先级 优先级越高,就越有可能成为主advert_int 1                 --- 定义组播包发送的间隔时间()  主和备配置一样  1authentication {             --- 实现通讯需要有认证过程auth_type PASSauth_pass 1111}virtual_ipaddress {          --- 配置虚拟IP地址信息192.168.200.16192.168.200.17192.168.200.18}}

二、环境准备

1、服务器规划

角色	IP 地址	主机名	虚拟 IP (VIP)	优先级
Master	192.168.1.101	node1	192.168.1.100	100
Backup	192.168.1.102	node2	192.168.1.100	90

2、网络要求

主备节点需在同一局域网(二层互通)。确保防火墙允许 VRRP 协议报文(IP 协议号 112,组播地址 224.0.0.18)。若为云环境(如 AWS、阿里云),需确认支持组播或配置单播模式。

三、安装 Keepalived

1、在 Master 和 Backup 节点安装

# CentOS/RedHat
yum install keepalived -y# Ubuntu/Debian
apt-get install keepalived -y

2、启动服务并设置开机自启

systemctl start keepalived
systemctl enable keepalived

3、配置 Keepalived

1、主节点(Master)配置

配置文件路径:/etc/keepalived/keepalived.conf
global_defs {router_id NODE_MASTER  # 唯一标识,建议按节点角色命名
}vrrp_instance VI_1 {state MASTER           # 初始状态为 MASTERinterface eth0         # 绑定网卡名称(需根据实际修改)virtual_router_id 51   # 虚拟路由 ID,同一组需相同(1-255)priority 100           # 优先级,Master 需高于 Backupadvert_int 1           # 心跳间隔(秒)authentication {       # 认证配置(主备需一致)auth_type PASSauth_pass 12345678 # 密码建议复杂化}virtual_ipaddress {    # 虚拟 IP(VIP)192.168.1.100/24 dev eth0}# 可选:触发切换的脚本(如检测服务状态)track_script {chk_nginx          # 引用健康检查脚本}
}# 可选:定义健康检查脚本(示例:检查 Nginx 是否存活)
vrrp_script chk_nginx {script "/usr/bin/killall -0 nginx"  # 检查 Nginx 进程是否存在interval 2                          # 检查间隔(秒)weight -20                          # 检测失败时优先级降低值fall 2                              # 连续失败 2 次判定为故障rise 1                              # 成功 1 次即恢复
}

2、备节点(Backup)配置

配置文件路径:/etc/keepalived/keepalived.conf

global_defs {router_id NODE_BACKUP
}vrrp_instance VI_1 {state BACKUP           # 初始状态为 BACKUPinterface eth0virtual_router_id 51   # 必须与 Master 一致priority 90            # 优先级低于 Masteradvert_int 1authentication {auth_type PASSauth_pass 12345678}virtual_ipaddress {192.168.1.100/24 dev eth0}track_script {chk_nginx}
}# 健康检查脚本需与 Master 一致
vrrp_script chk_nginx {script "/usr/bin/killall -0 nginx"interval 2weight -20fall 2rise 1
}

四、关键配置说明

virtual_router_id:同一 VRRP 组内所有节点必须相同,不同组需不同。priority:优先级决定选举结果,范围 1-254,默认 100。advert_int:心跳间隔建议设为 1 秒,超时时间为 3 × advert_int + skew_time。track_script:用于扩展健康检查(如检测应用服务状态),故障时触发优先级降低。

五、启动与验证

1、启动服务

systemctl restart keepalived

2、检查 VIP 绑定

在 Master 节点执行:ip addr show eth0 | grep 192.168.1.100
# 应输出:inet 192.168.1.100/24 scope global secondary eth0

3、查看 Keepalived 状态

journalctl -u keepalived -f  # 查看实时日志
# 正常日志示例:VRRP_Instance(VI_1) Transition to MASTER STATE

4、模拟故障切换

1、手动停止 Master 的 Keepalived:

systemctl stop keepalived

2、验证 Backup 是否接管 VIP:

# 在 Backup 节点执行:
ip addr show eth0 | grep 192.168.1.100

六、高级配置

1、多实例负载均衡

为不同服务配置多个 VRRP 实例:

vrrp_instance VI_2 {state MASTERinterface eth0virtual_router_id 52priority 100virtual_ipaddress {192.168.1.200/24 dev eth0}# 其他配置...
}

2、结合 Nginx/Haproxy 实现七层负载均衡

在 Keepalived 节点部署 Nginx/Haproxy,绑定 VIP。通过 Keepalived 监控 Nginx/Haproxy 进程,实现服务级高可用。

7、常见问题处理

1、脑裂(Split-Brain)

现象:主备节点同时持有 VIP。

解决:

检查防火墙是否允许 VRRP 报文。配置 nopreempt 关闭抢占模式。使用单播替代组播。

2、 VIP 无法绑定

原因:网卡未正确配置或 IP 冲突

解决

检查 interface 配置与实际网卡名称是否一致。
使用 arping 检测 VIP 是否被占用:
arping -I eth0 192.168.1.100

相关文章:

高可用 Keepalived 服务部署流程

一、配置文件 vim /etc/keepalived/keepalived.confGLOBAL CONFIGURATION --- 全局配置部分VRRPD CONFIGURATION --- VRRP协议配置部分LVS CONFIGURATION --- LVS服务管理配置部分[rootlb01 ~]# cat /etc/keepalived/keepalived.…...

【新春特辑】2025年1月科技浪潮中的AI最新时事与科技趋势

2025年1月科技浪潮中的AI最新时事与科技趋势 一、AI科技时事 人工智能代理(AI Agent)的发展 最新进展:人工智能代理正逐步成为科技领域的新热点。这些代理能够自主执行特定任务,如管理日程、回复邮件等。然而,它们仍…...

解决Django非ORM模型提示初始化request问题

提问 Django在DRF时候自定义显示一些非model的字段提示TypeError: Field.__init__() got an unexpected keyword argument request 解答1 错误提示 TypeError: Field.__init__() got an unexpected keyword argument request 显示在创建序列化器实例时,传递了一个…...

G. XOUR

题目链接&#xff1a;Problem - G - Codeforces 题目大意&#xff1a;给你一个n长的序列&#xff0c; 其中你可以将a[i] XOR a[j] 的值 严格小于4的数对进行交换。 你可以操作任何几次&#xff0c; 让最后的数列最小。如果在 x 和 y 不同的第一个位置&#xff0c; xi<yi &…...

有没有个性化的UML图例

绿萝小绿萝 (53****338) 2012-05-10 11:55:45 各位大虾&#xff0c;有没有个性化的UML图例 绿萝小绿萝 (53****338) 2012-05-10 11:56:03 例如部署图或时序图的图例 潘加宇 (35***47) 2012-05-10 12:24:31 "个性化"指的是&#xff1f; 你的意思使用你自己的图标&…...

【RAG】SKLearnVectorStore 避免使用gpt4all会connection err

gpt4all 列表中包含了多个开源的大模型,如 Qwen2.5、Llama 3、DeepSeek、Mistral 等,但 不包含 OpenAI 的 GPT-4o。GPT-4o 是 OpenAI 提供的闭源模型,目前只能通过 OpenAI API 或 ChatGPT 官方应用(网页版、移动端)访问,并不支持本地运行,也没有 GGUF 量化格式的模型文件…...

vue框架技术相关概述以及前端框架整合

vue框架技术概述及前端框架整合 1 node.js 介绍&#xff1a;什么是node.js Node.js就是运行在服务端的JavaScript。 Node.js是一个事件驱动I/O服务端JavaScript环境&#xff0c;基于Google的V8引擎。 作用 1 运行java需要安装JDK&#xff0c;而Node.js是JavaScript的运行环…...

Spring Boot + Facade Pattern : 通过统一接口简化多模块业务

文章目录 Pre概述在编程中&#xff0c;外观模式是如何工作的&#xff1f;外观设计模式 UML 类图外观类和子系统的关系优点案例外观模式在复杂业务中的应用实战运用1. 项目搭建与基础配置2. 构建子系统组件航班服务酒店服务旅游套餐服务 3. 创建外观类4. 在 Controller 中使用外…...

牛客周赛 Round 78

题目目录 A-时间表查询&#xff01;解题思路参考代码 B-一起做很甜的梦&#xff01;解题思路参考代码 C-翻之解题思路参考代码 D-乘之解题思路参考代码 E-在树上游玩解题思路参考代码 A-时间表查询&#xff01; \hspace{15pt} 今天是2025年1月25日&#xff0c;今年的六场牛客寒…...

【机器学习】自定义数据集 ,使用朴素贝叶斯对其进行分类

一、贝叶斯原理 贝叶斯算法是基于贝叶斯公式的&#xff0c;其公式为&#xff1a; 其中叫做先验概率&#xff0c;叫做条件概率&#xff0c;叫做观察概率&#xff0c;叫做后验概率&#xff0c;也是我们求解的结果&#xff0c;通过比较后验概率的大小&#xff0c;将后验概率最大的…...

02.01 生产者消费者

请使用条件变量实现2生产者2消费者模型&#xff0c;注意1个生产者在生产的时候&#xff0c;另外一个生产者不能生产。 1>程序代码 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h>…...

mac 手工安装OpenSSL 3.4.0

如果你希望继续安装 openssl-3.4.0 而不是降级到 3.1.1&#xff0c;可以尝试以下解决方案。根据你提供的错误信息&#xff0c;问题可能出在测试阶段&#xff08;make test&#xff09;&#xff0c;我们可以尝试跳过测试或修复测试失败的原因。 --- ### **解决方案&#xff1a…...

kamailio-ACC_JSON模块详解【后端语言go】

要确认 ACC_JSON 模块是否已经成功将计费信息推送到消息队列&#xff08;MQueue&#xff09;&#xff0c;以及如何从队列中取值&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 确认 ACC_JSON 已推送到队列 1.1 配置 ACC_JSON 确保 ACC_JSON 模块已正确配置并启用。以下…...

ArkTS语言介绍

文章目录 一、基本知识声明类型运算符语句函数函数声明可选参数Rest参数返回类型函数的作用域函数调用函数类型箭头函数(又名Lambda函数)闭包函数重载类字段方法构造函数可见性修饰符对象字面量抽象类接口接口属性接口继承抽象类和接口泛型类型和函数泛型类和接口泛型约束泛型…...

海外问卷调查之渠道查,企业经营的指南针

海外问卷调查&#xff0c;是企业调研最常用到的方法&#xff0c;有目的、有计划、有系统地收集研究对象的现实状况或历史状况的一种有效手段&#xff0c;是指导企业经营的有效手段。 海外问卷调查充分运用历史法、观察法等方法&#xff0c;同时使用谈话、问卷、个案研究、测试…...

spring和Mybatis的逆向工程

在现代企业级开发中&#xff0c;使用Spring和MyBatis进行快速、高效的数据库操作是非常常见的。本文将深入探讨如何使用Spring和MyBatis进行逆向工程&#xff0c;帮助开发者自动生成数据库相关的代码&#xff0c;提高开发效率和代码质量。 一、什么是逆向工程 逆向工程是指从…...

【Android】问deepseek存储访问

这些天deepseek爆火&#xff0c;我们来问问android问题看看&#xff0c;如果问android中的应用怎么访问外部存储&#xff0c;回答的很清楚&#xff0c;但是如果问的深入一些&#xff0c;比如Android中是怎么控制让应用不能读取其他应用的外部存储文件的&#xff0c;回答的比较抽…...

Android记事本App设计开发项目实战教程2025最新版Android Studio

平时上课录了个视频&#xff0c;从新建工程到打包Apk&#xff0c;从头做到尾&#xff0c;没有遗漏任何实现细节&#xff0c;欢迎学过Android基础的同学参加&#xff0c;如果你做过其他终端软件开发&#xff0c;也可以学习&#xff0c;快速上手Android基础开发。 Android记事本课…...

python学习——函数的返回值

在 Python 中&#xff0c;函数的返回值决定了调用该函数后得到的结果。默认情况下&#xff0c;如果函数没有使用 return 语句或没有明确返回一个值&#xff0c;函数将返回 None。为了实现更复杂的逻辑&#xff0c;可以通过 return 语句返回多个值、错误信息或其他数据类型。 返…...

【竞技宝】裂变天地S1:BB0-2PARI淘汰出局

北京时间2月1日,DOTA2裂变天地S1继续进行,昨日共进行三场比赛,第三场比赛迎来败者组第二轮PARI对阵BB。以下是本场比赛的详细战报。 第一局: 首局比赛,BB在天辉方,PARI在夜魇方。阵容方面,BB点出了圣堂、卡尔、玛尔斯、奶绿、亚巴顿,PARI则是拿到小娜迦、凤凰、大圣、玛西、萨…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...

LSTM-XGBoost多变量时序预测(Matlab完整源码和数据)

LSTM-XGBoost多变量时序预测&#xff08;Matlab完整源码和数据&#xff09; 目录 LSTM-XGBoost多变量时序预测&#xff08;Matlab完整源码和数据&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 普通的多变量时序已经用腻了&#xff0c;审稿人也看烦了&#…...

【Zephyr 系列 14】使用 MCUboot 实现 BLE OTA 升级机制:构建安全可靠的固件分发系统

🧠关键词:Zephyr、MCUboot、OTA 升级、BLE DFU、双分区、Bootloader、安全固件管理 📌面向读者:希望基于 Zephyr 为 BLE 设备加入安全 OTA 升级功能的开发者 📊预计字数:5200+ 字 🧭 前言:为什么你需要 OTA? 随着设备部署数量增多与产品生命周期延长,远程升级(…...