Centos8环境下,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)等
调度算法
- 轮询调度(Round-Robin Scheduling)
- 加权轮询调度(Weighted Round-Robin Scheduling)
- 最小连接调度(Least-Connection Scheduling)
- 加权最小连接调度(Weighted Least-Connection Scheduling)
- 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
- 带 复 制 的 基 于 局 部 性 最 少 链 接 ( Locality-Based Least >Connections with Replication Scheduling)
- 目标地址散列调度(Destination Hashing Scheduling)
- 源地址散列调度(Source Hashing Scheduling)
- 最短预期延时调度(Shortest Expected Delay Scheduling)
- 不 排 队 调 度 ( Never Queue Scheduling )对应: >rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
三种转发规则
- NAT:简单理解,就是数据进出都通过 LVS,性能不是很好。
- TUNL:简单理解:隧道
- 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开始了解起:
- VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。
- VRRP是通过一种竟选协议机制来将路由任务交给某台 VRRP路由器的。
- VRRP用 IP多播的方式(默认多播地址(224.0_0.18))实现高可用对之间通信。
- 工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对。
- 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电脑发送访问请求,依旧可以实现