负载均衡LVS概述以及DR模式简易部署
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了负载均衡LVS概述以及DR模式简易部署相关的知识,希望对你有一定的参考价值。
前言:
在做这个实验之前,总觉得高可用负载均衡很高大上,很难理解。随性我自己也去试试,后来发现真的是这样!或许因为我是新手,所以实验多以失败告终。加上自己的虚拟机环境很恶心,经常故障,不过最后还是简单地搭建了一个LVS。以下内容是我总结了大多个博文而来,文后注有博文来源。
LVS是Linux 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实现负载均衡机制有三种,分别是NAT、TUN和DR,详述如下:
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/NAT和VS/TUN中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求DirectorServer与Real Server都有一块网卡连在同一物理网段上。
配置实例:LVS DR模型详解
DR模型的特点:
1.director必须与realserver位于同一个网络。
2.realserver可以使用公网ip地址,便于远程管理与配置。
3.director只负责处理入站请求。而响应报文则由realserver直接返回给client端。大大节省director的资源
4.不能做端口映射
整个工作原理如下:
客户端通过路由器将请求交给director的VIP。director接收请求,将通过相应的算法将请求转发给相应的realserver。在转发的过程中,会修改请求包的目的mac地址,目的ip地址不变。realserver接收请求,并直接响应客户端。这时,便出现一个问题:director此时与 realserver位于同一个网络中,当director直接将请求转发给realserver时,realserver检测到该请求包的目的ip是 vip而并非自己,便会丢弃,而不会响应。。为了解决这个问题,我们需要在所有realserver上都配上VIP。这时会出现第二个问题:director与realserver位于同一个网络中,当出现多个vip时,通过arp广播,整个网络必然混乱,我们无法保证客户端的请求一定会发往director。为保证当客户端请求抵达网络时,只有director来响应请求。我们需要realserver忽略对vip的arp请求,并且在 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 启动同步守护进程。他后面可以是master或backup,用来说明LVS Router是master或是backup。在这个功能上也可以采用keepalived的VRRP功能。
--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负载调度器:eth0:172.16.16.173/24,VIP eth0:0172.16.16.172
web服务器池:节点1-节点2:172.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 #特殊路由,当客户端请求的ip为vip时,则由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_redirects:icmp发送重定向。经查阅相关资料,开启此选项有一定的危险性,容易被人伪造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,进行测试。
用客户端访问VIP:172.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模式简易部署的主要内容,如果未能解决你的问题,请参考以下文章