设为首页 收藏本站
查看: 975|回复: 0

[经验分享] 负载均衡LVS概述以及DR模式简易部署

[复制链接]

尚未签到

发表于 2019-1-5 10:35:55 | 显示全部楼层 |阅读模式
前言:
   在做这个实验之前,总觉得高可用负载均衡很高大上,很难理解。随性我自己也去试试,后来发现真的是这样!或许因为我是新手,所以实验多以失败告终。加上自己的虚拟机环境很恶心,经常故障,不过最后还是简单地搭建了一个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.运维网.com/9215128/1852537
http://ixdba.blog.运维网.com/2895551/552947
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-659579-1-1.html 上篇帖子: 构建高可用的LVS负载均衡集群 入门篇 下篇帖子: Linux下群集基础与LVS
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表