Keepalived:构建高可用性的秘密武器
Keepalived:构建高可用性的秘密武器
在现代的IT环境中,高可用性是确保业务连续性和用户体验的关键要素。一旦系统出现故障或停机,企业可能会面临巨大的经济损失和声誉损害。因此,实施高可用性解决方案至关重要。Keepalived作为一款开源的高可用性软件,基于VRRP(虚拟路由冗余协议)实现负载均衡和故障转移,成为众多企业保障服务连续性的首选工具。本文将深入探讨Keepalived的基本概念、工作原理、配置方法以及实战案例,以帮助读者更好地理解和应用这一技术。
一、Keepalived概述
Keepalived是一个基于Linux平台的高可用性解决方案,通过VRRP协议和健康检查机制,确保服务器故障时服务能够无缝切换,保持系统的高可用性。它支持多种负载均衡算法,如轮询、最小连接等,有助于分散流量,提高服务的性能和可靠性。
Keepalived的核心功能包括:
- 高可用性 :通过VRRP协议,Keepalived可以监控服务器的状态,并在主服务器故障时自动将服务切换到备份服务器,确保服务的连续性。
- 负载均衡 :支持多种负载均衡算法,帮助分散流量,提高服务的可用性和性能。
- 健康检查 :定期对后端服务器进行健康检查,确保只有健康的服务器参与服务。
Keepalived的工作原理主要分为两部分:VRRP和健康检查。VRRP用于在多个路由器或服务器之间共享虚拟IP地址,而健康检查则用于实时评估后端服务器的健康状态。
二、VRRP协议详解
VRRP(Virtual Router Redundancy
Protocol)是一种选择协议,用于在多个路由器或服务器之间共享虚拟IP地址。在Keepalived中,通常有一个主服务器(Master)和一个或多个备份服务器(Backup)。主服务器负责处理所有通过虚拟IP地址的流量,而备份服务器则处于待机状态。如果主服务器发生故障,备份服务器中的一个将被选举为新的主服务器,并接管虚拟IP地址,以确保服务的连续性。
VRRP协议的主要组成部分包括:
- 虚拟路由器 :由多个物理路由器或服务器组成的虚拟设备,共享一个虚拟IP地址。
- Master和Backup :主服务器负责处理流量,备份服务器处于待机状态,随时准备接管主服务器的任务。
- 虚拟IP地址 :分配给虚拟路由器的IP地址,用于客户端访问。
三、Keepalived的配置与实战案例
环境准备
在配置Keepalived之前,需要准备两台虚拟机作为主服务器和备份服务器。以下是环境的基本配置:
- Server1(主服务器) :IP地址192.168.229.11
- Server2(备份服务器) :IP地址192.168.229.12
关闭防火墙和SELinux,配置YUM源,确保两台服务器可以相互通信。
安装Keepalived
在两台服务器上分别安装Keepalived:
bash复制代码yum -y install keepalived
配置Keepalived
- Server1(主服务器)的配置
创建 /etc/keepalived/keepalived.conf
文件,并添加以下内容:
bash复制代码!Configuration File for keepalived global_defs { router_id 1 } vrrp_instance VI_1 { state MASTER interface ens33 mcast_src_ip 192.168.229.11 virtual_router_id 55 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.229.100/24 } }
启动Keepalived和Nginx服务:
bash复制代码systemctl enable keepalived.service systemctl start keepalived.service yum -y install nginx systemctl enable nginx.service systemctl start nginx.service
修改Nginx默认页面内容,以便更直观地感受高可用性。
- Server2(备份服务器)的配置
创建 /etc/keepalived/keepalived.conf
文件,并添加以下内容:
bash复制代码!Configuration File for keepalived global_defs { router_id 2 } vrrp_instance VI_1 { state BACKUP interface ens33 mcast_src_ip 192.168.229.12 virtual_router_id 55 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.229.100/24 } }
启动Keepalived和Nginx服务:
bash复制代码systemctl enable keepalived.service systemctl start keepalived.service yum -y install nginx systemctl enable nginx.service systemctl start nginx.service
修改Nginx默认页面内容,以便与主服务器区分。
测试Keepalived
访问虚拟IP地址 http://192.168.229.100
,应该能够看到主服务器的Nginx页面。拔掉主服务器的网线,再次访问虚拟IP地址,应该能够看到备份服务器的Nginx页面,说明Keepalived的故障转移功能已经生效。
解决Keepalived对Nginx状态未知的问题
默认情况下,Keepalived监控的是接口IP状态,无法监控Nginx服务状态。因此,需要编写一个脚本监控Nginx的状态。
在两台服务器上分别添加Nginx监控脚本 /etc/keepalived/ck_ng.sh
:
bash复制代码#!/bin/bash # 检查nginx进程是否存在 counter=$(ps -C nginx --no-heading wc -l) if [ "${counter}" = "0" ]; then # 尝试启动一次nginx,停止5秒后再次检测 systemctl start nginx sleep 5 if [ $(ps -C nginx --no-heading wc -l) -eq 0 ]; then exit 1 fi fi exit 0
赋予脚本执行权限,并在Keepalived配置文件中引用该脚本:
bash复制代码chmod +x /etc/keepalived/ck_ng.sh
在Keepalived配置文件中添加 track_script
项:
bash复制代码track_script { chk_nginx }
重启Keepalived服务:
bash复制代码systemctl restart keepalived.service
现在,Keepalived将能够监控Nginx的状态,并在Nginx服务不可用时触发故障转移。
四、总结
Keepalived是一款功能强大的高可用性解决方案,通过VRRP协议和健康检查机制,确保了关键服务在服务器故障时的连续性和可靠性。本文详细介绍了Keepalived的基本概念、工作原理、配置方法以及实战案例,帮助读者更好地理解和应用这一技术。正确配置和使用Keepalived对于维护服务的稳定性和性能至关重要,无论是小型企业还是大型企业,都可以通过Keepalived来提升其IT基础设施的可靠性和可用性。
相关文章:
Keepalived:构建高可用性的秘密武器
Keepalived:构建高可用性的秘密武器 在现代的IT环境中,高可用性是确保业务连续性和用户体验的关键要素。一旦系统出现故障或停机,企业可能会面临巨大的经济损失和声誉损害。因此,实施高可用性解决方案至关重要。Keepalived作为一…...
【C++刷题】力扣-#228-汇总区间
题目描述 给定一个整数数组 nums,返回所有唯一的区间,这些区间包含数组中的每个数字,形式为 [a, b],其中 a 和 b 是数字的最小和最大值。 示例 示例 1: 输入: nums [0,1,2,4,5,7] 输出: [["0,2"],["4,5"],…...
交通银行核心系统分布式实践
1、背景:客户需求和痛点 交通银行已有核心ECIF、贷记卡核心、借记卡新核心等数百套系统上线OceanBase分布式数据库。其中,贷记卡(俗称信用卡)属于 A类核心业务系统,支撑了信用卡授权、用卡、额度、账务等核心业务功能,约7千万卡量,日交易量和数据量都在千万级别。 交通银行…...
深入剖析:.Net8 引入非root用户运行的新特性提升应用安全性
在云原生的时代,容器化技术如Docker和Kubernetes已经成为现代软件开发的重要基石。随着.Net8的发布,微软进一步优化了这些环境的支持,特别是在提升容器应用安全性方面迈出了重要一步。本文将深入探讨.Net8中非根用户功能的新增特性࿰…...
多签机制简明理解及实例说明
目录 Multisignature机制简明理解及实例说明 Multisignature机制中的公钥、私钥、Nonce及签名验签详解 加密货币托管账户的多重签名机制 Multisignature机制简明理解及实例说明 一、基本概念 Multisignature(多重签名)机制是一种先进的加密技术,它允许一笔交易必须由多…...

PCL 点云配准 LM-ICP算法(精配准)
目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 法线计算函数 2.1.2 执行 LM-ICP 函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新&a…...
Mac 编译 Unreal 源码版本
在Mac上编译Unreal Engine源码需要遵循以下步骤: 安装必要的依赖项: Xcode Python(建议使用2.7版本) Java(使用JDK 8) CMake Ninja SVN(用于获取某些依赖项) 获取Unreal Engi…...

开源vGPU方案 HAMi实现细粒度GPU切分——筑梦之路
前言 为什么需要 GPU 共享、切分等方案? 在使用GPU的过程中我们会发现,直接在裸机环境使用,都可以多个进程共享 GPU,怎么到 k8s 环境就不行了? 1. 资源感知 在 k8s 中资源是和节点绑定的,对于 GPU 资源…...

性能测试工具JMeter
本次使用的博客系统的url: http://8.137.19.140:9090/blog_edit.html 1. JMeter介绍 环境要求:要求java,jdk版本大于8; Apache JMeter 是 Apache 组织基于 Java 开发的压⼒测试⼯具,⽤于对软件做性能测试;…...
Kubernetes ETCD的恢复与备份
在 Kubernetes 中,ETCD 扮演着至关重要的角色: 1. 集群状态存储 2. 服务发现 3. 配置管理 4. 分布式锁和协调 5. 故障恢复 ETCD 存储了 Kubernetes 集群中所有的状态信息,包括节点、Pod、Service、ConfigMap、Secrets 等。ETCD 支持服务发现…...

笔记整理—linux网络部分(2)Linux网络框架
前文说过,在OSI中将网络分为7层,这是理论上将其分为7层,但实际上可以将其分为4层。如TCP协议就是将其分为4层。理论只是提出一种指导意见,但不是行业范本。 驱动层只关系有没有接到包,不关心包经过多少次转发ÿ…...

深度学习500问——Chapter17:模型压缩及移动端部署(5)
文章目录 17.9.5 ShuffleNet- v1 17.9.6 ShuffleNet- v2 17.10 现有移动端开源框架及其特点 17.10.1 NCNN 17.10.2 QNNPACK 17.9.5 ShuffleNet- v1 ShuffleNet 是Face团队提出的,晚于MobileNet两个月在arXiv上公开《ShuffleNet: An Extremely Efficient…...

分布式ID多种生成方式
分布式ID 雪花算法(时间戳41机器编号10自增序列号10) 作用:希望ID按照时间进行有序生成 原理: 即一台带有编号的服务器在毫秒级时间戳内生成带有自增序号的ID,这个ID保证了自增性和唯一性 雪花算法根据结构的生成ID个数的上线时…...

时间序列预测(六)——循环神经网络(RNN)
目录 一、RNN的基本原理 1、正向传播(Forward Pass): 2、计算损失(Loss Calculation) 3、反向传播——反向传播通过时间(Backpropagation Through Time,BPTT) 4、梯度更新&…...
Day2算法
Day2算法 1.算法的基本概念 算法: 对特定问题求解步骤的一种描述,他叔指令的有限序列,其中的每条指令表示一个或多个操作。 算法的特性: 1.有穷性: 一个算法必须总在执行有穷步之后结束,且每一步都可…...
智洋创新嵌入式面试题汇总及参考答案
堆和栈有什么区别 内存分配方式 栈由编译器自动分配和释放,函数执行时,函数内局部变量等会在栈上分配空间,函数执行结束后自动回收。例如在一个简单的函数int add(int a, int b)中,参数a和b以及函数内部的一些临时变量都会在栈上分配空间,函数调用结束后这些空间就会被释放…...
无线网卡知识的学习-- wireless基础知识(nl80211)
1. 基本概念 mac80211 :这是最底层的模块,与hardware offloading 关联最多。 mac80211 的工作是给出硬件的所有功能与硬件进行交互。(Kernel态) cfg80211:是设备和用户之间的桥梁,cfg80211的工作则是观察跟踪wlan设备的实际状态. (Kernel态) nl80211: 介于用户空间与内核…...
除了 Python,还有哪些语言适合做爬虫?
以下几种语言也适合做爬虫: 一、Java* 优势: 强大的性能和稳定性:Java 运行在 Java 虚拟机(JVM)上,具有良好的跨平台性和出色的内存管理机制,能够处理大规模的并发请求和数据抓取任务&#x…...

JS | JS中类的 prototype 属性和__proto__属性
大多数浏览器的 ES5 实现之中,每一个对象都有__proto__属性,指向对应的构造函数的prototype属性。Class 作为构造函数的语法糖,同时有prototype属性和__proto__属性,因此同时存在两条继承链。 构造函数的子类有prototype属性。 …...

15分钟学Go 第3天:编写第一个Go程序
第3天:编写第一个Go程序 1. 引言 在学习Go语言的过程中,第一个程序通常是“Hello, World!”。这个经典的程序不仅教会你如何编写代码,还引导你理解Go语言的基本语法和结构。本节将详细介绍如何编写、运行并理解第一个Go程序,通过…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...