LVS(三)lvs+keeplive

article/2025/11/7 12:22:59

场景引入1

        我们知道LVS仅仅是做根据调度算法和策略来做负载均衡的,LVS本身只是调度后端服务器,并不管后端服务器的死活,想想这样一个场景:如果由于由于某种原因,后端服务器挂掉,而调度服务器却不知道,还一个劲头的给其发送请求,后端服务器此时不响应数据,而客户端会处于等待的状态(直到超时),客户体验不好!

        说明:后续有时间了再模拟这个场景(后端某个服务关闭,观察实验现象)!

        引出了我们今天要讲解的心跳检查(heartbeat),通俗点就是前端服务器检查后端服务器的存活,进而采取某种策略!

        说明:由于DR模式最常见,所以我们以此种模式进行讲解!

  lvs+directord

(1)directord的简单理解

           directord 对lvs策略的动态维护:ldirectord是监视集群节点(真实服务器),并从集群中自动移除节点,我们需要使用ldirectord程序,这个程序在启动时自动建立IPVS表(不用手动建立了),然后监视集群节点的健康情况,在发现失效节点时将其自动从IPVS表中移除

(1)第一次安装出现的问题

yum install -y ldirectord-3.9.5-3.1.x86_64.rpm
Error: Package: ldirectord-3.9.5-3.1.x86_64 (/ldirectord-3.9.5-3.1.x86_64)Requires: resource-agents

说明安装包从官网下载即可

原因没有使用系统自带的高可用套件缺乏依赖,yum源进行配置(所需安装软件在光盘上就可以,不需要额外配置yum源!

# 自带附加高可用源
[HighAvailability]
name="HighAvailability"
baseurl=http://172.25.2.250/rhel7.3/addons/HighAvailability
gpgcheck=0

(2)正式安装

yum install -y ldirectord-3.9.5-3.1.x86_64.rpm
rpm -ql ldirectord-3.9.5-3.1.x86_64 # 查询
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/

(3)编写配置文件

# 虚拟VIP-->核心配置文件!
virtual=172.25.2.100:80real=172.25.2.201:80 gatereal=172.25.2.202:80 gatefallback=127.0.0.1:80 gateservice=httpscheduler=rr#persistent=600#netmask=255.255.255.255protocol=tcpchecktype=negotiatecheckport=80request="index.html"# 注意:一定要将其注释!#receive="Test Page"#virtualhost=www.x.y.z

检测:开启ldirectord服务,然后通过ipvsadm -l 来看是否有IPVS表的规则!

注意:还是手动写VIP,只是通过配置文件的形式帮助我们生成ipvs规则表!

补充:还得手动开启服务

理解:并不管理资源

 ip addr add 172.25.2.100/24 dev eth0 #配置VIP(由于是DR模式,所以三个都需要配置)

(4)后端服务器的配置

VIP(手动配置)和ARP策略

arptables -A INPUT -d 172.25.2.100 -j DROP
arptables -A OUTPUT -s 172.25.2.100 -j mangle --mangle-ip-s 172.25.2.201# 两个后端服务器一样

注意:服务必须自己开启!

(5)测试

测试1:两个后端服务器均开启Apach服务,然后客户端测试看是否轮询!

测试2:其中一个后端服务器关闭服务,观察此服务器是否被IPVS表移出,以及客户端测试的内容!

测试3:其中一个后端服务器有开启服务,观察此服务器是否被IPVS表添加,以及客户端测试的内容!

测试4:前端服务器也安装httpd软件,并开启服务,看后端服务器挂掉的时候,前端服务器会不会顶上去

说明:在其它后端服务器都挂了的情况下,前端调度器也可以作为临时服务器,但是一般时间很短!

配置文件的详细解释

原理

二:场景引入

     假如:lvs调度服务器挂掉了呢,是不是整个就瘫痪了,怎么办?总得防患于未然,添加lvs的备用机,如何监控呢?

     引入:我们今天要讲解的keepalived

     注意:做实验之前一定要事先关闭selinux和firewalld !

     keepalived百度百科

  (1)源码编译安装

#(1)说明:第三方的包-->源码安装
# 最好进入一个目录!
tar -zxf keepalived-2.0.6.tar.gz 
cd keepalived-2.0.6
#(2)安装依赖的软件
yum install gcc openssl-devel -y
#(3)编译-->6|7的区别
./configure --prefix=/usr/local/keepalived --with-init=systemd
#核心:Use IPVS Framework是否是Yes
#(4)安装
make && make install
#(5)进入对应的目录-->设置软链接
cd /usr/local/keepalived/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
#(6)安装邮件软件
yum install -y mail #看是否发生报错信息!# 说明:用的也是高可用的包!

    说明:备用的安装方式一致

(2)  对配置文件进行配置

安装之前做一些清理工作

      1)IPVS规则的清理(-C)

      2)VIP的手动删除--->会自动生成此VIP

