LVS实现负载均衡及高可用

1 实验环境

1.1 虚拟机最小化封装

1.1.1 虚拟机母机安装

1)选择7.6的镜像安装虚拟机:
在这里插入图片描述

2)选择内存和cpu大小:
在这里插入图片描述

3)硬盘空间大小选20G:
在这里插入图片描述

4)选择时区为东八区,硬盘自动分区,取消KDMP里面的勾选,不安装图形即可:
在这里插入图片描述

5)设置完超级用户和普通用户的用户名和密码后重启,按‘e’进入编辑模式,写入如下内容,表示将selinux禁用,设置完后,输入ctrl+x重启:
在这里插入图片描述

6)关闭火墙服务:
在这里插入图片描述

7)进入/etc/selinux/config ,关闭selinux:
在这里插入图片描述

8)编辑/etc/sysconfig/network-scripts网卡配置文件:
在这里插入图片描述

9)关闭NetworkManager服务,重启网络:
在这里插入图片描述

10)配置软件仓库,注意企业七的软件仓库和企业八的不同,不需要要分别配置AppStream和BaseOS:
在这里插入图片描述
安装常用工具,注意前提是和真机ping通,不通的话检测网络配置文件是否正确,是否为桥街模式。:
在这里插入图片描述
在这里插入图片描述

11)编写本地解析文件:
在这里插入图片描述

12)做完上面的步骤将该虚拟机关掉,输入du -h base.qcow2命令可以看到该虚拟机占用的空间大小为21G。

1.1.2 清理和压缩母机

1)输入rpm -qf /usr/bin/virt-sysprep命令查看virt-sysprep命令的软件包,并进行安装。若该软件存在则直接使用无需安装:
在这里插入图片描述

2)输入virt-sysprep -d base命令表示清理该母虚拟机的缓存,注意前提是虚拟机已经关闭。
3)输入virt-sparsify --compress base.qcow2 lhy-base.qcow2 命令将原虚拟机压缩为lhy-base,压缩后虚拟机的大小为500M左右,然后将原来的base删除,这样虚拟机的封装便完成了。

1.1.3 创建子机

1)进入/var/lib/libvirt/images目录,使用qemu-img create -f qcow2 -b lhy-base.qcow2 lhy_vm1命令创建多个子虚拟机的.qcow2文件
在这里插入图片描述

2)以导入的方式创建子虚拟机,修改子虚拟机的ip和主机名,测试可以ping通主机,表创建成功,此处需要创建4个子虚拟机,为下面的实验准备。
在这里插入图片描述

输入qemu-img info lhy_vm1命令可以看到子虚拟机文件的实际来源:
在这里插入图片描述

1.2 名词理解

  • LVS:全称是Linux Virtual Server,Linux虚拟服务器,是一个虚拟的服务器集群系统,其官方网站是http://zh.linuxvirtualserver.org/,是一个lvs使用手册,可以帮助我们学习。它的宗旨是使用集群技术和linux操作系统实现一个高性能,高可用的服务器。
  • LVS的组成:lvs由ipvs和ipvasdm组成;ipvs是一段工作在内核空间的代码,是真正生效实现调度的代码;ipvasdm是负责为ipvs内核框架编写规则,定义哪个主机是集群服务,哪个主机是后端的真实服务器。
  • DS:Director Server,前端的lvs负载均衡器节点
  • RS:Resl Server,后端真实工作的服务器
  • VIP:lvs的虚拟ip,对外面接收用户请求
  • DIP:Director Server IP,该ip用于和内部主机通讯
  • RIP:真实服务器的IP
  • CIP:客户端IP
  • LIP:本地ip

2 lvs的工作模式

2.1 NAT模式

