Nginx——Keepalived的原理与配置

news2024/12/23 22:33:50

摘要

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除, 同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中, 这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

keepalived工作在IP/TCP协议栈的IP层,TCP层,及应用层,工作原理基于VRRP协议。

  • 网络层(layer 3):Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包,(既我们平时用的Ping程序), 如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除。
  • 传输层(layer 4):Keepalived以TCP端口的状态来决定服务器工作正常与否,如web server的服务端口一般是80, 如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
  • 应用层(layer 5):只要针对应用上的一些探测方式,如URL的get请求,或者对nginx脚本检测等; 可以根据用户自定义添加脚本针对特定的服务进行状态检测,当检测结果与用户设定不一致,则把这台服务器从服务器群中剔除。

一、VRRP协议与工作原理

VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议是一种容错的主备模式的协议, 当网络设备发生故障时,可以不影响主机之间通信情况下进行设备切换,并且相对用户时切换过程时透明的。

路由器开启VRRP功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为主用路由器,优先级低的成为备用路由器。 主用路由器拥有虚拟IP与虚拟MAC,实现各种网络功能,并发送VRRP通告报文,通知备用路由器组内的其他路由器自己工作正常; 备用路由器则启动定时器等待通告报文。抢占模式下,当备用路由器收到VRRP通告报文后,会将自己的优先级与通告报文中的优先级进行比较。 如果大于通告报文中的优先级,则成为主用路由器;否则将保持备用状态。非抢占模式下,只要主用路由器不发生故障,就算备用路由器的优先级再高, 也始终保持备用状态。如果备用路由器的定时器超时后仍未收到主用路由器发送来的VRRP通告报文,则认为主用路由器已经无法正常工作, 备份组内的路由器根据优先级选举出主用路由器。

  • 一个VRRP路由器有唯一的标识:VRID,范围为0—255。该路由器对外表现为唯一的虚拟MAC地址,地址的格式为00-00-5E-00-01-[VRID]。
  • 同一台路由器可以加入多个备份组,在不同备份组中有不同的优先级,使得该路由器可以在一个备份组中作为主用路由器,在其他的备份组中作为备用路由器。
  • 提供了两种安全认证措施:明文认证和IP头认证。

二、VRRP选举机制原理

  • 虚拟IP拥有者,如果某台路由器的IP地址与虚拟路由器的VIP地址一致,那么这台就会被选为主用路由器。
  • 优先级较高者,如果没有虚拟IP拥有者,优先级数值大的路由器会被选举出,优先级范围0~255。
  • IP地址较大者,如果优先级一样高,IP地址数值大的路由器会被选举出。

三、keepalived配置解析

global_defs是对全局一些参数做出设置。

global_defs {
   notification_email {
   # 接受邮件地址
     sysadmin@firewall.loc
   }
   notification_email_from master@keepalived.com
   # 邮件头地址
   smtp_server 192.168.200.1
   # 邮件服务smtp地址
   smtp_connect_timeout 30
   # smtp连接超时时间
   router_id LVS_DEVEL
   # 本地机器的id,可以为本地主机名
   vrrp_skip_check_adv_addr
   # 检查收到的通告中的所有地址会非常耗时,设置此参数就不会检查收到过的主路由器的通告
   vrrp_strict
   # 严格遵守VRRP协议,开启这个功能会在iptables中添加下面一条规则,导致VIP ping不通
   # Chain INPUT (policy ACCEPT)
   # target     prot opt source               destination
   # DROP       all  --  0.0.0.0/0            172.30.100.200
   vrrp_garp_interval 0
   # 一个网卡上每组gratuitous arp消息之间的延迟时间,默认为0
   vrrp_gna_interval 0
   # 一个网卡上每组na消息之间的延迟时间,默认为0
   vrrp_iptables
   # 设置此项则不会开启任何iptables规则
   vrrp_mcast_group4 224.0.0.18
   # 主备间通告状态信息的组播地址,通常为224网段
}

vrrp_script只是定义一个对集群服务的健康状态检测脚本, 并根据监控的结果状态能实现优先动态调整;这种方式在做高可用nginx或者haproxy时需要用到。

vrrp_script chk_nginx {
    script
    # 添加要定期执行的检测脚本,它的退出代码将被记录在监视它的所有VRRP实例中
    interval 2
    # 两次脚本调用的间隔,默认为1秒
    weight -20
    # 如果检测条件成立,权重-20
}

vrrp_instance是虚拟路由实例的配置段, 用来定义当前keepalived节点的运行角色为主或是备,定义当前节点的优先级,设置虚拟IP等信息。

vrrp_instance VI_1 {
# 定义虚拟路由器,实例名称VI_1主备必须相同
    state MASTER
    # 定义此节点为MASTER
    interface eth0
    # 绑定为当前虚拟路由器使用的物理接口
    virtual_router_id 51
    # 设置虚拟路由id,范围0~255,主备必须相同
    priority 100
    # 设置此节点优先级
    advert_int 1
    # 设置主备节点间vrrp通告状态的时间间隔<br><br>    nopreempt
    authentication {
    # 设置主备间验证方式
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    # 设置虚拟路由VIP
        172.30.200.1
    }
    track_script {
    # 添加监控脚本,脚本名为vrrp_script中定义的脚本
        chk_nginx
    }
}

