1、LVS集群体系结构
![](https://i-blog.csdnimg.cn/direct/4648568fdb2142f28cb2335fc7f46c6b.png)
一般来说,LVS集群采用三层结构,其体系结构如图1所示,三层主要组成部分为:
负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
2、LVS概念
3、lvs集群的类型
(1)nat模式
![](https://i-blog.csdnimg.cn/direct/d076968f5f7648c9b6c4d914a27caa9c.png)
LVS NAT原理:用户请求LVS到达director,director将请求的报文的目的IP改为RIP,同时将报文的目标端口也改为realserver的相应端口,最后将报文发送到realserver上,realserver将数据返回给director,director再把数据发送给用户
LVS NAT特性:NAT模式修改的是目的ip,直接走的是switch不需要修改mac地址,所以VIP和RIP不需要在同一个网段内
NAT的包的进出都需要经过LVS,所以LVS可能会成为一个系统的瓶颈问题
A、lvs-nat部署
![](https://i-blog.csdnimg.cn/direct/027292ba35d64f73856988f5909ac627.png)
![](https://i-blog.csdnimg.cn/direct/519503ad8f4c4e33bf29a2a08b939ced.png)
![](https://i-blog.csdnimg.cn/direct/e2b66ac5454b4123993a97391f89da4b.png)
![](https://i-blog.csdnimg.cn/direct/237c90aa7cd042b0812e09e62bd2195e.png)
![](https://i-blog.csdnimg.cn/direct/1559390711504cbe8b9a94c7a9f97b75.png)
![](https://i-blog.csdnimg.cn/direct/cc676397d353458495cbc430de045216.png)
![](https://i-blog.csdnimg.cn/direct/bfb669bbe4424f139dd4fc440df25b87.png)
yum install httpd -y
![](https://i-blog.csdnimg.cn/direct/faba7f86ad6147aba6dd4db6e0ae8953.png)
![](https://i-blog.csdnimg.cn/direct/36a3ac8e627c4e728eab6272195188ff.png)
B、ipvsadm命令的使用
![](https://i-blog.csdnimg.cn/direct/4210e4680b18486aad5e0c0623769776.png)
![](https://i-blog.csdnimg.cn/direct/d33c619253ee4e46b4cfd6ef5c83f35b.png)
![](https://i-blog.csdnimg.cn/direct/b0cd0de7d51e45509c0febd815eb507b.png)
![](https://i-blog.csdnimg.cn/direct/bf72045ed8494f3a93246cc85ad02b1e.png)
![](https://i-blog.csdnimg.cn/direct/ab73ae67df8a49769aa316a09ba6c9a5.png)
![](https://i-blog.csdnimg.cn/direct/dd2fa5509e0740d9933a9098c2e270f2.png)
(2)DR模式
![](https://i-blog.csdnimg.cn/direct/96ce9f000ddb47ddbe2e9f504ca1cd22.png)
a.DR;Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源 IP/PORT,以及目标IP/PORT均保持不变
b.LVSDR原理:用户请求LVS到达director,director将请求的报文的目的MAC地址改为后端的realserver的MAC地址,目的IP为VIP(不变),源IP为client IP地址(不变),然后director将报文发送到realserver,realserver检测到目的地址为自己本地的VIP,如果在同一网段,将请求直接返回给用户,如果用户跟realserver不在同一个网段,则需要通过网关返回给用户
C、LVS的DR模式实现
![](https://i-blog.csdnimg.cn/direct/52a90eb8d33146dcbeabe108a648da44.png)
![](https://i-blog.csdnimg.cn/direct/1858dbdcd8da48bb82e4e2c1a85bc1a9.png)
![](https://i-blog.csdnimg.cn/direct/05231324e84c49e1b7796efd2d7d12d6.png)
![](https://i-blog.csdnimg.cn/direct/2d2536667ebf4e1fbd83545bf555e684.png)
![](https://i-blog.csdnimg.cn/direct/bdca79ee28f5424da5c83c42100cf0d1.png)
![](https://i-blog.csdnimg.cn/direct/950ebfd0253e42b19b6216d06fe84bf1.png)
[root@apache ~]# ip a a 192.168.0.200/32 dev lo
![](https://i-blog.csdnimg.cn/direct/2d4190537a1e4654898289171e434faf.png)
![](https://i-blog.csdnimg.cn/direct/a4523083a0b24b3a9806b0cc6d0e3d29.png)
![](https://i-blog.csdnimg.cn/direct/ad71293ab59c43c0a5b9c9d3d8951437.png)
D、LVS火墙标记
[root@webserver1 ~]# yum install mod_ssl -y
rs(webserver1.webserver2)中重启httpd服务
[root@webserver1 ~]# systemctl restart httpd
LVS主机中
LVS主机中为端口做标记
客户端测试
[root@client ]# curl 192.168.0.200;curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
4、LVS调度算法
(1). 轮叫调度 rr
均等地对待每一台服务器,不管服务器上的实际连接数和系统负载
(2). 加权轮叫 wrr
调度器可以自动问询真实服务器的负载情况,并动态调整权值
(3). 最少链接 lc
动态地将网络请求调度到已建立的连接数最少的服务器上如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡
(4).加权最少链接 wlc
调度器可以自动问询真实服务器的负载情况,并动态调整权值,带权重的谁不干活就给谁分配,机器配置好的权重高
(5). 基于局部性的最少连接调度算法 lblc
这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
(6). 复杂的基于局部性最少的连接算法 lblcr
记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。
(7). 目标地址散列调度算法 dh
该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。
(8). 源地址散列调度算法 sh
与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。
(9). 最少期望延迟 sed
不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙(10). 永不排队 nq
无需队列,如果有realserver的连接数为0就直接分配过去
5、lvs持久链接
在进行调度时,不管用什么算法,只要相同源过来的数据包我们就把他的访问记录在内存中,也就是把 这个源的主机调度到了那个RS上
如果在短期(默认360S)内同源再来访问我仍然按照内存中记录的调度信息,把这个源的访问还调度到同一台RS上。 如果过了比较长的时间(默认最长时间360s)同源访问再次来访,那么就会被调度到其他的RS上
ipvsadm -AlE -tlulf service-address [-s scheduler] [-p [timeout]]默认360秒
在lvs调度器中设定
[root@lvs ~]# ipvsadm -E -f 6666 -s rr -p [3000]
[root@lvs ~]# ipvsadm -LnC