通过网络地址转换的方法实现调度。
在一组服务器前有一个lvs负载均衡调度器,真实服务器和LVS是通过 Switch/HUB 相连接的,这些服务器提供相同的网络服务、相同的内容,即不管请求被发送到哪一台服务器,执行结果是一样的。服务的内容可以复制到每台服务器的本地硬盘上,然后通过网络文件系统(如 NFS)共享,也可以通过一个分布式文件系统来提供。具体流程如下图所示:
在这里插入图片描述

NAT模式的工作步骤:

  • 当用户通过外网访问时,调度器接收到客户的请求数据包,用户实际上访问的是企业的VIP。此时LVS将会根据调度算法决定将请求发送给某个后端的真实服务器。在调度器将请求数据包转发给真实服务器前,LVS会将客户端发送的请求数据包的目标IP地址及目标端口修改为之前选中的后端真实服务器的IP及对应端口。
  • 真实服务器将响应后的数据包返回给LVS调度器,LVS收到响应后会将数据包的源地址和端口修改为VIP及对应的端口,然后将数据包再发送回客户端。

NAT模式的优缺点:

  • 优点是服务器可以运行任何支持 TCP/IP 的操作系统,它只需要一个 IP 地址配置在调度器上,服务器组可以用私有的 IP 地址。
  • 缺点是它的伸缩能力有限, 当服务器结点数目升到 20 时,调度器本身有可能成为系统的新瓶颈,因为在 VS/NAT 中请求和响应报文都需要通过负载调度器。

2.2 TUNNEL模式

通过隧道模式方法实现调度。
它的连接调度和管理与 VS/NAT 中的一样,只是它的报文转发方法不同,该工作模式弥补了NAT模式的缺点,使得调度器不会成为系统的瓶颈;在 VS/TUN 的集群系统中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。
在这里插入图片描述

TUNNEL模式的工作步骤:

  • 当客户端的数据包到达调度器后,调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个 IP 报文中,再将封装后的 IP 报文转发给选出的服务器。
  • 服务器收到报文后,先将报文解封获得原来目标地址为 VIP 的报文,服务器发现 VIP地址被配置在本地的 IP 隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
  • 使用该工作模式,负载调度器就可以处理大量的请求,它甚至可以调度百台以上的服务器(同等规模的服务器),但不会成为系统的瓶颈。

TUN模式的优缺点:

  • 优点是VS/TUN 可以极大地增加负载调度器调度的服务器数量。VS/TUN 调度器可以调度上百台服务器,而它本身不会成为系统的瓶颈,可以用来构建高性能的超级服务器。
  • 缺点是RS配置复杂,不支持端口映射,要求必须支持隧道

2.3 DR模式

DR表示通过直接路由模式实现调度,要求后端服务器和lvs在同一个局域网。跟 VS/TUN 方法相同,VS/DR 利用大多数 Internet 服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。
但是调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,例如通过交换机或者高速的HUB 相连。
在这里插入图片描述

如上图所示,VIP 地址为调度器和服务器组共享,调度器配置的 VIP 地址是对外可见的,用于接收虚拟服务的请求报文。也就是说客户端访问时访问的是vip,最终真实服务器给客户端响应时,依然用的是vip,客户端是感知不到服务器的存在的。所有的服务器把 VIP 地址配置在各自的 Non­ARP 网络设备上,它对外面是不可见的,只是用于处理目标地址为 VIP 的网络请求。
该模式下,调度器在更具调度算法选出要传输数据的服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为所选的真实服务器的MAC地址,再通过交换机将该数据发送给服务器,这个过程不需要RIP的出现。

DR工作模式的特点:

  • 保证前端路由将目标地址为vip报文系统发给DS,而不是RS
  • RS和DS必须在同一个物理网络
  • 所有的请求报文经由DR,但响应报文不经过DR
  • 不支持地址转换和端口映射,支持MAC地址转化
  • RS上绑定vip,风险大

2.4 FULLNAT模式

FULLNAT是一种新的转发模式,他的主要思想是引入local address(内网ip地址),cip-vip转换为lip->rip,而 lip和rip均为IDC内网ip,可以跨vlan通讯。
在这里插入图片描述

