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

Keepalived:构建高可用性的秘密武器

Keepalived:构建高可用性的秘密武器

在现代的IT环境中,高可用性是确保业务连续性和用户体验的关键要素。一旦系统出现故障或停机,企业可能会面临巨大的经济损失和声誉损害。因此,实施高可用性解决方案至关重要。Keepalived作为一款开源的高可用性软件,基于VRRP(虚拟路由冗余协议)实现负载均衡和故障转移,成为众多企业保障服务连续性的首选工具。本文将深入探讨Keepalived的基本概念、工作原理、配置方法以及实战案例,以帮助读者更好地理解和应用这一技术。

一、Keepalived概述

Keepalived是一个基于Linux平台的高可用性解决方案,通过VRRP协议和健康检查机制,确保服务器故障时服务能够无缝切换,保持系统的高可用性。它支持多种负载均衡算法,如轮询、最小连接等,有助于分散流量,提高服务的性能和可靠性。

Keepalived的核心功能包括:

  1. 高可用性 :通过VRRP协议,Keepalived可以监控服务器的状态,并在主服务器故障时自动将服务切换到备份服务器,确保服务的连续性。
  2. 负载均衡 :支持多种负载均衡算法,帮助分散流量,提高服务的可用性和性能。
  3. 健康检查 :定期对后端服务器进行健康检查,确保只有健康的服务器参与服务。

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
  1. 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默认页面内容,以便更直观地感受高可用性。

  1. 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中非根用户功能的新增特性&#xff0…...

多签机制简明理解及实例说明

目录 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 开发的压⼒测试⼯具,⽤于对软件做性能测试&#xff1b…...

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层。理论只是提出一种指导意见,但不是行业范本。 驱动层只关系有没有接到包,不关心包经过多少次转发&#xff…...

深度学习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>…...

高危文件识别的常用算法:原理、应用与企业场景

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

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 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开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...