一、引言
在过去的十几年中,Internet从几个研究机构相连为信息共享的网络发展成为拥有大量应用和服务的全球性网络,它正成为人们生活中不可缺少的 一部分。虽然Internet发展速度很快,但建设和维护大型网络服务依然是一项挑战性的任务,因为系统必须是高性能的、高可靠的,尤其当访问负载不断增 长时,系统必须能被扩展来满足不断增长的性能需求。由于缺少建立可伸缩网络服务的框架和设计方法,这意味着只有拥有非常出色工程和管理人才的机构才能建立 和维护大型的网络服务。
针对这种情形,本文先给出LVS集群的通用体系结构,并讨论了其的设计原则和相应的特点;最后将LVS集群应用于建立可伸缩的Web、Media、Cache和Mail等网络服务。
二、LVS简介
LVS(Linux Virtual Server)是一个基于Linux平台的开源负载均衡系统。它通过将多个服务器组成一个虚拟服务器集群,实现了高效的负载均衡和流量分发。LVS的核心思想是利用IP负载均衡技术和内容请求分发机制,将客户端的请求均衡地分配给服务器集群中的各个节点。这种机制能够有效地提高服务器的利用率,降低单点故障的风险,并提供高可用性和可伸缩性的服务。
LVS的三种工作模式分别是NAT模式、IP隧道模式(TUN)和直接路由模式(DR)
1、LVS的工作原理
LVS通过负载均衡技术将用户请求分发到后端服务器,从而实现高性能、高可用的服务。LVS的基本工作原理是用户请求到达LVS的虚拟IP(VIP),LVS根据转发方式和算法,将请求转发给后端服务器,后端服务器处理请求并返回结果给用户。
2、LVS集群的体系结构
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服 务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。
体系结构如图1所示,三层主要组成部分为:
- 负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
- 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
- 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
三、LVS三种工作模式
1、NAT模式
NAT模式工作原理:用户请求到达LVS的调度器,调度器将请求的目标IP改为后端服务器的IP,同时修改目标端口,然后将请求发送到后端服务器。后端服务器处理请求后,将响应返回给调度器,再由调度器返回给用户
1.1NAT模式体系结构
在一组服务器前有一个调度器,它们是通过Switch/HUB相连接的。这些服务器 提供相同的网络服务、相同的内容,即不管请求被发送到哪一台服务器,执行结果是一样的。服务的内容可以复制到每台服务器的本地硬盘上,可以通过网络文件系 统(如NFS)共享,也可以通过一个分布式文件系统来提供。
1.2NAT体系结构图
2、DR模式
DR模式的工作原理:用户请求到达LVS的调度器,调度器将请求的目标MAC地址改为后端服务器的MAC地址,目标IP保持不变,然后将请求发送到后端服务器。后端服务器直接将响应返回给用户。
2.1DR模式的体系结构
调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过高速的交换机或者HUB相连。VIP地址为调度器和服务器组共享,调度 器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。
2.2DR模式体系结构图
3、TUN模式
TUN模式工作原理:用户请求到达LVS的调度器,调度器通过IP隧道技术将请求封装到一个新的IP包中,然后发送到后端服务器。后端服务器解封装后处理请求,并直接将响应返回给用户
3.1TUN模式的体系结构
利用IP隧道技术将请求报文封装转 发给后端服务器,响应报文能从后端服务器直接返回给客户。但在这里,后端服务器有一组而非一个,所以我们不可能静态地建立一一对应的隧道,而是动态地选择 一台服务器,将请求报文封装和转发给选出的服务器。这样,我们可以利用IP隧道的原理将一组服务器上的网络服务组成在一个IP地址上的虚拟网络服务。
3.2TUN模式体系结构图
以上内容均来自LVS官方文档详情请自行访问该网站LVS项目中的有关中文文档
四、LVS负载均衡的搭建
注意:开始搭建之前所有虚拟机都需要关闭防火墙和SELinux
基于NAT的LVS负载均衡
1、节点规划
主机 | 角色 | 系统 | 网络 | IP |
---|---|---|---|---|
client | client | redhat 9.5 | 仅主机 | 192.168.75.100/24 |
lvs | lvs | redhat 9.5 | 仅主机 NAT | 192.168.75.200/24 VIP 192.168.250.8/24 DIP |
nginx | rs1 | redhat 9.5 | NAT | 192.168.250.7/24 |
nginx | rs2 | redhat 9.5 | NAT | 192.168.250.17/24 |
nginx | rs3 | redhat9.5 | NAT | 192.168.250.27/24 |
2、实验搭建
(1)更改网络设置
将主机lvs增加一块虚拟网卡模式为仅主机,将客户机的网卡改成仅主机模式,然后查看仅主机的网段。
注意:每个人的仅主机模式网段各不相同,需要查看后自行修改,否则将会出现连不上xshell的问题。
查看仅主机模式网段方法:1、打开vm点击编辑2、点击虚拟网络编辑器3、单击仅主机模式
网段查看好以后,使用nmcli命令修改IP地址。
注意:修改各主机ip时,要将LVS的ip作为rs1、rs2、rs3的网关
(2)配置RS
先从rs1开始逐一配置
a、rs1
安装nginx
dnf install nginx -y
修改nginx的默认访问页
修改前如果忘记路径可使用rpm -ql nginx查看
echo $(hostname) $(hostname -I) > /usr/share/nginx/html/index.html
b、rs2
安装nginx
dnf install nginx -y
修改nginx的默认访问页
echo $(hostname) $(hostname -I) > /usr/share/nginx/html/index.html
c、rs3
安装nginx
dnf install nginx -y
修改nginx的默认访问页
echo $(hostname) $(hostname -I) > /usr/share/nginx/html/index.html
(3)配置LVS
修改网卡名称
nmcli c modify 'Wired connection 1' connection.id ens224
安装ipvsadm
dnf install ipvsadm -y
客户端只需要修改ip即可,无需任何配置。
启动ipvsadm
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
需要在 LVS 服务器上配置ip转发内核参数
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
配置LVS规则匹配
ipvsadm -A -t 192.168.75.200:80 -s rr
为规则增加RS
ipvsadm -a -t 192.168.75.200:80 -r 192.168.250.7:80 -m -w 2
ipvsadm -a -t 192.168.75.200:80 -r 192.168.250.17:80 -m -w 2
ipvsadm -a -t 192.168.75.200:80 -r 192.168.250.27:80 -m -w 2
查看LVS规则
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.75.200:80 rr
-> 192.168.250.7:80 Masq 2 0 0
-> 192.168.250.17:80 Masq 2 0 0
-> 192.168.250.27:80 Masq 2 0 0
重新启动ipvsadm服务
systemctl restart ipvsadm
(4)测试
在客户机上使用curl命令测试RS上的nginx服务
[root@client ~]# curl 192.168.75.200
RS3 192.168.250.27
[root@client ~]# curl 192.168.75.200
RS2 192.168.250.17
[root@client ~]# curl 192.168.75.200
RS1 192.168.250.7
(5)总结
1、LVS服务器需要有两块网卡,一块用于虚拟IP,便于用户访问;另一块作为后端真实主机的网关。
2、在配置规则时,需要通过 -m 参数来指定是 NAT 模式
3、需要在 LVS 服务器上配置ip转发内核参数