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

[经验分享] LVS简介及实战

[复制链接]

尚未签到

发表于 2019-1-4 08:35:06 | 显示全部楼层 |阅读模式
  以前做过一些负载均衡高可用的实验,由于在工作环境一直都没有用到这些技术,现在几乎都忘光了,记录在evernote里的实验笔记也不完整。趁着最近事情较少,重新找了些资料,把一些相关的实验再做一遍,并记录完整,以备不时之需。
  一、 LVS简介
  LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
  使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
  LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用LVS技术实现高可伸缩的、高可用的网络服务,例如WWW服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等等,有许多比较著名网站和组织都在使用LVS架设的集群系统,例如:Linux的门户网站(www.linux.com)、向RealPlayer提供音频视频服务而闻名的Real公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。
  二、 LVS体系结构
  使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层,用Load Balancer表示,中间的服务器群组层,用Server Array表示,最底端的数据共享存储层,用Shared Storage表示,在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。
  LVS体系结构下图所示:
DSC0000.png

  下面对LVS的各个组成部分进行详细介绍:

  •   Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。
  •   Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。
  •   Shared Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统,oracle提供的OCFS2文件系统等。
  从整个LVS结构可以看出,Director Server是整个LVS的核心,目前,用于Director Server的操作系统只能是Linux和FreeBSD,linux2.6内核不用任何设置就可以支持LVS功能,而FreeBSD作为Director Server的应用还不是很多,性能也不是很好。
  对于Real Server,几乎可以是所有的系统平台,Linux、windows、Solaris、AIX、BSD系列都能很好的支持
  三、lvs实例
  (一)、NAT模式:
  NAT模型:地址转换类型,主要是做地址转换,类似于iptables的DNAT类型,它通过多目标地址转换,来实现负载均衡;
  特点和要求:

  •   1、LVS(Director)上面需要双网卡:DIP(内网)和VIP(外网)
  •   2、内网的Real Server主机的IP必须和DIP在同一个网络中,并且要求其网关都需要指向DIP的地址
  •   3、RIP都是私有IP地址,仅用于各个节点之间的通信
  •   4、Director位于client和Real Server之间,负载处理所有的进站、出站的通信
  •   5、支持端口映射
  •   6、通常应用在较大规模的应用场景中,但Director易成为整个架构的瓶颈!
DSC0001.png

  环境:virtualbox虚拟3台centos6.3虚拟机,拓扑如上
  Directior:对外 192.168.1.103 ,对内 192.168.0.1
  server1:192.168.0.2
  server2:192.168.0.3
  1、Director上安装ipvsadm:
yum install ipvsadm  2、开启路由转发:
echo 1 > /proc/sys/net/ipv4/ip_forward  3、server1上建一个简单的网页文件
echo "I'm Server1" >index.html  server2创建一个简单的网页文件
echo "I'm Server2" >index.html  4、使用pyhon的SimpleHTTPServer 模块启动一个简单的http服务器:
python -m SimpleHTTPServer 80  5、在Director上配置ipvs的定义:使用模式以及算法
ipvsadm -A -t 192.168.1.103:80 -s rr  
ipvsadm -a -t 192.168.1.103:80 -r 192.168.137.20 -m
  
ipvsadm -a -t 192.168.1.103:80 -r 192.168.137.30 -m
  
ipvsadm -L -n
  打开浏览器测试访问:
DSC0002.png

DSC0003.png

  页面轮流交替出现,确实按照RR算法进行调度。
  6、改成WLC算法,权重定义为3比1
ipvsadm -A -t 192.168.1.103:80 -s wlc  
ipvsadm -a -t 192.168.1.103:80 -r 192.168.0.2 -m  -w 3
  
ipvsadm -a -t 192.168.1.103:80 -r 192.168.0.3 -m  -w 1
  
ipvsadm -L -n
  7、另一台机子上使用ab测试:
ab -c 10 -n 10000 http://192.168.1.103/index.html  8、查看结果:
[root@localhost ~]# ipvsadm -L -n  
IP Virtual Server version 1.2.1 (size=4096)
  