该模式下的报文变化:
客户端发送数据包到调度器上的vip,调度器将数据包源地址转化为本地lip,再使用本地地址将数据包转发到真实服务器上的rip,这就实现了一次SNAT+DNAT;真实服务器在作出响应后,将数据包发送到调度器的lip,再由调度器作转换后,以vip发送到客户端cip,又实现了一次SNAT+DNAT

2.5 FULLNAT模式和NAT模式的区别

LVS实现负载均衡主要采用的是DR和NAT模式,但这两种模式都要求RS和LVS在同一个vlan,这会导致企部署成本过高;
而TUNNEL可以实现跨vlan,但是需要在RS上部署ipip模块,需要连通外网等,不易维护;
所以出现了FULLNAT模式,可以实现跨vlan,而且RS只需要连接在内网上。

  • NAT实现原理
    在这里插入图片描述

  • FULLNAT实现原理
    在这里插入图片描述

3 实现DR模式下的负载均衡

实验准备:以servers1作为搭建负载均衡虚拟服务器的主机,也就是调度器或者说是LVS;servers2和servers3作为后台真实服务器。
在severs1上,也就是调度器上,操作如下:
安装lvs管理器yum install ipvsadm -y,安装好后使用ipvsadm -l命令查看lvs调度器,此时还没有设定过,所以为空:
在这里插入图片描述

在severs2和servers3上,也就是后端真实服务器上,操作如下:
分别在两台服务器上安装htppd服务并书写默认发布文件用于测试,实现httpd的负载均衡:
在这里插入图片描述
在这里插入图片描述

在severs1调度器上,操作如下:
1)输入ipvsadm -A -t 172.25.12.100:80 -s rr命令,添加调度器的vip,其中rr表示轮询调度算法;
输入ipvsadm -a -t 172.25.12.100:80 -r 172.25.12.2:80 -gipvsadm -a -t 172.25.12.100:80 -r 172.25.12.3:80 -g,表示将servers2和servers3分别作为真实主机被负载均衡服务器所管理;
输入ipvsadm -ln表示不做解析的查看lvs调度器:
在这里插入图片描述
注意:当添加错误要删除时,可以将-A或-a改为-D或-d删除即可,删除时,先删除RS,再删除LVS。

2)输入ip addr,查看是没有100这个ip的,此时100是不会被识别到的,所以需要输入ip addr add 172.25.12.100/32 dev eth0添加100这个虚拟服务器ip:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在真机上测试:
当没在servers2和servers3上添加100时,真机上测试不显示内容,会卡住不动:
在这里插入图片描述

在severs2和servers3后端真实服务器上,添加vip:
在这里插入图片描述
在这里插入图片描述

在真机上测试:
1)可以看到,servers2和servers3被轮询调用:
在这里插入图片描述

2)输入arp -an | grep 100,可以看到vip的缓存;输入 arp -d 172.25.12.100删除缓存,再去查看,发现没有vip的缓存了,此时再ping vip,查看又出现了缓存:
在这里插入图片描述

3)然后再测试,发现,不再做轮询,而是只访问一个RS:
在这里插入图片描述

为了解决上面产生的问题,可以在severs2和servers3后端真实服务器上安装arp防火墙软件
1)在servers2中输入yum install -y arptables_jf安装软件;输入arptables -A INPUT -d 172.25.12.100 -j DROP,表示设定防火墙策略,将arp过来访问100的信息丢弃;输入arptables -A OUTPUT -s 172.25.12.100 -j mangle --mangle-ip-s 172.25.12.2,表示将arp出去时的信息转到servers2上:
在这里插入图片描述

2)输入arptables-save > /etc/sysconfig/arptables,将策略保存在该文件中,查看该文件:
在这里插入图片描述

3)输入arptables -F命令删除策略,再输入arptables -L发现没有策略:
在这里插入图片描述

4)重启服务后,再不做解析的查看策略,发现策略恢复:
在这里插入图片描述

