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

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协议

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何压缩图片大小到100kb以下?

如何压缩图片大小到100kb以下&#xff1f;不知道上班族小伙伴有没有发现&#xff0c;当我们工作中使用图片的时候经常遇到遇到一个尴尬的情况&#xff0c;例如我们需要网某个网站上传一张图片的时候&#xff0c;会被限制要求图片大小不能超过100kb&#xff0c;如果超过就无法进…

基于uniapp cli项目开发的老项目,运行报错path.replace is not a function

项目&#xff1a;基于uniapp cli的微信小程序老项目 问题&#xff1a;git拉取代码&#xff0c;npm安装包时就报错&#xff1b; cnpm能安装成功包&#xff0c;运行报错 三种方法尝试解决&#xff1a; 更改代码&#xff0c;typeof pathstring的话&#xff0c;才走path.replace…

JVM 面试题

1、什么情况下会发生栈内存溢出。 栈内存溢出通常发生在以下几种情况中&#xff1a; 函数递归调用过深&#xff1a; 当函数递归调用自身且没有合适的退出条件时&#xff0c;每次递归调用都会在栈上分配一个新的栈帧来存储局部变量、返回地址等信息。如果递归层次过多&#xff…

计讯物联山体滑坡地质灾害监测方案为灾区保驾护航

针对我国某些地区频繁爆发山体滑坡的情况&#xff0c;计讯物联深入调研滑坡体自动监测、无线通讯、险情预报等方面&#xff0c;自主研发反应快速高效、可广泛应用的山体滑坡地质灾害监测方案&#xff0c;全面掌握山体滑坡信息&#xff0c;为当地居民留有余裕的逃生时间。 计讯物…

Docker 配置阿里云镜像加速器

一、首先需要创建一个阿里云账号 二、登录阿里云账号 三、进入控制台 四、搜索容器镜像服务&#xff0c;并选择 五、选择镜像工具中的镜像加速 六 、配置镜像源 注意&#xff1a;有/etc/docker文件夹的直接从第二个命令开始

JavaSE-10(JDK8 新特性-万字总结)

新特性概述 Lambda 表达式函数式接口引用Stream API接口中的默认方法 / 静态方法新时间日期 API其他新特性 Lambda表达式/匿名函数 在 Java 中&#xff0c;匿名函数通常是指 Lambda 表达式。 Lambda 表达式允许你以一种简洁、紧凑的方式编写匿名函数&#xff0c;而不必创建…

Windows系统安装MongoDB并结合内网穿透实现公网访问本地数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

Zookeeper基础知识:成功分布式系统的关键

文章目录 一、引言二、Zookeeper介绍三、Zookeeper安装四、Zookeeper架构【重点】4.1 Zookeeper树形结构4.2 znode类型4.3 Zookeeper的监听通知机制 五、Zookeeper常用操作5.1 zk常用命令5.2 Java连接Zookeeper5.3 Java操作Znode节点5.4 监听通知机制 六、Zookeeper集群【重点】…

基于AI软件平台 HEGERLS智能托盘四向车机器人物流仓储解决方案持续升级

随着各大中小型企业对仓储需求的日趋复杂&#xff0c;柔性、离散的物流子系统也不断涌现&#xff0c;各种多类型的智能移动机器人、自动化仓储装备大量陆续的应用于物流行业中&#xff0c;但仅仅依靠传统的物流技术和单点的智能化设备&#xff0c;已经无法更有效的应对这些挑战…

【学习心得】websocket协议简介并与http协议对比

一、轮询和长轮询 在websocket协议出现之前&#xff0c;要想实现服务器和客户端的双向持久通信采取的是Ajax轮询。它的原理是每隔一段时间客户端就给服务器发送请求找服务器要数据。 让我们通过一个生活化的比喻来解释轮询和长轮询假设你正在与一位不怎么主动说话的老大爷&…

学习人工智能:吴恩达《AI for everyone》2019 第3周:实现智能音箱和自动驾驶的几个步骤;无监督学习;增强学习

吴恩达 Andrew Ng&#xff0c; 斯坦福大学前教授&#xff0c;Google Brain项目发起人、领导者。 Coursera 的联合创始人和联合主席&#xff0c;在 Coursera 上有十万用户的《机器学习》课程&#xff1b;斯坦福大学计算机科学前教授。百度前副总裁、前首席科学家&#xff1b;谷…

开发知识点-Apache Struts2框架

Apache Struts2 介绍S2-001S2CVE-2023-22530介绍 Apache Struts2是一个基于MVC(模型-视图-控制器)设计模式的Web应用程序框架,它是Apache旗下的一个开源项目,并且是Struts1的下一代产品。Struts2是在Struts1和WebWork的技术基础上合并出来的全新web框架,其核心是WebWork。…

网络入侵检测系统之Suricata(十)--ICMP实现详解

ICMP协议 Common header 0 1 2 40 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 0 1 2 3 4--------------------------------| Type | Code | Checksum |-----…

VUE_自适应布局-postcss-pxtorem,nuxt页面自适配

postcss-pxtorem是一个PostCSS插件&#xff0c;用于将CSS中的像素值转换为rem单位&#xff0c;以实现响应式布局和适配不同屏幕尺寸的需求。 它的适配原理是将CSS中的像素值除以一个基准值&#xff0c;通常是设计稿的宽度&#xff0c;然后将结果转换为rem单位。这样&#xff0…

根据用户名称实现单点登录

一、参数格式 二、后端实现 Controller层 public class IAccessTokenLoginController extends BaseController {Autowiredprivate ISysUserService sysUserService;Autowiredprivate ISingleTokenServiceImpl tokenService;/*** 登录方法** return 结果*/PostMapping("/l…

AI智能分析网关V4智慧园区视频智能监管方案

一、背景需求分析 随着科技的不断发展&#xff0c;智慧园区建设已成为现代城市发展的重要方向。通过智能化技术提高园区的运营效率、降低成本、增强环境可持续性等具有重要作用。视频智能监管作为智慧园区安全管理体系的重要组成部分&#xff0c;对于提高园区的安全管理水平和…

女神节快乐,谁说程序猿不懂浪漫, 50多份表白代码收好~

谁说程序猿不懂浪漫&#x1f497; 今天是女神节&#xff0c;祝各位女神节日快乐&#xff01; 在 GitHub 上有个表白代码收藏馆 Awesome-Love-Code&#xff0c;收集了 50 多份表白代码。 GitHub&#xff1a;github.com/sun0225SUN/Awesome-Love-Code 分享给有需要的人。 Web Py…

提高数字化处理质量和效率:重视OCR软件的识别准确率

在当今数字化时代&#xff0c;纸质文件的数字化处理变得尤为重要。而作为纸质文件数字化的关键工具之一&#xff0c;OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;软件的识别准确率对于将大量纸质文件转为Excel具有至关重要的地位。本文将…

必看——怎么把HTTP升级成为HTTPS

现在很多朋友的网站都从原来的HTTP升级成了HTTPS&#xff0c;这种情况就是因为给网站安装了SSL证书的原因&#xff0c;使用了HTTPS协议。安装完SSL证书之后&#xff0c;网站就不会再被浏览器提示不安全&#xff0c;也不会显示连接不安全打不开网站的情况了。而是有一个绿色的小…

分析:如何多线程运行测试用例

这是时常被问到的问题&#xff0c;尤其是UI自动化的运行&#xff0c;过程非常耗时&#xff0c;所以&#xff0c;所以多线程不失为一种首先想到的解决方案。 多线程是针对的测试用例&#xff0c;所以和selenium没有直接关系&#xff0c;我们要关心的是单元测试框架。 unittest …