LVS全面学习

版权声明:如需转载,请注明作者及出处 https://blog.csdn.net/qq_33317586/article/details/86289099

LVS介绍

LVS:Linux Virtual Server,负载调度器,集成内核 章文嵩
官网:http://www.linuxvirtualserver.org/
VS:Virtual Server,负责调度
RS:Real Server,负责真正提供服务
L4:四层路由器器或交换机
工作原理:VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑战RS
iptables/netfilter:
iptables:用户空间的管理工具
netfilter:内核空间上的架构
流入:PREROUTING → INPUT
流出:OUTPUT → POSTROUTING
转发:PREOUTING → FORWARD → POSTROUTING
DNAT:目标地址转换;PREOUTING


LVS集群中的术语:

VS:Virtual Server,Director Server(DS),Dispacher(调度器),Load Balancer
RS:Real Server(lvs),upstream server(nginx),backend server(haproxy)
CIP:Cllient IP
VIP:Virtual IP VS外网的IP
DIP:Director IP VS内网的IP
RIP:Real server IP

访问流程:CIP <--> VIP <--> DIP <--> RIP


LVS集群的类型:

 

lvs:ipsadm/ipvs

ipvsadm:用户空间的管理工具,规则管理器,用于管理集群服务及RealServer
ipvs:工作于内核空间netfilter的INPUT钩子上的框架
lvs集群的类型:
lvs-nat:修改请求报文目标IP,多目标IP的DNAT
lvs-dr:操作封装新的MAC地址
lvs-tun:在原请求IP报文之外新加一个IP首部
lvs-fullnat:修改请求报文的源和目标IP

lvs-nat模式:

 

本质是多目标Ip的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Direcror转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统

LVS-DR模式
优势:响应报文不经过lvs
缺点:不支持端口映射
LVS-DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装MAC首部进行转发,源MAC是DIP所在接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
(1)Director和各RS都配置有VIP
(2)确保前端路由器将目标IP为VIP的请求报文发往Director
在前端网关做静态绑定VIP和Director的MAC地址
在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
在RS上修改内核参数以限制arp通告及应答级别/proc/sys/net/ipv4/conf/all/arp_ignore,/proc/sys/net/ipv4/conf/all/arp_announce

LVS-tun模式
转发方式:不修改请求报文的IP首部(源ip为CIP,目标Ip为VIP),而在原IP报文之外再封装一个IP首部(源IP为DIP,目标IP为RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP为VIP,目标IP为CIP)
(1)DIP,VIP,RIP应该都为公网地址
(2)RS的网关一般不能指向DIP
(3)请求报文要经由Director,但响应不能经由Director
(4)不支持端口映射
(5)RS的OS必须支持隧道功能

LVS-fullnat模式
注意:此类型kernel默认不支持
通过同时修改报文的源IP地址和目标Ip地址进行转发
CIP --> DIP
VIP --> RIP
(1)VIP是公网地址,RIp和DIP是私网地址,且通常不在同一Ip网络;因此,RIP的网关一般不会指向DIP
(2)RS收到的请求报文源地址是DIP,因此,只需要响应给DIP;但Director还要将其发往Client
(3)请求和响应报文都经由Director
(4)支持端口映射

LVS工作模式总结
VS/NAT VS/TUN VS/DR
Server any Tunnreling Non-arp device
server network private LAN/WAN LAN
server number low(10~20) High(100) High(100)
server gateway load balancer own router Own router
lvs-nat与lvs-fullnat:请求和响应报文都经由Director
lvs-nat:RIP的网关都要指向DIP
lvs-fullnat:DIP与DIp未必在同一网络,但要能通信


lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
lvs-dr:通过新封装的MAC首部实现,通过MAC网络转发
lvs-tun:通过在原IP报文外封装IP头实现转发,支持远距离通信

 


ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态

两种:静态和动态
静态方法:
1.RR:roundrobin,轮询
2.WRR:Weighted RR,加权轮询
3.SH:Source Hashing,实现session sticky,源IP地址hash,将来自于同一个IP地址的请求始终发给第一次挑中的RS,从而实现会话绑定
4.DH:Destination Hashing;目标地址hash,将发往同一个目标地址的请求始终发给第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商。
动态方法:
主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
1.LC:least connections 适用于长连接应用
Overhead=activeconns*256+inactiveconns
2.WLC:Weughted LC,默认调度方法
Overhead=(activeconns*256+inactiveconn)/weight
3.SED:Shortest EXpection Delay,初始连接高权重优先
Overhead=(activeconns+1)*256/weight
4.NQ:Never Queue,第一次均匀分配,后续SED
5.LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载均衡状态实现正向代理
6.LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载均衡的复制到负载轻的RS