配置文件参数的说明!

# 全局配置
global_defs {notification_email {#(1)节点宕机了给谁发送邮件!-->本机的root用户(安装mail软件,看是否发送邮件)root@localhost}#(2)发送人的名称notification_email_from keeplived@loclhost#(3)发送的服务器-->本机smtp_server 172.0.0.1#(4)指定smtp连接超时时间smtp_connect_timeout 30router_id LVS_DEVEL#(5)运行keepalived机器的一个标识!vrrp_skip_check_adv_addr#(6)必须注释#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {#(1)主节点的标识state MASTER  #BACKUP(备用的标识)interface eth0#(2)说明:主和备用的必须一致virtual_router_id 51#(3)优先级,越大越优先启动priority 100  #说明:备用的必须小于100advert_int 1 # 检查间隔authentication {auth_type PASS #认证方式(密码认证)auth_pass 1111 #认证的密码}#(4)虚拟VIP-->不用手动创建(可以创建多个,对应不同的服务)virtual_ipaddress {172.25.2.100}
}
# 虚拟服务的相关配置-->理解成IPVS表规则
virtual_server 172.25.2.100 80 {delay_loop 6 # 当rs报错时候,尝试多少次之后才会发送邮件告知!lb_algo rr   # 负载均衡的算法(10种)lb_kind DR   # 默认时NAT模式(这里选择DR)#persistence_timeout 50  #注释(保持连接的时间)protocol TCPreal_server 172.25.2.201 80 {TCP_CHECK {connect_port 80weight 1connect_timeout 3}}real_server 172.25.2.202 80 {TCP_CHECK {connect_port 80weight 1connect_timeout 3}}
}

说明:备用只修改state和proprity

后端服务器的配置

ip addr add 172.25.2.100/24 dev eth0
arptables -A INPUT -d 172.25.2.100 -j DROP
arptables -A OUTPUT -s 172.25.2.100 -j mangle --mangle-ip-s 172.25.2.201

注意:要配置VIP,因为后端服务器和前端控制器是想对独立的

重启之后的现象-->

备用

测试1:后端服务器关闭和开启,IPVS表的变化

说明这里省略

测试2:主LB关闭keepalived服务,看IPVS表和VIP的走向

测试3:主LB开启keeplalived服务

说明:keepalived备机在主机宕机的情况会自动接管了资源,但待keepalived主机恢复正常的时候,主机会重新接管资源!

小知识:IP/32表示是一个集群!

补充测试:看mail是否有邮件发送


http://chatgpt.dhexx.cn/article/XXO7yewI.shtml

相关文章

lvs+keeplive

Keepalived概述 调度出现单点故障,如何解决?Keepalived实现了高可用集群Keeepalived最初是为LVS设计的,专门监控各服务器节点状态Keepalived后来加入了VRRP功能,防止单点故障 Keepalived运行原理 Keepalived检测每个服务器节点…

使用keeplive处理socket网络异常断开

网络异常断开原因主要有那些呢?归纳起来主要有以下两种: 1、客户端程序异常。 对于这种情况,我们很好处理,因为客户端程序异常退出会在服务端引发ConnectionReset的Socket异常(就是WinSock2中的10054异常)。…

mysql mm keeplive_mysql +keeplive

下载tar包 ./configure --prefix/usr/local/keepalived --with-kernel-dir/usr/src/kernels/2.6.32-431.el6.x86_64/ \ 注意加内核 &&make && make install cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ cp /usr/local/keepalived…

解决keep-live使用之后的问题

keep-aliv能够帮助我们实现页面ajax请求只被请求一次,在你跳转页面的时候,也不会被请求多次,可是比如在旅游页面中,当我们在城市选择页面重新选择城市,这个时候就需要重新发送一个ajax请求,来显示对应城市的…

nginx和keeplive实现负载均衡高可用

一、 Keeplive服务介绍 Keeplive期初是专门为LVS设计的,专门用来监控LVS集群系统中各个服务节点的状态,后来又加入VRRP的功能,因此除了配合LVS服务以外,也可以作为其他服务(nginx,haroxy)的高可…

php用Ajax传递数组

代码如下: 定义array数组 var array [1,2,3];$.ajax({url:"cart.php?actdelcart",async:false,type:POST,data:{array:array},dataType:json,traditional: true,success:function(data){alert(data)},error:function(){alert("#");}}); 当我们用ajax传递…

【JQuery】Ajax 参数为数组 的方法

背景介绍 前端页面为HTML, 后端为Spring html中根据多选框的值,使用ajax请求接口动态加载其他元素的选项值。 代码 // select 下拉多选框的值var idCardType $("#idCardType").val();// [2075, 2077, 2078]$.ajax({url : url,type : "…

使用ajax传递数组和后台接收

使用ajax异步的提交多选框得到需要操作的对象的id,这时我们可以把每一个id做出一个对象,之后放到一个数组中,再使用JSON.stringify()对这个数组进行json的格式化;在后台中再inputStream中解析出我们的json字符串,之后只…

ajax传数组,后端接收数组

ajax内容 使用JSON.stringify()将数组转换为JSON字符串 //发送ajax将数组发送给handler$.ajax({url:"admin/batch/remove.json", //服务器接收请求的URL地址type:"post", //设置请求方式postcontentType:"application/json;charsetUTF-8&…

教你怎么用ajax传数组(也可以是转为json)

我之前写过一个关于ajax的详解,那个是标准的ajax,今天介绍的是怎么用ajax传递数组这样的数据类型呢?很多的时候我们需要给后端的数据不是几个单独的数据,一般见到的代码的是这样的: data: { id : id, name : name, se…

Ajax传递数组到后台的两种方式

直接传输不可行 第一种 将ajax参数传递修改为tradition: traditional: true $.ajax({xhrFields: {withCredentials: true},async: true,url: basePath "/consumer/work",type: "post",dataType: "json",traditional: true,data : {sql :text,/…

前端ajax发送数组请求的两种方式

今天踩了一个大坑 就是使用ajax将数组发送到后台 后台的controller接收不到 好的 废话不多说 直接上干货 第一种方式: 直接传送数组 后台接收的话需要使用 RequestParam(value "userIds") Long[ ] 来接收 第二种方式: 将数组转换为List …

jquery ajax 向后台传递数组参数

Ajax 传递数组到后台 博客分类: JavaScript jquery ajax 向后台传递数组参数示例 Js代码 function login123(){ var nameArr new Array(); nameArr.push("adm,in"); nameArr.push("jo,in"); nameArr.p…

JFINAL+Ajax传参 array 数组方法 获取request中数组

前台代码js var _list [];for (var i 0; i < array.length; i) { _list[i] array[i]; } $.ajax({ type: "post",url: "",data: {"ids": _list },dataType: "json",success: function(data){alert("添加成功"); …

ajax向后端传递数组

https://blog.csdn.net/feinifi/article/details/81180673 https://blog.csdn.net/weixin_44150474/article/details/103526735 https://www.cnblogs.com/lijianda/p/9936775.html https://blog.csdn.net/weixin_44150474/article/details/103526735 ajax在web项目开发中经常…

ajax通过post方法传数组

ajax在web项目开发中经常会用到&#xff0c;平时我们传递数据&#xff0c;基本都是一个参数名对应一个参数值&#xff0c;后端通过参数名就可以得到参数&#xff0c;从而进行相关逻辑处理&#xff0c;但是有时候我们会遇到批量操作&#xff0c;比如批量删除一个列表&#xff0c…

ajax 传数组

使用 ajax 传数组&#xff0c;可以有很多种方式实现&#xff0c;如将数组序列化成 json字符串&#xff0c;或者将数组转换成字符串&#xff0c;都能实现。这里介绍一种方式&#xff0c;添加属性 traditional: true&#xff0c;直接传 代码如下 controller package com.approv…

Ajax传递数组

Ajax传递数组与后端接收 在此记录刚开始做开发的时候&#xff0c;Ajax都不怎么会用&#xff0c;都只是传一些简单的字符串&#xff0c;那Ajax怎么将数组传到服务器&#xff0c;先看一下Ajax的结构 //建立两种类型的数组,这两种类型的数组都是经常用到的var arryA new Array(…

ajax传递数组怎么传?ajax数组传递

在我们平时的开发中&#xff0c;经常会需要用到ajax&#xff0c;关于ajax是什么&#xff0c;又该如何传递参数&#xff0c;相信通过上几篇文章你们已经有所了解。但是&#xff0c;ajax中要如何传递数组你们又知道吗&#xff1f;今天我们就来聊一聊ajax中该如何传递数组。 ajax…

java10 var关键字浅析

2018年3月20日&#xff0c;Oracle发布java10。java10为java带来了很多新特性&#xff0c;其中让人眼前一亮的便是var关键字的引入。 从今以后我们可以这样写java代码了。 public class Example {public static void main(String[] args) {var eg new Example;eg.emptyFunc()…