LVS集群技术

一、LVS的简介

LVS:Linux Virtual Server,负载调度器,是一种基于Linux操作系统内核的高性能、高可用网络服务负载均衡解决方案。

LVS工作原理基于网络层(四层,传输层)的负载均衡技术,它通过内核级别的IP虚拟服务器 (IPVS)模块实现透明的流量分发。
**.集群和分布式简介
**2.1.系统性能扩展方式
Scale UP:向上扩展,增强
Scale Out:向外扩展,增加设备,调度分配问题,Cluster
2.2.集群Cluster
Cluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统
Cluster常见的三种类型:
LB:LoadBalancing(负载均衡)由多个主机组成,每个主机只承担一部分访问
HA:High Availiablity(高可用)SPOF(single Point Of failure)
MTBF:Mean Time Between Failure 平均无故障时间,正常时间
MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间
A=MTBF/(MTBF+MTTR) (0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%
SLA:Service level agreement(服务等级协议)是在一定开销下为保障服务的性能和可用性,服 务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在 常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这种水平的时候,就会有一 些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。
停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外
停机时间
HPC:High-performance computing
2.3.分布式
分布式存储:Ceph,GlusterFs,FastDFS,MogileFs
分布式计算:hadoop,Spark
分布式常见应用
分布式应用-服务按照功能拆分,使用微服务
分布式静态资源--静态资源放在不同的存储集群上分布式数据和存储--使用key-value缓存系统
分布式计算--对特殊业务使用分布式计算,比如Hadoop集群
2.4.集群和分布式
集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据 和代码都是一样的。
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式
中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起
来,才是完整的业务。
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数 来提升效率。
对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器 完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决 定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点, 都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败。
.lvs
Linux virtual server)运行原理

**3.2 lvs
集群体系结构**

工作原理:
VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS
3.3.LVS****概念
VS:Virtual Server
RS:Real Server
CIP:Client IP
VIP: Virtual serve IP VS外网的IP
DIP: Director IP VS内网的IP
RIP: Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP
3.4.lvs****集群的类型
lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
lvs-dr: 操纵封装新的MAC地址
lvs-tun: 在原请求IP报文之外新加一个IP首部
lvs-fullnat: 修改请求报文的源和目标IP
3.4.1.nat****模式
Ivs-nat:
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和
PORT实现转发。
RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP。
请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈。
支持端口映射,可修改请求报文的目标PORT。
VS必须是Linux系统,RS可以是任意OS系统。
3.4.2.nat****模式数据逻辑

1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口
(9000port)
2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
3.RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口(9000port)
4.VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)
5.VS服务器把修改过报文的响应数据包回传给客户端
6.lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞

客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,当IPVS存在后访问请求在通
过PREROUTING后被ipvs结果并作nat转发
因为ipvs的作用点是在PREROUTING和INPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工
作。所以在做lvs时要把iptables的火墙策略全清理掉。
3.4.3.DR****模式
DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行 转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源 IP/PORT,以及目标IP/PORT均保持不变。
3.4.4.DR****模式数逻辑

在DR模式中,RS接收到访问请求后不需要回传给VS调度器,直接把回传数据发送给client,所以RS和vs 上都要有vip
3.4.6.DR****模式数据传输过程
1.客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC
2.VS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端 的MAC+VIP+RS1的MAC
3.RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的 MAC
3.4.6.DR****模式的特点
1.Director和各RS都配置有VIP
2.确保前端路由器将目标IP为VIP的请求报文发往Director
3.在前端网关做静态绑定VIP和Director的MAC地址
4.RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;
5.RIP的网关不能指向DIP,以确保响应报文不会经由Director
6.RS和Director要在同一个物理网络
7.请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
8.不支持端口映射(端口不能修败)
9.RS可使用大多数OS系统
四、LVS的调度算法
1、静态调度算法
RR:roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐。
WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少
SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定。
DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商。
2、动态调度算法
LC:least connections(最少链接法):主要根据RS当前的负载状态及调度算法进行调度 Overhead=value较小的RS会被调度。
WLC:Weighted LC(权重最少链接): 适用于长连接应用Overhead(负载值) =activeconns(活动链接数) x 256+inactiveconns(非活动链接数)。
SED:Shortest Expection Delay:默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight。
NQ:Never Queue,第一轮均匀分配,后续SED,初始连接高权重优先Overhead= (activeconns+1+inactiveconns) x 256/weight ,但是,当node1的权重为1,node2的权 重为10,经过运算前几次的调度都会被node2承接。
LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理。
LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重 的复制到负载轻的RS。

五、LVS的实战案例
1、LVS部署相关命令介绍
程序包:ipvsadm
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
ipvs调度规则文件:/etc/sysconfig/ipvsadm
管理集群服务中的增删改查: ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
管理集群中realserver的增删改查:ipvsadm -a|e -t|u|f service-address -r realserver-address [- g|i|m] [-w weight]

2、部署nat模式集群

2.1.实验环境
2.2.实验内容
2.2.1设置vs、rs的ip

webserver1:

vim /etc/NetworkManager/system-connections/eth0.nmconnection

webserver2:

vim /etc/NetworkManager/system-connections/eth0.nmconnection

nmcli connection reload

nmcli connection up eth0

2.2.2在lvs中打开内核路由功能

vim /etc/sysctl.conf

sysctl -p

2.2.3在webserver安装apache

