简介
LVS 是Linux Virtual Server的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,现在LVS已经是 Linux标准内核的一部分,因此性能较高
-
优势与不足
优势:
高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。
稳定性强:是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。
成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。
配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
不足:
工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。 -
核心组件
LVS的管理工具和内核模块 ipvsadm和ipvs
ipvsadm:
用户空间的命令行工具,用于管理集群服务及集群服务上的RS等;
ipvs:
工作于内核上的程序,可根据用户定义的集群实现请求转发
-
专业术语
VS:Virtual Server #虚拟服务
DR:Director, Balancer #负载均衡器、分发器
RS:Real Server #后端请求处理服务器
CIP: Client IP #用户端IP
VIP:Director Virtual IP #负载均衡器虚拟IP
DIP:Director IP #负载均衡器IP
RIP:Real Server IP #后端请求处理服务器IP -
四种工作模式
NAT:
网络地址转换模式,进站/出站的数据流量经过分发器(IP负载均衡,他修改的是IP地址) --利用三层功能
DR :
直接路由模式,只有进站的数据流量经过分发器(数据链路层负载均衡,因为他修改的是目的mac地址)–利用二层功能mac地址
TUN:
隧道模式,只有进站的数据流量经过分发器
full-nat:
双向转换:通过请求报文的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发 -
调度算法
静态算法:
只根据算法进行调度 而不考虑后端服务器的实际连接情况和负载情况
RR:轮叫调度(Round Robin)
调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
WRR:加权轮叫(Weight RR)
调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。动态算法
前端的调度器会根据后端真实服务器的实际连接情况来分配请求
LC:最少链接(Least Connections)
调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
WLC:加权最少连接(默认采用的就是这种)(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
NQ:永不排队/最少队列调度(Never Queue Scheduling NQ)
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空闲。
操作环境
-
虚拟机三台
DR: 192.168.94.130
需要安装ipvsadm 设置vip 192.168.94.150/32
RS-1:192.168.94.141
安装nginx 设置虚拟ip lo回环地址 :vip192.168.94.150/32
RS-2:192.168.94.142
安装nginx 设置虚拟ip lo 回环地址 : vip 192.168.94.150/32
三台虚拟机的虚拟ip需要一致
操作
-
统一改虚拟机
[root@dr ~]# hostnamectl set-hostname --static DR [root@RS-1 ~]# hostnamectl set-hostname --static RS-1 [root@RS-2 ~]# hostnamectl set-hostname --static RS-2
关闭 firewalld
– static 不加大写会自动转换成小写
-
DR:192.168.94.130
[root@DR ~]# yum -y install ipvsadm
-
RS-1:192.168.94.141
[root@RS-1 ~]# yum -y install epel-release nginx
-
RS-2 :192.168.94.142
[root@RS-2 ~]# yum -y install epel-release nginx
配置
-
DR
[root@DR ~]# ip addr add dev ens33 192.168.94.150/32 [root@DR ~]# ipvsadm --save > /etc/sysconfig/ipvsadm [root@DR ~]# systemctl start ipvsadm [root@DR ~]# ipvsadm -C [root@DR ~]# ipvsadm -A -t 192.168.94.150:80 -s rr [root@DR ~]# ipvsadm -a -t 192.168.94.150:80 -r 192.168.94.141 -g [root@DR ~]# ipvsadm -a -t 192.168.94.150:80 -r 192.168.94.142 -g [root@DR ~]# ipvsadm -S > /etc/sysconfig/ipvsadm
-
RS-1
[root@RS-1 ~]# echo "RS-1" >> /usr/share/nginx/html/index.html [root@RS-1 ~]# systemctl restart nginx [root@RS-1 ~]# ip addr add dev lo 192.168.94.150/32 [root@RS-1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@RS-1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward [root@RS-1 ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv4.conf.all.arp_ignore=1
-
RS-2
[root@RS-2 ~]# ip addr add dev lo 192.168.94.150/32 [root@RS-2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@RS-2 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward [root@RS-2 ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv4.conf.all.arp_ignore=1 [root@RS-2 ~]# echo "RS-2" > /usr/share/nginx/html/index.html [root@RS-2 ~]# systemctl restart nginx [root@RS-2 ~]#
-
结果
参数解释
-
-A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
-s --scheduler #使用的调度算法, rr | wrr | lc | wlc 默认调度算法是 wlc
-a --add-server #在服务器表中添加一条新的真实主机记录
-t --tcp-service #说明虚拟服务器提供tcp服务
-u --udp-service #说明虚拟服务器提供udp服务
-r --real-server #真实服务器地址
-m --masquerading #指定LVS工作模式为NAT模式
-w --weight #真实服务器的权值
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-i --ip #指定LVS的工作模式为隧道模式
-p #会话保持时间,定义流量呗转到同一个realserver的会话存留时间
-C -clear #清除内核虚拟服务器表中的所有记录
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
-L|-l –list #显示内核虚拟服务器表
–numeric, -n:#以数字形式输出地址和端口号
–stats: #统计信息
–rate : #输出速率信息
-Z –zero #虚拟服务表计数器清零(清空当前的连接数量等)