负载均衡LVS概述以及DR模式简易部署

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了负载均衡LVS概述以及DR模式简易部署相关的知识,希望对你有一定的参考价值。

前言:

   在做这个实验之前,总觉得高可用负载均衡很高大上,很难理解。随性我自己也去试试,后来发现真的是这样!或许因为我是新手,所以实验多以失败告终。加上自己的虚拟机环境很恶心,经常故障,不过最后还是简单地搭建了一个LVS。以下内容是我总结了大多个博文而来,文后注有博文来源。


  LVSLinux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

 LVS的作用

LVS主要用于服务器集群的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。

LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用LVS技术实现高可伸缩的、高可用的网络服务,例如WWW服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等等,有许多比较著名网站和组织都在使用LVS架设的集群系统,例如:Linux的门户网站(www.linux.com)、向RealPlayer提供音频视频服务而闻名的Real公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。 

2.3LVS的体系结构

  使用LVS架设的服务器集群系统有三个部分组成:

  (1)最前端的负载均衡层,用Load Balancer表示;

  (2)中间的服务器集群层,用Server Array表示;

  (3)最底端的数据共享存储层,用Shared Storage表示;

  在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

技术分享

 

IPVS实现负载均衡机制有三种,分别是NATTUNDR,详述如下: 
 VS/NAT即(Virtual Server viaNetwork Address Translation
也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的Real Server地址,同时报文的目标端口也改成选定的Real Server的相应端口,最后将报文请求发送到选定的Real Server。在服务器端得到数据后,Real Server返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。
可以看出,在NAT方式下,用户请求和响应报文都必须经过DirectorServer地址重写,当用户请求越来越多时,调度器的处理能力将称为瓶颈。
 VS/TUN :即(Virtual Server via IP Tunneling 
也就是IP隧道技术实现虚拟服务器。它的连接调度和管理与VS/NAT方式一样,只是它的报文转发方法不同,VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器,此外,对Real Server的地域位置没有要求,可以和DirectorServer位于同一个网段,也可以是独立的一个网络。因此,在TUN方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。
 VS/DR即(Virtual Server viaDirect Routing 
也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NATVS/TUN中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求DirectorServerReal Server都有一块网卡连在同一物理网段上。

配置实例:LVS DR模型详解

技术分享

DR模型的特点:

1.director必须与realserver位于同一个网络。

2.realserver可以使用公网ip地址,便于远程管理与配置。

3.director只负责处理入站请求。而响应报文则由realserver直接返回给client端。大大节省director的资源

4.不能做端口映射

整个工作原理如下:

户端通过路由器将请求交给directorVIPdirector接收请求,将通过相应的算法将请求转发给相应的realserver。在转发的过程中,会修改请求包的目的mac地址,目的ip地址不变。realserver接收请求,并直接响应客户端。这时,便出现一个问题:director此时与 realserver位于同一个网络中,当director直接将请求转发给realserver时,realserver检测到该请求包的目的ip vip而并非自己,便会丢弃,而不会响应。。为了解决这个问题,我们需要在所有realserver上都配上VIP。这时会出现第二个问题:directorrealserver位于同一个网络中,当出现多个vip时,通过arp广播,整个网络必然混乱,我们无法保证客户端的请求一定会发往director。为保证当客户端请求抵达网络时,只有director来响应请求。我们需要realserver忽略对viparp请求,并且在 arp通告时,不通告vip地址。我们需要配置如下两个内核参数:

arp_ignore 

当一台主机某个接口接收到arp请求时,这台机上的ip地址是否通过该接口响应给对应请求的限制级别。简单来说,当这台主机有多块网卡,或者有多个ip地址时,是否通过该接口将所有ip地址响应给对应的请求。

0:不作任何限制。将所有本机的ip地址都响应给对应请求。

1:当请求的ip就配置在本接口上时,才予以响应。换句话说,就是只响应当前接口的ip地址。

arp_announce

当一台主机加入到一个新的网络。会发出ARP通告,向网络中其他主机通告自己的ip地址及mac等信息。arp_anounce就用来限制通告的级别。当这台主机有多块网卡或者多个ip地址时,是否通过某一个接口将所有ip地址通告给该网络中的主机。

0:不作任何限制。从任意接口通告所有ip地址。

1:尽可能避免通告非本接口上的ip

2:只通知本接口的ip。非本接口的ip不予通告。

由此我们亦可知,在realserver上配置vip时显然也不能配置的物理接口的虚接口上,而应该配置在loopback上。

 

在做实验之前先连接ipvsadm的用法

ipvsadm的用法和格式如下:
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]][-M netmask]
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m][-w weight]
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]
ipvsadm --stop-daemon
ipvsadm -h

