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程序,通过…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
