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

news2024/10/21 20:33:11

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

在IT领域,高可用性(High Availability,

HA)是指系统能够在长时间内持续正常运行而不间断的能力。随着信息化程度的提高,企业的IT系统承担了越来越多的核心业务功能,一旦系统出现故障或不可用,将会给企业带来严重的经济损失甚至声誉损失。因此,保障IT系统的高可用性对企业运营至关重要。Keepalived作为一款基于Linux平台的高可用性解决方案,通过虚拟路由冗余协议(VRRP)来实现负载均衡和故障转移功能,确保在服务器发生故障时,服务能够无缝切换,保持高可用性。本文将详细介绍Keepalived的基本概念、工作原理、配置方法以及实战案例。

一、Keepalived概述

Keepalived主要提供以下功能:

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

Keepalived的工作原理可以分为两部分:VRRP和健康检查。

  • VRRP(Virtual Router Redundancy Protocol) :VRRP是一种选择协议,用于在多个路由器或服务器之间共享虚拟IP地址。在Keepalived中,通常有一个主服务器(Master)和一个或多个备份服务器(Backup)。主服务器负责处理所有通过虚拟IP地址的流量,而备份服务器处于待机状态。如果主服务器发生故障,备份服务器中的一个将被选举为新的主服务器,并接管虚拟IP地址,以确保服务的连续性。
  • 健康检查 :Keepalived提供了多种健康检查机制,包括Layer3(基于IP地址的有效性)、Layer4(基于TCP端口的状态)和Layer5(基于HTTP GET请求的响应结果)等。通过这些检查机制,Keepalived能够实时评估后端服务器的健康状态,并在发现故障时及时将服务器从服务列表中剔除。
二、Keepalived的安装与配置

Keepalived的安装和配置相对简单,可以通过下载源代码编译安装或使用Linux发行版的包管理器进行安装。配置时,需要编写一个配置文件(通常为/etc/keepalived/keepalived.conf),其中包含了全局设置、VRRP实例定义、虚拟服务器设置等。

安装Keepalived

在基于Debian的系统上,可以使用以下命令安装Keepalived:

bash复制代码

 sudo apt-get update    
  
 sudo apt-get install keepalived  

在基于Red Hat的系统上,可以使用以下命令安装Keepalived:

bash复制代码

 yum install -y keepalived  
配置Keepalived

Keepalived的配置文件通常位于/etc/keepalived/keepalived.conf。以下是一个简单的配置示例:

bash复制代码

 global_defs {    
  
   notification_email {    
     root@localhost    
   }    
   notification_email_from keep@localhost    
   smtp_server 127.0.0.1    
   smtp_connect_timeout 30    
   router_id node1    
   vrrp_skip_check_adv_addr    
   vrrp_garp_interval 0    
   vrrp_gna_interval 0    
   vrrp_mcast_group4 224.0.0.1    
 }    
     
 vrrp_instance VI_1 {    
   state BACKUP    
   interface eth1    
   virtual_router_id 1    
   priority 90    
   advert_int 1    
   authentication {    
     auth_type PASS    
     auth_pass qwe123    
   }    
   virtual_ipaddress {    
     1.1.1.100 dev eth1 label eth1:0    
   }    
 }  

在配置文件中,需要定义全局设置(如邮件通知、路由器ID等),以及VRRP实例(如状态、网卡、虚拟路由器ID、优先级、认证信息等)。

三、Keepalived实战案例

以下是一个使用Keepalived实现Nginx高可用性的实战案例。

环境准备

准备两台虚拟机Server1和Server2,IP地址分别为192.168.229.11和192.168.229.12。关闭防火墙、SELinux,配置yum源等步骤请参考相关文档。

Server1配置
  1. 下载并安装Keepalived:
bash复制代码

 yum -y install keepalived  
  1. 创建/etc/keepalived目录,并编辑配置文件:
bash复制代码

 vim /etc/keepalived/keepalived.conf  

配置文件内容如下:

bash复制代码

 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    
   }    
 }  
  1. 开机启动Keepalived和Nginx:
bash复制代码

 systemctl enable keepalived.service    
  
 systemctl start keepalived.service    
 yum -y install nginx    
 systemctl enable nginx.service    
 systemctl start nginx.service  
  1. 修改Nginx默认页面内容,方便测试:
bash复制代码

 vim /usr/share/nginx/html/index.html  

将内容修改为 web111111

Server2配置
  1. 下载并安装Keepalived:
bash复制代码

 yum -y install keepalived  
  1. 创建/etc/keepalived目录,并编辑配置文件:
bash复制代码

 vim /etc/keepalived/keepalived.conf  

配置文件内容如下:

bash复制代码

 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    
   }    
 }  
  1. 开机启动Keepalived和Nginx:
bash复制代码

 systemctl enable keepalived.service    
  
 systemctl start keepalived.service    
 yum -y install nginx    
 systemctl enable nginx.service    
 systemctl start nginx.service  
  1. 修改Nginx默认页面内容,方便测试:
bash复制代码

 vim /usr/share/nginx/html/index.html  

将内容修改为 web222222

测试
  1. 访问VIP(对外虚拟IP) http://192.168.229.100,应该能够看到Server1的Nginx页面web111111
  2. 拔掉Server1的网线,模拟主服务器故障。
  3. 再次访问VIP(对外虚拟IP) http://192.168.229.100,应该能够看到Server2的Nginx页面web222222,说明故障转移成功。
四、Keepalived对Nginx状态未知的解决方案

默认情况下,Keepalived监控的是接口IP状态,无法监控Nginx服务状态。因此,需要编辑一个脚本监控Nginx的状态。

  1. 在Server1和Server2上添加Nginx监控脚本:
bash复制代码

 vim /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.service    
   sleep 5    
   counter=$(ps -C nginx --no-heading  wc -l)    
   if [ "${counter}" = "0" ]; then    
     exit 1    
   fi    
 fi    
 exit 0  
  1. 赋予脚本权限:
bash复制代码

 chmod +x /etc/keepalived/ck_ng.sh  
  1. 修改Keepalived配置文件,引用监控脚本:

在vrrp_instance部分添加 track_script

bash复制代码

 track_script {    
  
   chk_nginx    
 }  
  1. 重启Keepalived:
bash复制代码

 systemctl restart keepalived.service  

通过以上步骤,Keepalived将能够监控Nginx的状态,并在Nginx服务故障时进行相应的处理。

五、总结

Keepalived是一个

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2219235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【EPLAN 2.9】清理Data文件夹的小工具

背景: 随着EPLAN不断使用“C:\Users\Public\EPLAN\Data”文件夹会越来越大(EPLAN2.9部件管理中删除部件不会去删除文件夹内相关资源文件),本工具在于清理文件夹内未被EPLAN关联的宏、图片、文档。仅支持EPLAN 2.9 代码&#xff…

[环境配置]macOS上怎么查看vscode的commit id

macOS的commit id和windows上有点不一样,windows可以在帮助-关于查看 macOS则需要再左边第一个查看

(AtCoder Beginner Contest 375)C - Spiral Rotation