Prot LocalAddress:Port Scheduler Flags
  
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  
TCP  192.168.1.103:80 wlc
  
  -> 192.168.0.2:80               Masq    3      0          7306
  
  -> 192.168.0.3:80               Masq    1      0          2696
  ps:其它算法可自行测试
  (二)DR模式:
  特点和要求

  •   1、各个集群节点必须和Director在同一个物理网络中
  •   2、RIP地址不能为私有地址,可以实现便捷的远程管理和监控
  •   3、Director仅仅负责处理入站请求,响应报文则由Real Server直接发往客户端
  •   4、集群节点Real Server 的网关一定不能指向DIP,而是指向外部路由
  •   5、Director不支持端口映射
  •   6、Director能够支持比NAT多很多的Real Server
  原理:
  DR模型:直接路由模型,每个Real Server上都有两个IP:VIP和RIP,但是VIP是隐藏的,就是不能提高解析等功能,只是用来做请求回复的源IP的,Director上只需要一个网卡,然后利用别名来配置两个IP:VIP和DIP
  Director在接受到外部主机的请求的时候转发给Real Server的时候并不更改目标地址,只是通过arp解析的MAC地址进行封装然后转给Real Server,Real Server在接受到信息以后拆除MAC帧封装,然后直接回复给CIP
DSC0004.png

  环境:virtualbox虚拟3台centos6.3虚拟机,拓扑如上
  Directior:eth0:192.168.1.103 eh0:0(vip):192.168.0.101
  server1: eth0:192.168.1.104 lo:0(vip):192.168.1.101
  server2: eth0:192.168.1.105 lo:0(vip):192.168.1.101
  通信原理:
  每个Real Server上都有两个IP:VIP和RIP,但是VIP是隐藏的,就是不能提高解析等功能,只是用来做请求回复的源IP的,Director上只需要一个网卡,然后利用别名来配置两个IP:VIP和DIP
  Director在接受到外部主机的请求的时候转发给Real Server的时候并不更改目标地址,只是通过arp解析的MAC地址进行封装然后转给Real Server,Real Server在接受到信息以后拆除MAC帧封装,然后直接回复给CIP。
  而此时需要关闭RS上的基于VIP的arp解析,在linux内核2.4以后,内核中都内置了这种功能,通过一些设置可以关闭其arp的功能:
  arp_ignore:定义接收到ARP请求时的响应级别
  0:默认,只用本地配置的有响应地址都给予响应
  1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应(仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)
  arp_announce:定义将自己的地址向外通告时的级别
  0:默认,表示使用配置在任何接口的任何地址向外通告
  1:试图仅向目标网络通告与其网络匹配的地址
  2:仅向与本地接口上地址匹配的网络进行通告
  PS:要想让其功能生效,必须先设置相关设置,然后在配置IP地址等信息
  1、在server1和server2上执行如下操作
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
  
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
  
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
  
service network restart
  
ifconfig lo:0 192.168.1.101 netmask 255.255.255.255 broadcast 192.168.1.101
  
route add -host 192.168.1.101 dev lo:0
  2、测试server1和server2的web服务
[root@localhost ~]# curl 192.168.1.104  
I'm Server1
  
[root@localhost ~]# curl 192.168.1.105
  
I'm Server2
  3、Director上配置eth0:0网卡
ifconfig eth0:0 192.168.1.101/24  4、配置ipvs
ipvsadm -A -t 192.168.1.101:80 -s rr  
ipvsadm -a -t 192.168.1.101:80 -r 192.168.1.104 -g
  
ipvsadm -a -t 192.168.1.101:80 -r 192.168.1.105 -g
  5、查看配置
[root@localhost ~]# ipvsadm -L -n  
IP Virtual Server version 1.2.1 (size=4096)
  
Prot LocalAddress:Port Scheduler Flags
  
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  
TCP  192.168.1.101:80 rr
  
  -> 192.168.1.104:80             Route   1      0          0
  
  -> 192.168.1.105:80             Route   1      0          0
  6、访问测试
DSC0005.png

DSC0006.png

  (三)、TUN模式
  其实数据转发原理和上面的dr模式是一样的,不过这个我个人认为主要是位于不同位置(不同机房);LB是通过隧道进行了信息传输,虽然增加了负载,可是因为地理位置不同的优势,还是可以参考的一种方案;
  优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
  不足:这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议;



运维网声明 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-659146-1-1.html 上篇帖子: 集群之LVS-11068542 下篇帖子: LVS+keepliaved-7984704
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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