LVS集群详解

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

一、什么是集群

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 


实验拓扑图:

wKiom1gRaHfh4fJGAACFOqwaEM8067.png  

配置命令:

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转发功能        


测试结果实验图:

wKiom1gRarPgjVHFAABetmhLczI871.png


LVS-DR实验拓扑图:

wKiom1gReCaSgxBmAACrj3225v4811.png


配置命令:

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


实验结果图:

wKiom1gRgOrCg8Y7AABa9h6q10M638.png


    

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

    

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

 

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
基于阿里云,构建一个企业web应用上云经典架构,让IT从业者体验企业级架构的实战训练。
相关文章
|
6月前
|
负载均衡 应用服务中间件 Linux
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
Nginx系列教程(14) - LVS+KeepAlived+Nginx实现高性能负载均衡集群
218 0
|
14天前
|
运维 负载均衡 监控
keepalived+LVS实现高可用性集群
通过结合keepalived和LVS,你可以创建一个高可用性的负载均衡集群,确保服务器的稳定性和性能。这对于托管Web服务、应用服务器等关键服务的服务器集群非常有用。
26 1
|
19天前
|
负载均衡 监控 Linux
CentOS6.5高可用集群LVS+Keepalived(DR模式)
CentOS6.5高可用集群LVS+Keepalived(DR模式)
|
4月前
|
负载均衡 算法 Linux
LVS集群
LVS(Linux Virtual Server)集群是一种基于Linux操作系统的高可用性和负载均衡解决方案。它通过将网络流量分发到多个后端服务器上,实现了对网络服务的负载均衡,并提高了系统的可用性和性能。
69 1
|
5月前
|
负载均衡 算法 网络协议
小白带你学习linux的LVS集群(三十六)
小白带你学习linux的LVS集群(三十六)
80 0
|
8月前
|
负载均衡 测试技术
LVS+KeepAlived构建高可用集群
LVS+KeepAlived构建高可用集群
55 0
|
9月前
|
缓存 负载均衡 网络协议
|
缓存 运维 负载均衡
Keepalived+LVS+nginx搭建nginx高可用集群
  nginx是一款非常优秀的反向代理工具,支持请求分发,负载均衡,以及缓存等等非常实用的功能。在请求处理上,nginx采用的是epoll模型,这是一种基于事件监听的模型,因而其具备非常高效的请求处理效率,单机并发能力能够达到上百万。nginx接收到的请求可以通过负载均衡策略分发到其下一级的应用服务器,这些服务器一般是以集群方式部署的,因而在性能不足的情况下,应用服务器可以通过加机器的方式扩展流量。此时,对于一些特大型的网站,性能的瓶颈就来自于nginx了,因为单机的nginx的并发能力是有上限的,而nginx本身是不支持集群模式的,因而此时对nginx的横向扩展就显得尤为重要。
681 1
|
缓存 负载均衡 网络协议
构建LVS负载均衡集群
LVS即Linux虚拟服务器,目前 LVS 已经被集成到 Linux 内核模块中,该项目在 Linux 内核实现了基于 IP 的数据请求负载均衡调度方案,LVS集群采用IP负载均衡技术和基于内容请求分发技术.调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器.整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序.为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性.
862 0
构建LVS负载均衡集群
|
负载均衡 监控 算法
企业集群平台架构设计与实现lvs篇4(二)|学习笔记
快速学习企业集群平台架构设计与实现lvs篇4(二)
85 0