ipvsadm用法:

ipvs
ipvsadm/ipvs:


ipvsadm包的信息:

[root@node1 ~]# yum info ipvsadm
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
已安装的软件包
名称 :ipvsadm
架构 :x86_64
版本 :1.27
发布 :7.el7
大小 :75 k
源 :installed
来自源:base
简介 : Utility to administer the Linux Virtual Server
网址 :https://kernel.org/pub/linux/utils/kernel/ipvsadm/
协议 : GPLv2+
描述 : ipvsadm is used to setup, maintain, and inspect the virtual server
: table in the Linux kernel. The Linux Virtual Server can be used to
: build scalable network services based on a cluster of two or more
: nodes. The active node of the cluster redirects service requests to a
: collection of server hosts that will actually perform the
: services. Supported Features include:
: - two transport layer (layer-4) protocols (TCP and UDP)
: - three packet-forwarding methods (NAT, tunneling, and direct routing)
: - eight load balancing algorithms (round robin, weighted round robin,
: least-connection, weighted least-connection, locality-based
: least-connection, locality-based least-connection with
: replication, destination-hashing, and source-hashing)


安装ipvsadm:

[root@node1 ~]# yum install ipvsadm -y


查询ipvsadm软件包的相关文件

[root@node1 ~]# rpm -ql ipvsadm
/etc/sysconfig/ipvsadm-config #配置文件
/usr/lib/systemd/system/ipvsadm.service #Unit file
/usr/sbin/ipvsadm #主程序
/usr/sbin/ipvsadm-restore #规则重载工具
/usr/sbin/ipvsadm-save #规则保存工具


————————————————————————————————————————
管理集群服务:增,改,删


增、改:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
删除:
ipvsadm -D -t|u|f service-address
service-address:
-t|u|f:
-t:TCP协议的端口,VIP:TCP_PORT
-u:UDP协议的端口, VIP:UDP_PORT
-f:firewall MARK,标记,一个数字
[-s scheduler]:指定集群的调度算法,默认为wlc

—————————————————————————————————————————

管理集群服务:增,改,删

增,改:ipvsadm -d -t|u|f service-address -r server-address [-g|i|m] [-w weight]
删:ipvsadm -d -t|u|f service-address -r server-address
server-address:
rip[:port] 如省略port,不作端口映射
选项:
lvs类型:
-g:gateway,dr类型,默认
-i:ipip,tun类型
-m:masquerade,nat类型
-w weight:权重

——————————————————————————————————————————
清空定义的所有内容:ipvsadm -C
清空计数器:ipvsadm -Z [-t|u|f service-address]
查看:ipvsadm -L|l [options]
--numeric,-n:以数字形式输出地址和端口号
--exact:扩展信息,精确值
--connection,-c:当前IPVS连接输出
--stats:统计信息
--rate:输出速率信息
ipvs规则:/proc/net/ip_vs
ipvs连接:/proc/net/ip_vs_conn

保存及重载规则
保存:建议保存至/etc/sysconfig/ipvsadm
ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service
重载:
ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
ipvsadm -R /PATH/FROM/IPVSADM_FILE
systemctl restart ipvsadm.service

演示ipvsadm -Ln



显示当前连接输出:
--connection,-c



统计信息:
--stats



显示速率:
--rate



ipvs规则:/proc/net/ip_vs



ipvs连接:/proc/net/ip_vs_conn


清空计数器:


清空所有规则:



保存规则:
不使用ipvsadm-save,而使用ipvsadm -Sn,ipvsadm-save会解析ip,有问题



恢复及重载规则:



ipvsadm在重启和停止时会加载或保存ipvsadm规则



 


LVS-DR模型

DR模型中各主机上均要配置VIP,解决地址冲突的方式有三种:
(1)在前端网关做静态绑定
(2)在各RS使用arptables
(3)在各RS上修改内核参数,来限制arp响应和通告级别

限制响应级别:arp_ignore
0:默认值,表示可以使用本地任意接口上配置的任意地址进行响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,给予响应

限制通告级别:arp_announce
0:默认值:把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告

结构图一个:

猜你喜欢

转载自blog.csdn.net/qq_33317586/article/details/86289099
lvs