(AtCoder Beginner Contest 375)C - Spiral Rotation 题目大意 给定二维数组 a [ n ] [ n ] , n m o d 2 0 a[n][n],n \mod 20 a[n][n],nmod20 执行 i 1 , 2 , . . . i1,2,... i1,2,... n / 2 n/2 n/2 操作 每次操作对于 ∀ x , y ∈ [ i , n 1 − …

使用 JAX 进行 LLM 分布式监督微调

LLM distributed supervised fine-tuning with JAX — ROCm Blogs (amd.com) 24年1月25日,Douglas Jia 发布在AMD ROCm 博客上的文章。 在这篇文章中,我们回顾了使用 JAX 对基于双向编码器表示(BERT)的大型语言模型(LL…

bash之基本运算符

一.算术运算符 vim test.sh #!/bin/basha10 b20valexpr $a $b echo "a b : $val"valexpr $a - $b echo "a - b : $val"valexpr $a \* $b echo "a * b : $val"valexpr $b / $a echo "b / a : $val"valexpr $b % $a echo "b % a …

pikachu靶场SSRF-curl测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、实现ssrf攻击 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机:本机(127.0.0.1) 靶 机:本机(127.0.0.1) 2、使用工具/软件 测试网址:…

Redis 常用指令详解

Redis是一款开源的、高性能的键值对存储数据库,常用于缓存、会话存储以及其他需要快速访问的数据场景。本文将介绍Redis的一些常用指令,并通过代码示例进行说明。 一、连接操作指令 1. 连接 Redis 服务器 ./redis-cli -h 127.0.0.1 -p 63792. 认证&a…

1.QT概述及C++基础

QT概述及C基础 1.简介2.QT安装3.QT_Creator的基本使用4.C基础 1.简介 概述 Qt 是一个跨平台的应用程序和用户界面框架,用于开发图形用户界面(GUI)应用程序以及命令行工具。它最初由挪威的 Trolltech (奇趣科技)公司开发…

MySQL程序介绍<一>

目录 MySQL程序简介 mysqld - MySQL 服务器 ​编辑 mysql - MySQL 命令⾏客⼾端 MySQL程序简介 1.MySQL安装完成通常会包含如下程序: Linux系统程序⼀般在 /usr/bin⽬录下,可以通过命令查看 windows系统⽬录: 你的安装路径\MySQL Server…

Redis JSON介绍和命令大全

Redis JSON介绍和命令大全 Redis JSON先说说JSON是什么再说说JSON Path先推荐两个网站JSONPath JAVA clents Redis JSON 安装内存json命令语法命令url命令解释JSON.ARRAPPENDJSON.ARRINDEXJSON.ARRINSERTJSON.ARRLENJSON.ARRPOPJSON.ARRTRIMJSON.CLEARJSON.DEBUG MEMORYJSON.DE…

Java 入门基础篇15 - java构造方法以及认识新的关键字

一 今日目标 构造方法static关键字代码块math类package关键字import关键字 二 构造方法概述 2.1 构造方法描述 构造方法是一个特殊方法,作用是创建对象,对对象进行初始化。 ​ 如: 对对象中的成员进行初始化值 2.1 构造方法的特征 1、方…

C/C++每日一练:编写一个栈数据结构

通过编写栈(Stack)数据结构,提升对基本数据结构的理解和运用。这也是掌握更复杂数据结构与算法的基础。栈是计算机科学中的一个重要概念,经常出现在许多算法和应用中。 栈(Stack) 栈是一种后进先出&#x…

【初阶数据结构】计数排序 :感受非比较排序的魅力

文章目录 前言1. 什么是计数排序?2. 计数排序的算法思路2.1 绝对位置和相对位置2.2 根据计数数组的信息来确认 3. 计数排序的代码4. 算法分析5. 计数排序的优缺点6.计数排序的应用场景 前言 如果大家仔细思考的话,可能会发现这么一个问题。我们学的七大…

【C语言】原码 反码 补码

为什么要有原码 反码 补码的概念? 因为在计算机中最终只能识别机器码,是以 0000 0000 二进制作为表示形式,对于一个数,计算机要使用一定的编码方式进行存储,原码 反码 补码是机器存储一个数值的编码方式,最…

技术分享:A-23OH型树脂在汽车涂装废溶剂回收中的应用

在当今汽车制造业竞争激烈的环境下,提高生产效率、降低成本的同时,满足环保要求已成为各制造商追求的核心目标。水性涂料因其环保、节能等多重优势,在汽车涂装领域的应用日益广泛。然而,随之而来的喷涂废溶剂处理问题也日益凸显。…

2024年软件设计师中级(软考中级)详细笔记【7】面向对象技术(下)23种设计模式(分值10+)

目录 前言阅读前必看 第七章 面向对象技术(下)7.3 设计模式(固定4分)7.3.1 设计模式的要素7.3.2 创建型设计模式7.3.2.1 Abstract Factory(抽象工厂)7.3.2.2 Builder(生成器)7.3.2.3…

调整奇数偶数的顺序

//调整奇数偶数的顺序 //输入一个整数数组&#xff0c;实现一个函数 //使得数组中所有的奇数位于数组的前半部分&#xff0c;所有的偶数位于数组的后半部分 #include<stdio.h> void tz(int a[],int sz) {int i 0;int j 0;int q 0;int c[100] { 0 };int b[100] { 0 …

Qt第十三天:网络编程:TCP和UDP的使用

我发现了有些人喜欢静静看博客不聊天呐&#xff0c; 但是ta会点赞。 这样的人呢帅气低调有内涵&#xff0c; 美丽大方很优雅。 说的就是你&#xff0c; 不用再怀疑哦 ❤️TCP&#xff1a; 一、创建项目&#xff0c;命名为Server&#xff0c;继承QWidget 二、添加Qt设计师…

Axure重要元件三——中继器添加数据

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 本节课&#xff1a;中继器添加数据 课程内容&#xff1a;添加数据项、自动添加序号、自动添加数据汇总 应用场景&#xff1a;表单数据的添加 案例展示&#xff1a; 步骤…

算法: 模拟题目练习

文章目录 模拟替换所有的问号提莫攻击Z 字形变换外观数列数青蛙 总结 模拟 替换所有的问号 按照题目的要求写代码即可~ public String modifyString(String ss) {int n ss.length();if (n 1) {return "a";}char[] s ss.toCharArray();for (int i 0; i < n; i…