virtual_server中定义了LVS工作模式及调度算法等信息,real_server则是定义后端的真实服务器。

virtual_server 172.30.200.1 80 {
# 定义虚拟主机IP与端口
    delay_loop 6
    # 健康状态检测时间间隔
    lb_algo rr
    # lvs调度算法
    lb_kind NAT
    # lvs工作类型
    persistence_timeout 50
    # lvs持久连接超时时间
    protocol TCP
    # 定义服务协议
    sorry_server 172.30.10.14 80
    # 当后端所有主机不可达时,就会被定义这台主机,只是为了展示sorry页面
    real_server 172.30.10.12 80 {
    # 配置后端主机
        weight 1
        # 调度权重
        HTTP_GET {
        # 应用层检测
            url {
              path /testurl/test.jsp
              # 定义被检测的URL
              status_code 200
              # 判断上述URL健康状态的响应码
              digest 640205b7b0fc66c1ea91c463fac6334d
              # 判断上述URL健康状态的内容的hash码
            }
            connect_timeout 3
            # 检测连接的超时时间
            nb_get_retry 3
            # 重试次数
            delay_before_retry 3
            # 重试前等待时间
        }
        TCP_CHECK {
             connect_ip 172.30.10.12
             # 选择要连接的IP地址。默认值为realserver IP
             connect_port 80
             # 选择要连接的端口。默认值为realserver PORT
             bindto 172.30.10.11
             # 用于发起连接的可选源地址
             bind_port 10000
             # 用于发起连接的可选源端口
             connect_timeout 3
             # 连接超时时间
        }
    }
    real_server 172.30.10.12 80 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

博文参考

https://keepalived.org/

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

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

相关文章

python求解带约束的优化问题

带约束的优化问题可被定义为&#xff1a; 在python中&#xff0c;可以使用scipy的optimize包进行求解&#xff0c;具体求解函数为linprog&#xff0c;下面举例说明求解方法&#xff1a; 假设问题被定义为&#xff1a; 首先&#xff0c;求解最大值问题&#xff0c;我们可以通…

Spring Security 源码解读 :认证总览

Spring Security 提供如下几种认证机制&#xff1a; Username & PasswordOAuth2.0 LoginSAML 2.0 LoginRemember MeJAAS AuthenticationPre-authentication ScenariosX509 Authentication 这里使用Spring Boot 2.7.4版本&#xff0c;对应Spring Security 5.7.3版本 Serv…

LeetCode题目笔记——1588. 所有奇数长度子数组的和

文章目录题目描述题目难度——简单方法一&#xff1a;暴力代码/C代码/Python方法二&#xff1a;前缀和代码/C代码/Python总结题目描述 给你一个正整数数组 arr &#xff0c;请你计算所有可能的奇数长度子数组的和。 子数组 定义为原数组中的一个连续子序列。 请你返回 arr 中…

MySql性能优化(六)索引监控

文章目录索引监控Handler_read_firstHandler_read_keyHandler_read_lastHandler_read_nextHandler_read_prevHandler_read_rndHandler_read_rnd_next索引监控 SHOW STATUS LIKE Handler_read%解释一下各个参数的含义 Handler_read_first 通过index获取数据的次数 Handler_r…

在cmd中遍历局域网内的IP命令解析

简单的方法 1&#xff0c;直接通过浏览器访问路由器&#xff0c;通过路由器的页面查看。2&#xff0c;网络中很多扫描网络的软件&#xff0c;3&#xff0c;自己使用cmd命令查看 有时候自己也觉得&#xff0c;有简单的方式还用这麻烦的干嘛。但遇到不知道路由的登录密码呢&…

Djiango零基础-快速了解基本框架笔记-附案例

初识Djiango 1. 安装djiango pip install django4.1 -i https://mirrors.aliyun.com/pypi/simple/C:\python38- python.exe- Scripts- pip.exe- djiango-admin.exe 【工具&#xff0c;创建djiango项目】- Lib- 内置模块- site-packages- openpyxl- python-docx- flask- djia…

IPV6实验(2.3)

目标&#xff1a; 一、首先将r2、r3、r4这个公网先弄通 [r2]int gi 0/0/0 [r2-GigabitEthernet0/0/0]ip add 23.1.1.1 24 [r3]int gi 0/0/0 [r3-GigabitEthernet0/0/0]ip add 23.1.1.2 24 [r3-GigabitEthernet0/0/0]int gi 0/0/1 [r3-GigabitEthernet0/0/1]ip add 34.1.1.1 2…

YOLO的学习

如何评价Alexey Bochkovskiy团队提出的YoloV7&#xff1f; - 知乎 1, Selective Search&#xff0c;RCNN和FasterRCNN 机器视觉(CV) 超简指南 选择性搜索 Selective Search_哔哩哔哩_bilibili 【精读RCNN】03选择性搜索&#xff0c;selective search_哔哩哔哩_bilibili …

win10系统安装

系统安装 文章目录系统安装1.工具下载2.制作启动盘3. win 10镜像下载4.进入PE系统1.工具下载 需要准备一个至少16 GB的U盘&#xff0c;工具下载链接 U盘&#xff1a;https://share.weiyun.com/aHhPh16e 迅雷&#xff1a;https://dl.xunlei.com/ win 10 镜像链接&#xff1a…

大咖说·计算讲谈社|当我们在谈目标时,究竟在谈什么?

本讲内容&#xff0c;节选自阿里巴巴研究员吴翰清&#xff08;道哥&#xff09;面向团队的内部讲话&#xff0c;经删减整理后&#xff0c;作为【计算讲谈社】第十六讲公开分享。 讲师介绍 吴翰清&#xff08;道哥&#xff09;&#xff1a;阿里巴巴研究员&#xff0c;阿里巴巴、…

33复杂美,上链不复杂

“链上复杂美&#xff0c;上链不复杂。” 33复杂美座落在美丽的西子湖畔&#xff1a;杭州&#xff0c;并在上海、南京、宁波、海南皆有设立分部。公司员工超过100人&#xff0c;70%为技术人员&#xff0c;吸引了来自甲骨文、阿里等优秀人才加盟。复杂美为浙江省区块链技术应用协…

windows 编译telegram桌面客户端

目的 主要是为了研究一下人家的软件架构。 步骤 前置条件 梯子至少10G硬盘空间 安装第三方应用 请更新至最新版。 GITCmakePython3visual studio 2022Qt Visual Studio Tools: Open Extensions -> Manage Extensions Go to Online tab Search for Qt Install Qt Visu…

系统学习Python——2D绘图库Matplotlib:绘图函数matplotlib.pyplot.plot

分类目录&#xff1a;《系统学习Python》总目录 matplotlib.pyplot是Matplotlib的基于状态的接口。它提供了一种隐式的、类似MATLAB的绘图方式。它还会在您的屏幕上打开图形&#xff0c;并充当图形GUI管理器。 语法 matplotlib.pyplot.plot(*args, scalexTrue, scaleyTrue , …

威联通NAS共享文件夹挂载到linux服务器下

威联通虚机中centos挂载共享文件夹设置方法 1、登录到QTS。 2、控制台–>Win/Mac/NFS选项&#xff0c;在Linux NFS中开启NFS v3或NFSv4服务。 3、设置文件夹权限&#xff1a; 控制台–>共享文件夹中&#xff0c;找到需要共享的文件夹&#xff0c;编辑文件夹权限。 选…

Golang数据竟态

本文以一个简单事例的多种解决方案作为引子&#xff0c;用结构体Demo来总结各种并发读写的情况 一个数据竟态的case package mainimport ("fmt""testing""time" )func Test(t *testing.T) {fmt.Print("getNum(): ")for i : 0; i <…

「Python|场景案例」如何将多个视频合并成多个子画面并排的单个视频?

本文主要介绍如何将多个视频画面合并到一个视频中&#xff0c;使得合成后的视频画面是原视频的并排画面。 文章目录场景描述准备工作处理步骤源代码处理效果展示场景描述 在某些音视频剪辑的场景下我们希望一个视频画面显示多个子画面&#xff0c;比如&#xff1a; 乐器演奏视…

【MySQL】数据库概述

文章目录1、数据库1.1 数据库作用1.2 数据库的相关概念1.3 数据库与数据库管理系统的关系2、MySQL3、RDBMS与非RDBMS3.1 关系型数据库(RDBMS)3.2 非关系型数据库(非RDBMS)3.2.1 键值型数据库3.2.2 文档型数据库3.2.3 搜索引擎数据库3.2.4 列式数据库3.2.5 图形数据库4、关系型数…

基于微信小程序的短视频管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端框架&#xff1a;VUE 数据库&#xff1a;MySQL5.7 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录 一、项目简介 二…

推荐一个跨平台支持Word, Excel, CSV, Email等30多种格式的操作库

更多开源项目请查看&#xff1a;一个专注推荐.Net开源项目的榜单 在我们日常项目开发中&#xff0c;经常需要解析操作文档&#xff0c;比如Office文档、Email文件、PDF、Xml、图片、Mp3等音频文件&#xff0c;操作Office、PDF文件我们需要用到IFilter&#xff0c;操作文本、图片…

【C++】引用与指针

专栏放在【C知识总结】&#xff0c;会持续更新&#xff0c;期待支持&#x1f339;引用引用的概念在C中&#xff0c;引用的本质其实就是给一个已经存在的变量”起别名“。也就是说&#xff0c;引用与它所引用的对象共用一块空间。&#xff08;同一块空间的多个名字&#xff09;就…