5)将该文件传输到servers3中:
在这里插入图片描述

6)在servers3中,安装软件后,编辑/etc/sysconfig/arptables文件,将策略中的ip修改为自己的ip,重启服务后,查看策略:
在这里插入图片描述

在真机上测试:
清除缓存后,再做访问,就做的时轮询调度,也就是实现了负载均衡:
在这里插入图片描述

4 keepalived实现lvs的健康检测

默认情况下,lvs对后端没有健康检查机制。如果出现了某台RS故障,是会直接体现在客户端的。要使得RS在故障时,不会直接体现在客户端,我们可以做lvs的健康检测。
1)在没有健康检测的情况下,关闭servers3的httpd服务,再去真机测试,发现只有servers2被调用,在调用server3时会产生报错。为了解决该问题,我们可以做以下操作:
2)在调度机上,安装keepalived软件,使用该软件可以自动添加虚拟ip以及编写ipvsadm规则,实现健康检测。进入/etc/keepalived/目录下,编辑keepalived.conf 文件,内容如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3)输入ip addr,此时可以看到之前自己手动添加的vip:
在这里插入图片描述

4)将自己添加的vip删除,ip addr del 172.25.12.100/24 dev eth0
在这里插入图片描述

5)输入ipvsadm -ln查看lvs调度策略;输入ipvsadm -C 清理掉所有的设定;再次查看lvs调度策略,设定已经被清理掉:
在这里插入图片描述

6)重启服务,查看ip,看到该vip自动添加上:
在这里插入图片描述

7)查看lvs策略,策略恢复:
在这里插入图片描述

在真机上测试:
在这里插入图片描述

注意:将servers2的httpd服务关掉,再去测试,可以看到只有servers3被调用,但是不会出现报错情况。去调度机上看lvs策略,也看不到servers2了:

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

在这里插入图片描述

在severs1调度器上:
一旦当客户端出现问题,再去server1s上执行任何命令时,就会提示收到邮件:
在这里插入图片描述

此时可以执行yum install mailx -y命令安装软件,输入mail即可查看邮件,输入邮件编号就可以查看邮件内容,此时就可以根据邮件提示的内容及时对RS进行故障恢复:
在这里插入图片描述
在这里插入图片描述

5 keepalived实现冗余判断(高可用)

调度机只有一台时,如果调度机故障了,那么外部信息将无法访问到RS,所以我们需要再建立一台辅助调度机。当一台调度机故障时,立马会有下一台调度机接管作业,而客户端不会产生任何影响。当该故障被恢复后,控制权会自动再回到优先级高的服务器上,以此实现高可用。
1)快照一个新的虚拟机作为备用调度机并安装ipvsadm 和keepalived软件:
在这里插入图片描述

2)将在servers1上修改好的keepalived.conf文件复制到servers4上并修改:
在这里插入图片描述
在这里插入图片描述

如下,priority表示优先级。数字越大优先级越高,因为是备用调度器,所以优先级需要低于servers1的;virtual_router_id 11,该数字要保证和servers1 的数字一样,也就是servsers4和servers1在一个组中:
在这里插入图片描述
在这里插入图片描述

3)重启servers4上的服务,并停止servers1上的服务表示servers1故障。此时查看lvs策略发现无策略,表明servers1已经不是vip的提供者了:
在这里插入图片描述
在这里插入图片描述

4)查看servers4上的lvs策略如下,表明servers4现在是vip的提供者;查看servers4的ip,自动出现了vip:
在这里插入图片描述

此时去看日志cat /var/log/messages他就会成为master,且会广播告知其他主机。当去客户端测试时,客户端是看不到任何变化的,不影响客户端的使用:
在这里插入图片描述

若将servers1恢复后,因为servers1的优先级高,所以会抢夺回来master权力:
在这里插入图片描述

查看日志文件,此时servers4又转为辅调度器:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_54719086/article/details/115343049