keepalived原理以及lvs、nginx跟keeplived的运用

news2024/10/6 20:35:36

keepalived基础

keepalived的原理是根据vrrp协议(主备模式)去设定的

vrrp技术相关原理

状态机; 

优先级0~255 心跳线1秒

 vrrp工作模式 

双主双备模式

VRRP负载分担过程

vrrp安全认证:使用共享密匙 

 keepalived工具介绍

keepalived是专门为LVS和HA(高可用主备模式)设计的一款健康行检查工具

举例说明:当有两台lvs服务器工作时,出现故障,而lvs本身又无法健康性检查,所以借助keepalived工具

当主服务器出现故障,此时备服务器顶上,当主服务器恢复时,有三种模式

1.抢占模式(当主恢复好时,立马切换到这)

2.不抢占模式(当主恢复好时,依然在备服务器上运行)

3.延迟抢占(当主恢复好时,多少秒从备切换到主上)

 keepalived架构

 

 keepalived相关文件

  • 软件包名:keepalived

  • 主程序文件:/usr/sbin/keepalived

  • 主配置文件:/etc/keepalived/keepalived.conf

  • 配置文件示例:/usr/share/doc/keepalived/

  • Unit File:/lib/systemd/system/keepalived.service

  • Unit File的环境配置文件:

  • /etc/sysconfig/keepalived CentOS

主配置文件详解: 

/etc/keepalived/keepalived.conf 
global_defs {
 notification_email {
 root@localhost
 #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
 root@localhost
  360601212@qq.com 
 }
 notification_email_from keepalived@localhost  
 #发邮件的地址
 smtp_server 127.0.0.1     
 #邮件服务器地址
 smtp_connect_timeout 30   
 #邮件服务器连接timeout
 router_id R1
 #每个keepalived主机唯一标识,建议使用当前主机名,但多节点重名不影响
 vrrp_skip_check_adv_addr  
 #对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查
vrrp_strict 
#严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1.无VIP地址 2.配置了单播邻居 3.在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置。
 vrrp_garp_interval 0 
 #gratuitous ARP messages 免费ARP报文发送延迟,0表示不延迟
 vrrp_gna_interval 0 
 #unsolicited NA messages (不请自来)消息发送延迟
 vrrp_mcast_group4 224.0.0.18 
 #指定组播IP地址范围:224.0.0.0到239.255.255.255,默认值:224.0.0.18 
 vrrp_iptables        
 #此项和vrrp_strict同时开启时,则不会添加防火墙规则,如果无配置vrrp_strict项,则无需启用此项配置
}

 

 切记:在修改配置文件的时候,记得备份,以防万一出错

配置文件讲解

简要来说,全局配置只需要改三处

1.自己的ip  2.路由id名字 3.严格模式关闭

 给lvs调度器设置:

state MASTER|BACKUP
#当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
interface IFACE_NAME 
#绑定为当前虚拟路由器使用的物理接口,如:eth0,bond0,br0,可以和VIP不在一个网卡
virtual_router_id VRID 
#每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一
priority 100 
#当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同

advert_int 1
#vrrp通告的时间间隔,默认1s


