LVS+KEEPALIVED负载均衡实验

吐槽【2020.12.11】

---------------------------------------<仅个人课件>----------------------------------------

  最近,按照学校老师布置的作业要求,选了个看起来难度较高的负载均衡系统搭建实验来做,一方面是自己对这个东西早有耳闻,一直想了解一下;一方面又是想让自己通过这次实验更好的加深对于linux这个操作系统的使用和理解。   但是 -_- ,接触后才发现,这需要有点计算机网络的基础还要会shell编程。(os:啊这,我没学过啊,shell编程我还没看完入门教程呢)只好多看点资料,多找点视频一个个看咯,又是抽时间又是熬夜的,断断续续的肝了好几天,可算是大概懂了,并且做出来了,还是挺感动的(os:感动到自己,感动的已经开始学计算机网络了= =)   总体来说,学是学到不少东西的,不能说很懂linux(os:现在也就只会一些简单的指令)想记的笔记还有一部分没搞完,打算再找个时间补出来,感兴趣的朋友可以期待一下下(os:假装有人会看)

一、 简介

1. 什么是负载均衡

负载均衡(图1),英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。
在这里插入图片描述

图一

2. 负载均衡的类型

• 负载均衡可以采用硬件设备(例如常常听见的 F5),也可以采用软件负载
• 商用硬件负载设备成本通常较高(一台几十万甚至上百万),所以一般 情况下会采用软件负载
• 软件负载解决的两个核心问题是:选谁、转发,其中最著名的是 lvs

3. LVS 是什么?

• 英文全称是 Linux Virtual Server,即 Linux 虚拟服务器
• 由 章 文 嵩 博 士 发 起 的 自 由 软 件 项 目 , 它 的 官 方 站 点 是 www.linuxvirtualserver.org
• Linux2.4 内核以后,LVS 已经是 Linux 标准内核的一部分
• 可以将请求分发给后端真实服务器处理
• 有许多比较著名网站和组织都在使用 LVS 架设的集群系统,例如:Linux 的门户网站(www.linux.com)、向 RealPlayer 提供音频视频服务而闻 名的 Real 公司(www.real.com )、全球最大的开源网站 (sourceforge.net)等

调度算法
  1. 轮询调度(Round-Robin Scheduling)
  2. 加权轮询调度(Weighted Round-Robin Scheduling)
  3. 最小连接调度(Least-Connection Scheduling)
  4. 加权最小连接调度(Weighted Least-Connection Scheduling)
  5. 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
  6. 带 复 制 的 基 于 局 部 性 最 少 链 接 ( Locality-Based Least >Connections with Replication Scheduling)
  7. 目标地址散列调度(Destination Hashing Scheduling)
  8. 源地址散列调度(Source Hashing Scheduling)
  9. 最短预期延时调度(Shortest Expected Delay Scheduling)
  10. 不 排 队 调 度 ( Never Queue Scheduling )对应: >rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
三种转发规则
  1. NAT:简单理解,就是数据进出都通过 LVS,性能不是很好。
  2. TUNL:简单理解:隧道
  3. DR:最高效的负载均衡规则

Keepalived是什么?

keepalived软件起初是专门为LVS负载均衡软件而设计,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能,因此,keepalived除了能够管理LVS软件ipvsadm外,还可以作为其它服务(例如:Nginx、HAProxy、MySQL等)的高可用解决方案软件 keepalived软件主要使用过VRRP协议实心高可用功能;VRRP是Virtual Route Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行 所以,Keepalived一方面具有配置管理LVS的功能,同时还具有LVS下面节点进行健康检查的功能。
Keepalived服务的三个重要功能
1)管理LVS负载均衡软件ipvsadm
2)实现LVS集群节点的健康检查
3)作为系统网络服务的高可用性

Keepalived工作原理
         **Keepalived运行机制示意图**

在这里插入图片描述

工作机制

Keepalived通过VRRP协议来竞争实现虚拟路由的功能,所有的协议报文都是通过IP多播(multicast)包发送(多播地址224.0.0.18)每个发送的多播数据包都是从多播地址发送;虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址:00-00-5E-00-01-{VRID}.所以在一个虚拟路由器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对他们来说,这一切都是透明的。在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP多播包,这里说的MASTER发送多播包就是指的是上面所说的由VRRP协议224.0.0.18地址所发出的多播包,发多播包是为了告诉Backup节点自己还活着,BACKUP就不会抢占MASTER,除非它的优先级(priority更高)。工作原理:Keepalived高可用对之间是通过VRRP通信的,因此,我们从 VRRP开始了解起:

  1. VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。
  2. VRRP是通过一种竟选协议机制来将路由任务交给某台 VRRP路由器的。
  3. VRRP用 IP多播的方式(默认多播地址(224.0_0.18))实现高可用对之间通信。
  4. 工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对。
  5. VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。

Keepalived服务的工作原理:Keepalived高可用对之间是通过 VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。

二、 LVS+Keepalived的负载均衡系统搭建

1. LVS+Keepalived搭建

1.1准备虚拟机(图2)

