且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

LVS集群详解

更新时间:2022-09-27 09:48:20

一、什么是集群

LVS(Linux Virtual Server)Linux虚拟服务器,将多台虚拟主机组织起来满足同一个需求。由国人章文嵩开发,通过LVS提供的负载均衡可实现一个高性能、高可用的服务器群集,从而以低成本实现最优的服务性能。


二、集群类型  

    LB:Load balancing    负载均衡集群

    HA:High Availavility    高可用集群

    HP:High Performace     高性能集群


三、lvs的常用集群方式及其详解

1、lvs是由用户空间命令和工作在内核上的netfilter的INPUT链上钩子函数所组成,可根据用户自定义集群实现转发。

2、lvs术语

CIP:客服端使用的IP地址

VIP:虚拟服务器IP地址

DIP:director用于和Real server之间进行通信的IP地址

RIP:后端real server的IP地址

RS:real server   

3、lvs类型

lvs-nat:lvs network address translation :lvs网络地址转换

lvs-dr:director routing 直连路由   

lvs-tun:tuneling 隧道

lvs-fullnat:功能更加强大的网络地址转换  


lvs-nat特性:

    多源ip的目标地址转换,通过将请求报文中的目标地址和目标端口修改为从后端主机中挑选出的某RS的RIP和端口实现转发。

    ①RIP和DIP需在同一个网络中,且需使用私有地址,RS的网关需指向DIP,保证响应报文经过RS进行转发,此模型中VS容易成为单点故障,成为系统的瓶颈。

    ②请求报文和相应报文都经由Director进行转发

    ③支持端口映射

    ④VS需为Linux,RS可以是OS  

LVS-DR特性: 

    通过为请求报文重新封装MAC地址进行转发,源MAC地址是DIP所在接口的MAC地址,目标MAC地址为调度器挑选出来的后端RS的MAC地址,IP首部不会发生改变。

    ①确保前端路由器将目标IP为vip的请求报文发往director

    ②RS的RIP可以是私网地址也可以是公网地址

    ③RS和director必须在同一个网络中

    ④请求报文必须经由调度器,但响应报文则一定不能有调度器转发,而是直接有real server响应客服端请求

    ⑤不支持端口映射,RS可使用OS    


确保前端路由器将目标IP为vip的请求报文发往director

解决方案:

    ①在路由器上静态绑定VIP和director的MAC地址,禁止real server响应 arp请求,禁止RS的vip通告

    ②arptables 

    ③修改RS的内核参数,并将VIP绑定lo的别名上,arp_ignore,arp_announce   


限制响应级别:arp_announce 

0:默认,把本机所有的接口信息向每个接口通告;

1:尽量避免向非本网络通告

2:总是避免;符合我们需要 

限制通告级别:arp_ignore

0:默认使用本地任意接口上配置的地址进行响应 

1:仅在请求的目标ip配置在本地主机的接口报文的接口上是,不给与响应


LVS-tun特性: 

    通过转发方式,不修改请求报文的ip首部,源ip为cip,目标ip为VIP,而是在源ip基础之上再封装一个ip首部,源ip为DIP,目标ip为调度器挑选的RS的VIP。

    ①RIP,DIP,VIP全为公网

    ②RS的网关不能指向DIP 

    ③请求报文经由director转发,但响应报文直接发往CIP

    ④不支持端口映射

    ⑤RS必须支持隧道功能   


LVS常用的调度算法:

静态的调度算法: 

    RR:Round Robin  #轮询,轮转

    WRR:Weighted Round Robin #加权轮询,根据后端每台real server的能承担的负载进行分配不同的请求个数

    SH:Source Hashing #源地址哈希,将来自于同一台IP地址的请求发往同一台后端的real server服务器

    DH:Destination Hashing #目标地址哈希,将发往同一个目标地址的请求始终发往前端调度器挑选出来的real server   

动态的调度算法:根据算法及其RS当前负载情况进行调度

    LC:least connections,最少连接 

    WLC:weight least connections,加权最少连接 

    SED:shortest expections delay   

    NQ:never queue  

    LBLC:基于本地的最少连接

    LBLCR:带复制功能的基于本地的最少连接