dnf install httpd -y #安装

echo webserver1-192.168.0.10 > /var/www/html/index.html #将不同内容写入网站首页

echo webserver2-192.168.0.20 > /var/www/html/index.html

2.2.4在lvs中加策略

安装ipvsadm:

dnf install ipvsadm -y

加策略:rr轮询策略

root@lvs \~\]# ipvsadm -A -t 172.25.254.100:80 -s rr \[root@lvs \~\]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m \[root@lvs \~\]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m \[root@lvs \~\]# ipvsadm -Ln ![](https://i-blog.csdnimg.cn/direct/91d8ce08120b4346b39f6215af8e2b60.png) ###### 2.2.4检测 ![](https://i-blog.csdnimg.cn/direct/2636372a6444446f8a4580624c16aa99.png) #### 3、部署dr模式集群 ##### 3.1实验环境 ![](https://i-blog.csdnimg.cn/direct/c379ad7056b341f2bc881bc5adbe7d2c.png) ##### 3.2实验内容 ###### 3.2.1配置IP vim /etc/NetworkManager/system-connections/eth0.nmconnection nmcli connection reload nmcli connection up eth0 client:需要将网关设置为路由器router的ip: ![](https://i-blog.csdnimg.cn/direct/83c6611db27e41d98c5e82855263770f.png) router:需要两个网卡,一个为nat模式,一个为仅主机模式: ![](https://i-blog.csdnimg.cn/direct/4d20f69a58474d0197eaa2901850b2fd.png) vs:网关同样设置为路由器router的ip: ![](https://i-blog.csdnimg.cn/direct/1e54965e4003445198469181afed96e5.png) webserver1:网关同样设置为router的ip ![](https://i-blog.csdnimg.cn/direct/3c69e68346a94a8d8c98052d512902b1.png) webserver2:网关同样设置为router的ip![](https://i-blog.csdnimg.cn/direct/b76ecad50d1d4bebbfc2ee40615b332e.png) ###### 3.2.2添加vip 在vs、wevserver1、webserver2上lo上添加vip 使rs中的vip不对外生效 \[root@webserver1 \~\]# echo 1 \> /proc/sys/net/ipv4/conf/all/arp_ignore \[root@webserver1 \~\]# echo 2 \> /proc/sys/net/ipv4/conf/all/arp_announce \[root@webserver1 \~\]# echo 1 \> /proc/sys/net/ipv4/conf/lo/arp_ignore \[root@webserver1 \~\]# echo 2 \> /proc/sys/net/ipv4/conf/lo/arp_announce ###### 3.2.3在lvs中添加策略 策略算法为wrr:基于权重的轮询,分别设置webserver1的权重为1、webserver2为2。 \[root@lvs \~\]# ipvsadm -A -t 192.168.0.200:80 -s wrr \[root@lvs \~\]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1 \[root@lvs \~\]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2 3.2.3在client中检测 ![](https://i-blog.csdnimg.cn/direct/fad76e23d43f41b587f6eac4ebc261ea.png) 4、防火墙标签解决轮询调度问题 4.1.轮询调度问题 以 http 和 https 为例,当我们在 RS 中同时开放 80 和 443 端口,那么默认控制是分开轮询的,这样我们就出现了一个轮询错乱的问题 :当我第一次访问80 被轮询到 RS1 后下次访问 443 仍然可能会被轮询到 RS1 上。 #在lvs添加rr策略 \[root@lvs \~\]# ipvsadm -A -t 192.168.0.200:80 -s rr \[root@lvs \~\]# ipvsadm -A -t 192.168.0.200:443 -s rr \[root@lvs \~\]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g \[root@lvs \~\]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g \[root@lvs \~\]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g \[root@lvs \~\]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g 轮询错误: ![](https://i-blog.csdnimg.cn/direct/c57e9f8c92b34034aee61ac3e9a54823.png) ##### 4.2.解决轮询调度问题 ###### 4.2.1安装mod_ssl模块,让rs支持https yum install mod_ssl -y ###### 4.2.2.在lvs主机中为端口做标记 iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6666 ###### 4.2.3.在lvs中添加策略 \[root@lvs \~\]# ipvsadm -C \[root@lvs \~\]# ipvsadm -A -f 6666 -s rr \[root@lvs \~\]# ipvsadm -a -f 6666 -r 192.168.0.10 -g \[root@lvs \~\]# ipvsadm -a -f 6666 -r 192.168.0.20 -g ###### 4.2.4在client中检测 ![](https://i-blog.csdnimg.cn/direct/dd74f7bd1d8749239e0bef623c375a94.png)

相关推荐
竹竿袅袅2 小时前
Keepalived 原理及配置(高可用)
运维·云原生·lvs·keepalived·haproxy·高可用
Stewie121383 天前
lvs集群技术
lvs
中心观察者3 天前
LVS技术详解与实战
linux·运维·服务器·网络·lvs
这日光醉了城.3 天前
LVS---集群技术
lvs
用户呢称4 天前
Linux | LVS--Linux虚拟服务器知识点(下)
linux·服务器·lvs
zoulingzhi_yjs4 天前
Linux LVS集群技术
linux·服务器·lvs
cqh2054 天前
LVS(Linux Virtual Server) 集群
linux·运维·lvs
电动2302张尚文4 天前
lvs集群技术(Linux virual server)
运维·服务器·lvs
obboda4 天前
LVS详解
lvs