1台lvs(主机)—配置 ip:192.168.240.128
1台lvs(备机)—配置 ip: 192.168.240.129

2台webserver —配置 ip:192.168.240.132 和192.168.240.133

(考虑到采用 的DR模式要在同一个网段,但服务器ip地址不是固定的)

在这里插入图片描述

**图二**
1.2配置两台webserver

下载httpd服务:yum -y install httpd

在这里插入图片描述

1.3往web服务器中写入内容,两个服务器各写一个html文件

vi /var/www/html/index.html

在这里插入图片描述

Web:
在这里插入图片描述

启动httpd服务:

service httpd start

在这里插入图片描述

设置开机自启动(省的下一次开机再手动开启服务)
systemctl enable httpd.service

1.4 编写RS服务器的自动化响应程序

分别在两台web服务器上做相同的操作

1.4.1创建一个自动化服务

vim /etc/init.d/realserver

  • /etc/init.d/的简单介绍:
    1、init.d 目录中存放的是一系列系统服务的管理(启动与停止)脚本。
    2、用service命令可执行init.d目录中相应服务的脚本。
    例:执行命令“service resin start”,可启动/etc/init.d/resin脚本
1.4.2在realserver中写入代码
#!/bin/bash  
#description : start realserver  
SNS_VIP=192.168.240.100 #定义了一个VIP变量,必须跟真是服务在一个网段
#我这里定了VIP:192.168.240.100

/etc/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS of REALServer"  
/sbin/ifconfig lo:0 $SNS_VIP  netmask 255.255.255.255 up  #增加一个本地路由 lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"  
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"  
exit 1
esac

抑制ARP抢包设置👇

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  • arp_ignore 参数说明:

​ 0:默认值,回应任务网络接口上对任何本地IP地址的arp查询请求
​ 1:只回答目标IP地址是来访网络接口本地地址的ARP查询请求
​ 2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内。
​ 3:不回应该网络界面的ARP请求,而只对设置的唯一和链接地址做出回应。
​ 4-7:保留未使用。
​ 8:不回应所有(本地地址)的arp查询。

  • arp_announce 参数说明:

对网络接口上,本地IP地址发出的ARP回应作出相应级别的限制,确定不同程度的限制,对来自本地源IP地址发出ARP请求的接口。
0:默认,在任意网络接口上的任何本地地址。
​ 1:进来避免不在该网络接口子网段的本地地址作出ARP回应,当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用。此时会检查来访IP是否为所有接口上的子网段内IP之一。如果该来访IP不属于各网络接口上的子网段内,那么将采用级别2的方式来进行处理。
2:对查询目标使用最适当的本地地址,在此模式下降忽略这个IP数据包的源地址并尝试选择能与该地址通信的本地地址,首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址呗发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送,限制了使用本地的VIP地址作为优先的网络接口。

1.4.3修改文件权限

在这里插入图片描述

1.4.4启动刚刚创建的服务

在这里插入图片描述

1.4.5查看服务执行结果

在这里插入图片描述
!!!Web2服务重复前几步操作


1.5下载keepalived
1.5.1在两台LVS主机上下载keepalived

yum -y -install keepalived

1.5.2配置LVS主机

vim /etc/keepalived/keepalived.conf

在这里插入图片描述

1.5.3配置LVS备机

在这里插入图片描述

1.5.4两台LVS主、备机启动keepalived服务

service keepalived start
在这里插入图片描述
在这里插入图片描述

到此LVS+keepalived负载均衡系统搭建完成

三 测试负载均衡系统的功能,以及其对于服务器的检测和高可用性

2.1安装ipvsadm,查看服务器之间的连接状况

yum install ipvsadm -y

2.2查看连接情况ipvsadm -ln

ipvsadm -ln

在这里插入图片描述

2.3在主机的window操作系统访问192.168.240.100查看结果

在这里插入图片描述

2.4按F5刷新,会有轮询下一台服务器

在这里插入图片描述
(ps:之所以内容地址和设定地址不一样,是因为没搭建成功前遇到许许多多的问题,虚拟机被我弄的乱七八糟的,就换了几次新的虚拟机,配了不一样的地址,但是内容懒得改了,照搬了。毕竟能区分服务器就行)

在这里插入图片描述

2.5关闭httpd服务器2(也就是node2结点)

在web2服务器上操作👇
在这里插入图片描述
在MASTER主机看到的连接的变化👇
在这里插入图片描述

发现,keepalived已经自动拆除该问题服务器结点

2.6重新启用服务器后

在这里插入图片描述
在这里插入图片描述

发现,keepalived又自动加入该服务器结点

2.7把LVS主服务器关掉
  • 主机没有问题前,主机和备机的vip关系在这里插入图片描述
    在这里插入图片描述
2.8关闭主机keepalived

在这里插入图片描述

2.9查看备机,会发现VIP:192.168.240.100已经发生ip漂移去到LVS备机上了

在这里插入图片描述
在这里插入图片描述

此时从windows电脑发送访问请求,依旧可以实现

在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值