ipvs命令: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ipvsadm -A|E -t|u|f service-address [-s scheduler]
               [-p [timeout]] [-M netmask] [-b sched-flags]
       ipvsadm -D -t|u|f service-address
       ipvsadm -C
       ipvsadm -R
       ipvsadm -S [-n]
       ipvsadm -a|e -t|u|f service-address -r server-address
               [-g|i|m] [-w weight] [-x upper] [-y lower]
       ipvsadm -d -t|u|f service-address -r server-address
       ipvsadm -L|l [options]
       ipvsadm -Z [-t|u|f service-address]
       ipvsadm --set tcp tcpfin udp
       ipvsadm --start-daemon state [--mcast-interface interface]
               [--syncid syncid]
       ipvsadm --stop-daemon state
       ipvsadm -h

管理集群服务:增、删、改、查  

ipvsadm -A |E -t |u |f service-address [-s scheduler]

    -A:增加

    -E:修改

    -D:删除

    -L:查看

    -t:tcp,protocol type

    -u:udp,protocol type 

    -f:firewall mark

server-address:

    -t,tcp,vip:port

    -u,udp,vip:port 

    -f firewall mark  

    -s:指定调度算法类型,默认为WLC 

ipvsadm -C    #清除所有ipvs 

ipvsadm -Z [-t|u|f service-address]

-Z:清空计数器  


管理集群上的RS:

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]

    -a:增加

    -e:修改

    -r:real server_ip 

    -g,gateway,dr:直连路由

    -m,masquerde,nat,目标地址转换

    -i,ipip,tun,隧道 

    -w,权重

ipvsadm查看的其他子命令:

ipvsadm -L|l [options]

    -L:查看

    -n:数字格式显示

    --stats:统计数据

    --rate:速率统计

    -c,connetions:显示连接数

    -exact:精确显示 


保存

ipvsadm -S >/path/to/some_rule_file 

ipvsadm-save >/path/to/soem_rule_file 

恢复:

ipvsadm -R </path/to/some_rule_file 

ipvsadm-restore </path/to/soem_rule_file 


实验拓扑图:

LVS集群详解  

配置命令:

Real server1:

    route add default gw 192.168.184.128 

Real server2:

    route add default gw 192.168.184.128 

Virutal server:

    ipvsadm -A -t 10.1.10.3:80 -s rr 

    ipvsadm -a -t 10.1.10.3:80 -r 192.168.184.129 -m -w 1 

    ipvsadm -a -t 10.1.10.3:80 -r 192.168.184.130 -m -w 2 

    echo 1>/proc/sys/net/ipv4/ip_forward #开启ip_forward转发功能        


测试结果实验图:

LVS集群详解


LVS-DR实验拓扑图:

LVS集群详解


配置命令:

RS1: 

1
2
3
4
5
6
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
ifconfig lo:0 10.1.10.6 netmask 255.255.255.255 broadcast 10.1.10.6 
route add -host 10.1.10.6 dev lo:0

RS2: 

1
2
3
4
5
6
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
ifconfig lo:0 10.1.10.6 netmask 255.255.255.255 broadcast 10.1.10.6 
route add -host 10.1.10.6 dev lo:0

Scheduler Server:

1
2
3
4
ifconfig eno1677736:0 10.1.10.6 netmask 255.255.255.255 broadcast 10.1.10.6 
ipvsadm -A -t 10.1.10.6:80 -s wrr 
ipvsadm -a -t 10.1.10.6:80 -r 10.1.10.4 -g -w 1 
ipvsadm -a -t 10.1.10.6:80 -r 10.1.10.5 -g -w 2


实验结果图:

LVS集群详解


    

如上述图所示,lvs-dr配置成功,前端调度器根据wrr算法调度后端服务器实现负载均衡调度,lvs配置很简单,但原理非常重要,只有懂了原理,才能真正的掌握好lvs.       

    

本文转自chengong1013 51CTO博客,原文链接:http://blog.51cto.com/purify/1866256,如需转载请自行联系原作者