当前位置: 首页 > 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程序,通过…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...

python打卡day49@浙大疏锦行

知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 一、通道注意力模块复习 & CBAM实现 import torch import torch.nn as nnclass CBAM(nn.Module):def __init__…...

使用python进行图像处理—图像滤波(5)

图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值,以达到平滑(去噪)、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算,…...

el-amap-bezier-curve运用及线弧度设置

文章目录 简介示例线弧度属性主要弧度相关属性其他相关样式属性完整示例链接简介 ‌el-amap-bezier-curve 是 Vue-Amap 组件库中的一个组件,用于在 高德地图 上绘制贝塞尔曲线。‌ 基本用法属性path定义曲线的路径,可以是多个弧线段的组合。stroke-weight线条的宽度。stroke…...

【Vue】scoped+组件通信+props校验

【scoped作用及原理】 【作用】 默认写在组件中style的样式会全局生效, 因此很容易造成多个组件之间的样式冲突问题 故而可以给组件加上scoped 属性, 令样式只作用于当前组件的标签 作用:防止不同vue组件样式污染 【原理】 给组件加上scoped 属性后…...