一、LVS负载均衡群集知识
1.1 群集的的定义及意义
Cluster,集群(也称群集)由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机。
群集的作用:
对于企业服务的的性能提升一般会有两种方式:
纵向扩展 : 对服务器的CPU 内存 硬盘 等硬件进行升级或者扩容来实现的 性能上限会有瓶颈,成本昂贵,收效比不高等问题
横向扩展 : 通过增加服务器主机数量来应该高并发的场景
群集的目的 :
提高性能:计算密集应用。如天气预报,核试验模拟
降低成本:相对百万美元的超级计算机,价格便宜
提高可扩展性:只要增加集群节点即可
增强可靠性:多个节点完成相同功能,避免单点失败
企业级群集的类型 :
负载均衡(LB):提高应用系统的响应效率,处理更多的访问请求,减少延迟,提高并发和负载能力。 同时也是如今企业运用最多的群集类型。
高可用(HA): 提高应用系统的可靠性,减少服务中断时间,确保服务的连续性
高性能运算(HPC):将多台主机的硬件计算资源整合到一起实现分布式运用,比如 云计算
二、LVS负载均衡的三种模式
群集的负载调度技术有三种工作模式:地址转换(NAT模式) ,直接路由(DR模式),IP隧道(IP-TUN)。对于商用来说,最常用是NAT模式和DR模式。
NAT(地址转换)
缺点:调度器作为所有节点服务器的网关,既作客户端的访问入口,也作节点服务器响应的访问出口,也就意味着调度器将成为整个集群系统的瓶颈。
优点:由于再转发过程中做了地址转发,对于节点服务器的安全性比其它模式较好。
调度器至少要有2个网卡,一个承载VIP用于接收客户端的请求,另一个用于使用私有IP在同一个局域网中与节点服务器相互通信。
工作原理:
(1)用户通过Internet DNS服务器在我们的负载均衡设备上解析为外网地址。 相对于真实的服务器,LVS外网IP也被称为VIP(虚拟IP地址)。 通过访问VIP,用户可以连接到后端的真实服务器,所有这些对用户都是透明的。 用户认为他正在访问真正的服务器,但不知道访问的VIP只是一个dispatcher.It目前尚不清楚后端真正的服务器在哪里以及其中有多少是真实的。
(2)用户向LVS负载均衡调度器(也是网关服务器)的外部网卡发送请求。 此时LVS根据预先配置的算法选择后端的真实服务器(内网实际处理数据的web服务器),并将数据请求包转发给真实服务器。转发前,LVS改变数据报文的目的地址和目的端口,并将目的地址和目的端口改变为所选择的真实服务器的IP地址和对应端口。
(3)真实服务器向LVS调度器返回响应数据包。 调度员收到响应数据包后,将源地址和源端口更改为VIP和调度员对应的端口。 当更改完成时,调度器将响应数据包发送回终端用户。 此外,由于LVS调度程序有一个连接哈希表,连接请求和传输信息都记录在该表中。 当同一连接的下一个数据包发送到调度器时,可以直接从哈希表中查找到上一个连接记录,并将记录的信息发送到调度器。
DR(直接路由)
特点:调度器只根据调度算法接收客户端的请求,并将其转发给节点服务器。节点服务器处理完请求后直接向客户端响应,已经响应的数据包不经过dispatcher.In DR模式下,调度器和后端服务器必须在同一个局域网中,并且VIP地址必须在调度器和所有后端服务器之间共享。 性能高于NAT模式 调度器和节点服务器使用私有IP与同一局域网中的节点服务器进行通信。
工作原理:
(1)用户向Director服务器(负载均衡器)发送请求,请求的数据包(源IP为CIP,目标IP为VIP)到达内核空间。
(2)由于Director服务器和real服务器在同一网络中,通过二层的数据链路层进行传输。 内核空间确定所述数据包的目标IP为本地IP。 此时,IPVS比较数据包请求的业务是否为集群业务。 在那种情况下,重新打包数据包并将源MAC地址更改为DIP的MAC地址,将目标MAC地址更改为RIP的MAC地址。 如果源和目的IP地址没有改变,则将数据包发送到真实服务器。
(3)当真实服务器检测到请求报文的MAC地址为自己的MAC地址时,接收报文,重新打包报文(源IP地址为VIP,目标IP为CIP),通过lo接口将响应报文发送到物理网卡, 真实服务器直接向客户端发送响应消息。
TUN(IP隧道)
TUN(IP隧道) 架构类似于DR,但节点服务器分散在Internet上的不同地方,都具有独立的公共IP,并通过专用IP隧道与调度器通信。
采用开放的网络结构,负载调度器只作为客户端访问入口,每个节点通过负载调度器传输压力小于NAT。
服务器节点分散在Internet上的不同位置,具有独立的公共IP地址,并通过专用IP隧道和负载调度器相互通信。
缺点:成本很高。
该模型常用于特殊场景,如在全国范围内分布节点服务器,以防止物理攻击(地震、战争等)。).为灾难做好准备。
(1)当用户请求到达Director服务器时,请求的数据包首先被移动到内核空间优先路由链。 此时源IP为CIP,目标IP为VIP。
(2)PREROUTING确认数据包的目标IP为本机,并将数据包转发到输入链。
(3)IPVS比较数据包请求的服务是否足以为集群服务。 在这种情况下,ip数据包在请求数据包的头部被封装一次,并且封装的数据包的源IP是DIP和目标IP是RIP.それをPOSTROUTINGに送信しますCHAIN.At 本次源IP为DIP,目标IP为RIP
(4)POSTROUTING chain根据最新封装的IP报文向RS发送数据报文(由于在外部封装中多了一层IP头,此时可以理解为是通过隧道发送的)。
(5)RS收到数据包后,RS检测到是自己的IP地址。 执行完解封装操作后,去掉最外层的IP后,可以看到里面还有一层IP头,目标是自己的LO接口VIP,此时RS会处理这个请求。 程完成后,通过lo接口发送到eth0网卡,并通过出线。源IP地址为VIP,目标IP为CIP。
(6)响应消息到达客户端。
2.2 LVS的负载调度算法
固定调度算法:rr, wrr, dh,sh
rr:轮询算法(Round Robin)
请求分配给不同的RS节点在turn.distributed.It 它适用于所有RS节点的处理性能接近的情况。
将接收到的访问请求的安装顺序依次分配给集群中的每个节点(真实服务器),并平等对待每个服务器,而不考虑实际连接数和服务器上的系统负载。
wrr:加权轮询调度(Weighted Round Robin)
依据不同RS的权重值分配任务。权重值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
保证性能强的服务器承担更多的访问流量。
dh:目的地址哈希调度(destination hashing)
以目的地址为关键字查找一个静态hash表来获得所需RS。
sh:源地址哈希调度(source hashing)
源地址为关键字查找--个静态hash表来获得需要的RS。
动态调度算法: wlc,lc,lblc
lc:最小连接数调度( Least Connections)
ipvs表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。
根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。
wlc:加权最小连接数调度(Weighted Least Connections)
假设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次取Ti/Wi为最小的RS作为下一个分配的RS。
在服务器节点的性能差异较大时,可以为真实服务器自动调整权重。
性能较高的节点将承担更大比例的活动连接负载。
lblc:基于地址的最小连接数调度(locality-based least-connection)
将来自同一个目的地址的请求分配给同一-台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。
三、LVS部署前
3.1 ipvsadm 工具选项说明
pvsadm的选项 | 作用 |
-A | 添加虚拟服务器 |
-D | 删除整个虚拟服务器 |
-s | 指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc) |
-a | 表示添加真实服务器(节点服务器) |
-d | 删除某一个节点 |
-t | 指定 VIP地址及 TCP端口 |
-r | 指定 RIP地址及 TCP端口 |
-m | 表示使用 NAT群集模式 |
-g | 表示使用 DR模式 |
-i | 表示使用 TUN模式 |
-w | 设置权重(权重为 0 时表示暂停节点) |
-p 60 | 表示保持长连接60秒(默认关闭连接保持) |
-l | 列表查看 LVS 虚拟服务器(默认为查看所有) |
-n | 以数字形式显示地址、端口等信息,常与“-l”选项组合使用。ipvsadm -ln |
3.2 ip_vs通用模块
ls /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs
modprobe ip_vs //手动加载 ip_vs 模块
cat /proc/net/ip_vs //查看当前系统中ip_vs模块的版本信息
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
四、 LVS负载均衡-NAT模式的部署
4.1 NAT模式实验部署操作前的准备设计以及需求
实验需求
通过NAT模式使外网客户机能够访问到相关的web服务,并且LVS调度器使内网中的web服务器达到负载均衡的效果。此外NFS共享存储为web服务提供更大的存储空间
实验设备准备
需要五台虚拟机(一台web1服务器,一台web2服务器,一台负载均衡调度器,一台NFS共享存储机,一台外网客户机做测试作用)
各设备的IP设置如下:
负载调度器:内网关 ens33:192.168.136.100,外网关 ens36:12.0.0.100
Web节点服务器1:192.168.136.120
Web节点服务器2:192.168.136.130
NFS服务器:192.168.136.110
客户端:12.0.0.66
4.2 NAT模式实验部署操作步骤
第一步:部署共享服务(主机IP:192.168.136.110)
95 systemctl stop firewalld.service
96 systemctl disable firewalld.service
97 setenforce 0
98 yum install nfs-utils rpcbind -y
99 systemctl start rpcbind.service
100 systemctl start nfs.service
101 systemctl enable nfs.service
102 systemctl enable rpcbind.service
103 mkdir -p /var/www/html/{cxk,xhz}
104 cd /var/www/html/
105 ls
106 echo 'this is cxk_web01!' >cxk/test.html
107 echo 'this is xhz_web02!' >xhz/test.html
108 cat cxk/test.html
109 cat xhz/test.html
110 vim /etc/exports
111 systemctl enable --now rpcbind nfs
112 showmount -e
113 systemctl stop firewalld
114 setenforce 0
115 showmount -e
116 systemctl enable --now rpcbind nfs
117 showmount -e
118 vim /etc/exports
119 systemctl status rpcbind.service
120 systemctl status nfs
121 showmount -e
122 exportfs -a
123 showmount -e
第二步:配置节点服务器(192.168.136.120 192.168.136.130)
两台web节点服务器相同的操作:
77 systemctl restart network.service
78 systemctl disable --now firewalld
79 setenforce 0
80 showmount -e 192.168.136.110
81 cd /etc/yum.repos.d/
82 ls
83 mkdir bak
84 mv *.repo bak
85 rz -E
86 ls
87 yum -y install nginx
88 vim /etc/fstab
89 mount -a
90 df -h
91 ls
92 ls /usr/share/nginx/html/
93 cat te
94 ls /usr/share/nginx/html/
95 cat /usr/share/nginx/html/test.html
96 vim /etc/nginx/nginx.conf
97 systemctl restart nginx
98 vim /etc/sysconfig/network-scripts/ifcfg-ens33
99 systemctl restart network nginx
web1节点服务器的后续操作:
web2节点服务器的后续操作:
第三步:配置负载调度器(内网关 ens33:192.168.136.100,外网关 ens36:12.0.0.100)
101 cd /etc/sysconfig/network-scripts/
102 ls
103 ip a
104 cp ifcfg-ens33 ifcfg-ens34
105 ls
106 vim ifcfg-ens34
107 vim ifcfg-ens33
108 ls
109 systemctl restart network
110 ip a
111 vim /etc/sysctl.d/
112 vim /etc/sysctl.d
113 vim /etc/sysctl.conf
114 sysctl -p
115 modprobe ip_vs
116 cat /proc/net/ip_vs
117 yum -y install ipvsadm.x86_64
118 cd /etc/yum.repos.d/
119 ls
120 vim /etc/sysconfig/network-scripts/ifcfg-ens33
121 cd /etc/sysconfig/
122 vim /etc/sysconfig/network-scripts/ifcfg-ens33
123 systemctl restart network
124 yum -y install ipvsadm.x86_64
125 vim /etc/sysconfig/network-scripts/ifcfg-ens33
126 systemctl restart network
127 ip a
128 systemctl start ipvsadm.service
129 systemctl status ipvsadm.service
130 ipvsadm-save /etc/sysconfig/ipvsadm
131 systemctl start ipvsadm.service
132 ipvsadm-save > /etc/sysconfig/ipvsadm
133 systemctl start ipvsadm.service
134 ipvsadm -C
135 ipvsadm -ln
136 ipvsadm -A -t 12.0.0.100 -s rr
137 ipvsadm -A -t 12.0.0.100:80 -s rr
138 ipvsadm -ln
139 ipvsadm -a -t 12.0.0.100:80 -r 192.168.136.120:80 -m
140 ipvsadm -a -t 12.0.0.100:80 -r 192.168.136.130:80 -m
141 ipvsadm -ln
142 ipvsadm
143 ipvsadm -ln
144 ls /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs
145 cat /proc/net/ip_vs
保存LVS的配置策略以及删除策略的方法:
ipvsadm-save > /opt/ipvsadm #保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
----------------------------------------------------------------------------------------------------------
ipvsadm -d -t 12.0.0.100:80 -r 192.168.136.120:80 #删除群集中某一节点服务器
ipvsadm -D -t 12.0.0.100:80 #删除整个虚拟服务器
systemctl stop ipvsadm #停止服务(清空策略)
systemctl start ipvsadm #启动服务(根据/etc/sysconfig/ipvsadm重建配置)
ipvsadm-restore < /opt/ipvsadm #恢复LVS 策略
134 ipvsadm -C
135 ipvsadm -ln
136 ipvsadm -A -t 12.0.0.100 -s rr
137 ipvsadm -A -t 12.0.0.100:80 -s rr
138 ipvsadm -ln
139 ipvsadm -a -t 12.0.0.100:80 -r 192.168.136.120:80 -m
140 ipvsadm -a -t 12.0.0.100:80 -r 192.168.136.130:80 -m
141 ipvsadm -ln
142 ipvsadm
143 ipvsadm -ln
第四步:进行客户机测试