authentication { 
#认证机制
 auth_type AH|PASS   
 #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
 auth_pass <PASSWORD> 
 #预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样
}
include    /etc/keealived/conf.d/*.conf
virtual_ipaddress { 
#虚拟IP,生产环境可能指定上百个IP地址
 <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
 192.168.200.100 
 #指定VIP,不指定网卡,默认为,注意:不指定/prefix,默认为/32
 192.168.200.101/24 dev eth1   
 #指定VIP的网卡,建议和interface指令指定的岗卡不在一个网卡
 192.168.200.102/24 dev eth2 label eth2:1 
 #指定VIP的网卡label 
}
track_interface { 
#配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移
 eth0
 eth1
 …
}

 

如果当项目中,有很多的虚拟ip,则建立子配置文件

虚拟服务器端的具体配置

  delay_loop 6
    #健康间隔时间6秒
    lb_algo rr
    #调度算法轮询
    lb_kind DR
    #lvs模式为DR 
    persistence_timeout 0
    #连接保持时间改为0 否则 无法体现效果
    protocol TCP
    #采用协议

 

 真实服务器端配置:

   weight 1
        #45行删除
        #节点权重
        TCP_CHECK{
            connect_port 80
            #检查目标端口
            connect_timeout 3
            #连接超时 
            nb_get_retry 3
            #重试次数
            delay_before_retry 3
            #重试间隔时间
        }
    }

解释说明:检查80端口,相当于keepalived 用curl这个命令访问真是服务器的80端口,如果80端口能访问,代表活着,如果80端口检查失败,则下线,不会自动调度过去。

超时时间3秒,如果3秒不回应,则代表此真是服务器挂掉

重试次数3次,去访问80端口,3次以上,如果不回复,则认为此服务器挂掉

实验操作

 

 

第一步,四台服务器全部关闭防火墙,关闭防护

 

主lvs调度服务器:

先下载lvs keepalived

 第二步切换到主配置文件,然后备份

 第三步 修改主配置文件

 

 

 随后,ipvsadm -ln 查看一下规则  虚拟ip 跟真实ip都在里面

 备LVS服务器配置

第一步 下载ipvsadm keepalived

然后进入到主lvs(centos1)服务器将配置文件直接复制到备服务器里面,省的重新写配置文件了 

 然后再进入到备服务器,将data里面的keepalived配置文件移动到自己keepalived的配置文件中

 然后再keepalived配置文件中修改里面的备模式  路由id名  优先级即可

 修改过配置文件,然后重启

然后开启ipvsadm

 

 centos3 真实服务器配置(httpd)

 

 加入虚拟ip  是因为DR模式,lvs服务器跟真实服务器要用相同的虚拟ip地址,真实服务器回给客户端才不会有冲突,并且要将路由转发给关了,当配置相同的虚拟ip时,客户端访问,lvs服务器跟真是服务器会同时响应,但是客户端应到lvs服务器,所以要将真实服务器的路由转发功能给关闭

ifconfig lo:0 192.168.68.188 netmask 255.255.255.255

关闭路由转发

 

然后给网页写入内容

 

 然后关闭长连接

 

centos4真是服务器配置

然后配置虚拟ip 并且关闭路由转发

ifconfig lo:0 192.168.68.188 netmask 255.255.255.255

 

然后关闭长连接(是为了更好的出现7-3 到7-4的转换)

然后客服端去访问虚拟服务器

 

 现在模拟,当主lvs关闭keepalived服务时,7-3 7-4页面是否会出来

客户端访问时,还是会出现7-3 7-4 是因为lvs直接到备服务器上面了

 打开备服务器,虚拟ip跑到备服务器上面了,所以还是会正常运行

我们keepalived默认是抢占模式,可以看一下,再次打开主keepalived服务器,然后看虚拟ip

 

非抢占模式:

 

 操作如下:

主lvs服务器 

 nopreempt

然后重启

 备服务器配置:

随后,关闭主服务器,查看虚拟机ip,可以看见开启非抢占模式,主服务器关闭之后重启 虚拟ip不会回到主服务器上

 

而是当主服务器关闭,切换到备服务器上,就一直在备服务器上了  可以查看备服务器

 

延迟抢占

 

preempt_delay 60 

 主服务器配置

 备服务器配置

然后模拟主服务器关闭

 

密码是明文传输的,可以通过抓包看见

 

组播地址

 vrrp默认的单播地址是224.0.0.18

如果要修改组播地址,主备服务器都要修改 加在严格模式下方

vrrp_mcast_group4 234.6.6.6(这地址自定义)范围224~239

 主备的修改是一样的  都是backup

 随后,保存,然后重启

在备服务器上抓包

 

修改单播地址

 unicast_src_ip 192.168.68.3
  unicast_peer{
   192.168.68.4
 }

 主服务器配置

备服务器配置

 

 

 

通知脚本 

#!/bin/bash
#
contact='940132245@qq.com'
notify() {
 mailsubject="$(hostname) to be $1, vip floating"
 mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
 echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
 notify master
 ;;
backup)
 notify backup
 ;;
fault)
 notify fault
 ;;
*)
 echo "Usage: $(basename $0) {master|backup|fault}"
 exit 1
 ;;
esac

 在主服务器上面配置

写一个脚本 keepalive.sh

 

随后,给这个脚本文件加上权限

 

 随后,修改主配置文件

 notify_master "/opt/keepalive.sh master"
   notify_backup "/opt/keepalive.sh backup"
   notify_fault "/opt/keepalive.sh fault"

随后,保存重启

 

 然后模拟master故障

随后,打开自己的qq邮箱,会发一个邮件过来

 

日志功能 

 

 随后,在日志文件中添加6级别

 因为修改了keepalived 跟rsyslog 所以都要重新加载

因为把keepalived日志放在了data下面 可以查看一下

 查看一下日志

 

重点! 脑裂

脑裂的意思就是,当主服务器没有故障时,备服务器认为自己是主,虚拟ip188会出现在主备上面 

 怎么模拟脑裂?------>在备服务器上模拟屏蔽掉主服务器所有的报文,包括屏蔽vrrp协议

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

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

相关文章

Python实现霍德里克-普雷斯科特(Hodrick-Prescott,HP)过滤器模型和UC-ARIMA模型(hpfilter算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 霍德里克-普雷斯科特&#xff08;Hodrick-Prescott, HP&#xff09;过滤器模型&#xff1a; HP滤波器是…

数据结构算法第二套试卷小题

1.哈夫曼树 在哈夫曼树中&#xff0c;每个非叶子节点都有两个子节点&#xff08;因为哈夫曼树是一种二叉树&#xff09;&#xff0c;而叶子节点没有子节点。如果用二叉链表作为存储结构&#xff0c;每个节点需要包含两个指针域&#xff0c;分别指向其左孩子和右孩子。因此&…

SystemVerilog构造、包

包 包提供了一种共享不同构造的附加方式。他们的行为与VHDL包。包可以包含函数、任务、类型和枚举。的语法包是&#xff1a; package package_name; items endpackage : package_name 最终的package_name不是必需的&#xff0c;但它使代码更易于阅读。包是import命令在其他…

渗透测试——信息收集

信息收集 前言 信息收集是在做渗透时找尽可能的多的信息&#xff0c;为之后的渗透做铺垫。信息收集的方法有很多 比如&#xff0c;页面、真实的IP、域名/子域名、敏感目录/文件、端口探测、CMS指纹识别、操作系统识别 1. 页面信息收集 拿到域名后&#xff0c;从网站的url中…

c++ 二分查找(迭代与递归)

二分搜索被定义为一种在排序数组中使用的搜索算法&#xff0c;通过重复将搜索间隔一分为二。二分查找的思想是利用数组已排序的信息&#xff0c;将时间复杂度降低到O(log N)。 二分查找算法示例 何时在数据结构中应用二分查找的条件&#xff1a; 应用二分查找算法&#xff1a;…

Java程序员如何通过跳槽薪资翻倍,java多态面试题

Spring 面试题 1、不同版本的 Spring Framework 有哪些主要功能&#xff1f; 2、什么是 Spring Framework&#xff1f; 3、列举 Spring Framework 的优点。 4、Spring Framework 有哪些不同的功能&#xff1f; 5、Spring Framework 中有多少个模块&#xff0c;它们分别是什…

一文搞懂所有 VAE 模型

目录 收起 1 引言 2 符号术语 2.1 AE中的符号 2.2 VAE中的符号 3 基础自编码器 3.1 Autoencoder 3.2 Denoising Autoencoder 随着Stable Diffusion和Sora等技术在生成图像和视频的质量与帧率上取得显著提升&#xff0c;能够在一个低维度的压缩空间进行计算变得越发重要…

【数据结构与算法】二分查找题解(二)

这里写目录标题 一、81. 搜索旋转排序数组 II二、167. 两数之和 II - 输入有序数组三、441. 排列硬币四、374. 猜数字大小五、367. 有效的完全平方数六、69. x 的平方根 一、81. 搜索旋转排序数组 II 中等 已知存在一个按非降序排列的整数数组 nums &#xff0c;数组中的值不必…

7-18 彩虹瓶(Python)

彩虹瓶的制作过程&#xff08;并不&#xff09;是这样的&#xff1a;先把一大批空瓶铺放在装填场地上&#xff0c;然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。 假设彩虹瓶里要按顺序装 N 种颜色的小球&#xff08;不妨将顺序就编号为 1 到 N&#xff09;。现在工…

vue3+elementPlus:el-table-column表格列动态设置单元格颜色

:cell-style属性 //html<el-tableempty-text"暂无数据":data"datalist.table":max-height"height"row-key"id"border:cell-style"cellStyle"> <el-table>//js //动态设置单元格颜色 const cellStyle ({ row, c…

矢量数据库简单介绍:在 Postgres使用 pg_vector

矢量数据库简单介绍&#xff1a;在 Postgres使用 pg_vector 作为向人工智能大规模转变的一部分&#xff0c;矢量数据库越来越受欢迎。它们也称为矢量化数据库&#xff0c;在人工智能领域发挥着至关重要的作用&#xff0c;因此了解它们的工作原理非常重要。为此&#xff0c;我们…

某准网招聘接口逆向之WebPack扣取

​​​​​逆向网址 aHR0cHM6Ly93d3cua2Fuemh1bi5jb20v 逆向链接 aHR0cHM6Ly93d3cua2Fuemh1bi5jb20vc2VhcmNoP3BhZ2VOdW09MSZxdWVyeT1weXRob24mdHlwZT01 逆向接口 aHR0cHM6Ly93d3cua2Fuemh1bi5jb20vYXBpX3RvL3NlYXJjaC9qb2IuanNvbg 逆向过程 请求方式&#xff1a;GET 参数构成…

FPGA高端项目:FPGA基于GS2971的SDI视频接收+纯verilog图像缩放+多路视频拼接,提供8套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收转HDMI输出应用本方案的SDI接收图像缩放应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI接收OSD多路视频融合叠加应用本方案的SDI接收HLS多路视频融合叠加应用本方案的SDI接收GTX…

基于Redis自增实现全局ID生成器(详解)

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P48 - P49 目录 全局ID生成器介绍 基于Redis自增实现全局ID 实现代码 全局ID生成器介绍 背景介绍 当用户在抢购商品时&#xff0c;就会生成订单并保存到数据库的某一张表中&#…

Python 读取写入excel文件

使用Python读取和写入excel的xlsx、xls文件 目录 读取xlsx文件 安装三方库 引入三方库 读取数据 打开文件 表名 最大行数 最大列数 读取一张表 读取整个文件 返回xls整体内容 安装三方包 读取内容 写入xls文件 引入三方库 创建文件并写入数据 报错及解决 报错…

SSL 证书,了解一下常识

公司的网站、应用怎么才能保证在互联网上安全运行&#xff0c;不被攻击、盗取数据呢&#xff1f; 创业必经之路&#xff0c;一步一步走就对了&#xff0c;可能没赶上红利期&#xff0c;但不做就等于0。 概述 SSL 证书&#xff08;SSL Certificates&#xff09;又称数字证书&am…

3/7—21. 合并两个有序链表

代码实现&#xff1a; 方法1&#xff1a;递归 ---->难点 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* mergeTwoLists(struct ListNode *list1, struct ListNode *list2) {/*1.如果l1为…

Vivado使用记录(未完待续)

一、Zynq开发流程 二、软件安装 三、软件使用 字体大小修改&#xff1a;Setting、Font 四、Vivado基本开发流程 1、创建工程 Quick Start 组包含有 Create Project&#xff08;创建工程&#xff09;、 Open Project&#xff08;打开工程&#xff09;、 Open Example Project&…

智慧视频终端解决方案

依托富瀚微智慧视频SOC&#xff0c;提供以视频为核心的智能产品及解决方案

ubuntu設定QGC獲取pixhawk Mini4(PX4 Mini 4) 的imu信息

ubuntu20.04 QGC使用v4.3.0的版本 飛控pixhawk Mini4 飛控上只使用一條micor USB連接電腦&#xff0c;沒有其他線 安裝命令 sudo apt-get remove modemmanager -y sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y sudo apt install libf…