命令选项解释:
有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可以。

-A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。

-E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。

-D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。

-C --clear 清除内核虚拟服务器表中的所有记录。

-R --restore 恢复虚拟服务器规则

-S --save 保存虚拟服务器规则,输出为-R选项可读的格式

-a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器

-e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录

-d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录

-L|-l --list 显示内核虚拟服务器表

-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)

--set tcp tcpfin udp 设置连接超时值

--start-daemon 启动同步守护进程。他后面可以是masterbackup,用来说明LVS Routermaster或是backup。在这个功能上也可以采用keepalivedVRRP功能。

--stop-daemon 停止同步守护进程

-h --help 显示帮助信息

其他的选项:
-t --tcp-service service-address
说明虚拟服务器提供的是tcp的服务[vip:port] or [real-server-ip:port]

-u --udp-service service-address 说明虚拟服务器提供的是udp的服务[vip:port] or [real-server-ip:port]

-f --fwmark-service fwmark 说明是经过iptables标记过的服务类型。

-s --scheduler scheduler 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
默认的调度算法是: wlc.

-p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout的默认值为300秒。

-M --netmask netmask persistentgranularity mask

-r --real-server server-address 真实的服务器[Real-Server:port]

-g --gatewaying 指定LVS的工作模式为直接路由模式(也是LVS默认的模式)

-i --ipip 指定LVS的工作模式为隧道模式

-m --masquerading 指定LVS的工作模式为NAT模式

-w --weight weight 真实服务器的权值

--mcast-interface interface 指定组%B

 

配置示例:
1
)实验环境
lvs
负载调度器:eth0172.16.16.173/24VIP eth0:0172.16.16.172
web
服务器池:节点1-节点2172.16.16.177-178/24

2)配置负载调度器
a.
配置虚拟IP地址(VIP
ifconfig eth0:0 172.16.16.172 broadcast 172.16.16.172 netmask 255.255.255.0 up  #
eth0上配置并启动VIP
route add -host 172.16.16.172 dev eth0:0   #
特殊路由,当客户端请求的ipvip时,则由eth0:0响应。


b.
调整/proc响应参数
echo 1 > /proc/sys/net/ipv4/ip_forward    #
开启路由转发

echo 0 >/proc/sys/net/ipv4/conf/all/send_redirects

echo 0 >/proc/sys/net/ipv4/conf/default/send_redirects

echo 0 >/proc/sys/net/ipv4/conf/eth0/send_redirects

send_redirectsicmp发送重定向。经查阅相关资料,开启此选项有一定的危险性,容易被人伪造icmp重定向包发起攻击。若当前director并非充当路由或网关,建议关闭。默认为开启,0为关闭。

 

c.配置负载分配策略
service ipvsadm stop
ipvsadm -A -t 172.16.16.172:80 -s wlc
ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.177 -g -w 1
ipvsadm -a -t 172.16.16.172:80 -r 172.16.16.178 -g -w 1

# -g DR模式  -m NAT模式 -i IPtun模式
service ipvsadm save
chkconfig ipvsadm on

 

3)配置节点服务器
a.
配置虚拟IP地址
ifconfig lo:0 172.16.16.172 broadcast 172.16.16.172 netmask 255.255.255.255 up
/sbin/route add -host 172.16.16.172 dev lo:0

b.调整/proc响应参数

echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

echo 1 >/proc/sys/net/ipv4/conf/default/arp_ignore

echo 2 >/proc/sys/net/ipv4/conf/default/arp_announce

echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce

此几项配置即是用于限制arp请求及arp通告


c.
安装httpd,进行测试。

技术分享

用客户端访问VIP172.16.16.172,就会看到真实服务器172.16.16.178提供的web服务,刷新以下就看到另一个服务器的web服务了,调度算法默认是轮循。

 

参考博文:

王晨纯,《Web基础架构:负载均衡和LVS》:http://www.importnew.com/11229.html

http://dengaosky.blog.51cto.com/9215128/1852537

http://ixdba.blog.51cto.com/2895551/552947


本文出自 “linux小男孩” 博客,请务必保留此出处http://zjwliunx.blog.51cto.com/11010135/1858277

以上是关于负载均衡LVS概述以及DR模式简易部署的主要内容,如果未能解决你的问题,请参考以下文章

LVS负载均衡群集DR模式+Keepalived部署!

LVS负载均衡群集DR模式+Keepalived部署!

群集 之 LVS负载均衡(DR模式)

LVS负载均衡 DR模式简介与实战部署

LVS负载均衡 DR模式简介与实战部署

LVS负载均衡 DR模式简介与实战部署