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

[经验分享] heartbeat+lvs搭建负载均衡高可用集群

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2019-1-6 09:16:59 | 显示全部楼层 |阅读模式
  LVS负载均衡原理和算法详解
     Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲,CPUI/O处理能力很快会成为瓶颈。由于单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能满足大量并发访问的需要。Linux 虚拟服务器(Linux Virtual Servers,LVS) 使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易于扩展,而价格低廉的解决方案。 LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡。LVSLinux Virtual Server的缩写,意思是Linux虚拟服务器。
  
     在调度器的实现技术中,IP负载均衡技术是效率最高的。在已有的IP负载均衡技术中有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation),大多数商品化的IP负载均衡调度器产品都是使用此方法,如CiscoLocalDirectorF5Big/IPAlteonACEDirector。在分析VS/NAT的缺点和网络服务的非对称性的基础上,通过IP隧道实现虚拟服务器的方法VS/TUN Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DRVirtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。所以,IPVS软件实现了这三种IP负载均衡技术,它们的大致原理如下。
  
  1,Virtual Server via Network Address Translation(VS/NAT
    通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程
  
  
  
  2,Virtual Server via Direct Routing(VS/DR
    VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销, 对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。
  
  
  
  
  3,Virtual Server via IP Tunneling(VS/TUN
    采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
  
    
  
    LVS系统结构与特点:
     使用LVS架设的服务器集群系统从体系结构上看是透明的,最终用户只感觉到一个虚拟服务器.物理服务器之间可以通过高速的LAN或分布在各地的WAN相连。最前端是负载均衡器,它负责将各种服务请求分发给后面的物理服务器,让整个集群表现得象一个服务于同一IP地址的虚拟服务器
  
     LVS集群系统具有良好的可扩展性和高可用性。 可扩展性是指,LVS集群建立后,可以很容易地根据实际的需要增加或减少物理服务器。而高可用性是指当检测到服务器节点或服务进程出错、失效时,集群系统能够自动进行适当的重新调整系统。
  
     LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。  
  为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
  
   LVS集群采用三层结构,其主要组成部分为:
     A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
     B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEBMAILFTPDNS等。
     C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
  
  
  
  针对不同的网络服务需求和服务器配置,IPVS调度器实现了如下十种负载调度算法:
  
  1,轮叫(Round Robin)简称RR
     调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
  
  2,加权轮叫(Weighted Round Robin) 简称WRR
     调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。 这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
  
  3,最少链接(Least Connections)简称LC
    调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。 如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
  
  4,加权最少链接(Weighted Least Connections)简称WLC
    在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
  
  5,基于局部性的最少链接(Locality-Based Least Connections)简称LBLC
    "基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。
  
  6,带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)简称LBLCR
    "带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改, 将最忙的服务器从服务器组中删除,以降低复制的 程度。
  
  7,目标地址散列调度(Destination Hashing)简称DH
     算法也是针对目标IP地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
  
  8,源地址散列调度(Source Hashing)简称SH
   算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。除了将请求的目标IP地址换成请求的源IP地址外,它的算法流程与目标地址散列调度算法的基本相似。在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。
  
  9,最短的期望的延迟(shortest expected delay scheduling)简称sed
     基于wlc算法,举例说明
    ABC三台机器分别权重123,连接数也分别是123name如果使用WLC算法的话一个新请求 进入时他可能会分给ABC中任意一个,使用SED算法后会进行这样一个运算.
     A:(1+1)/2
     B:(1+2)/2
     C:(1+3)/3
     根据运算结果,把连接交给C
  
  10,最少队列调度(never queue scheduling)简称nq
   无需列队,如果有台realserver的连接数=0 就直接分配过去,不需要进行sed运算 .
  
  实验环境:四台虚拟机
  server1:172.25.50.100 #heartbeat主机slave
  server2:172.25.50.101 #lvs主机
  server3:172.25.50.102 #lvs主机
  server4:172.25.50.103 #heartbeat主机 master
  yum源的配置:三台虚拟机配置一样
  例
  [server]
  name=localserver
  baseurl=http://172.25.50.1/rhel6.5
  gpgcheck=0
  
  
  [HighAvailability]
  name=localserver
  baseurl=http://172.25.50.1/rhel6.5/HighAvailability
  gpgcheck=0
  
  
  [LoadBalancer]
  name=localserver
  baseurl=http://172.25.50.1/rhel6.5/LoadBalancer
  gpgcheck=0
  
  
  [ResilientStorage]
  name=localserver
  baseurl=http://172.25.50.1/rhel6.5/ResilientStorage
  gpgcheck=0
  
  
  [ScalableFileSystem]
  name=localserver
  baseurl=http://172.25.50.1/rhel6.5/ScalableFileSystem
  gpgcheck=0
  在server1主机上:yum install rpm-build -y
  添加virtual ip:ip addr add 172.25.50.100 dev eth0
  ipvsadm -A -t 172.25.50.100:80 -s rr
  ipvsadm -a -t 172.25.50.100:80 -r 172.25.50.101:80 -g
  ipvsadm -a -t 172.25.50.100:80 -r 172.25.50.101:80 -g
  /etc/init.d/ipvsadm save #保存添加的测略
  在server2 LVS主机上:ip addr add 172.25.50.100 dev eth0
  在server3 LVS主机上:ip addr add 172.25.50.100 dev eth0
  ip addr show #查看添加的virtual ip
  在server2 LVS主机上:yum install arptables_jf
                       arptables -A IN -d 172.25.50.100 -j DROP
                       arptables -A OUT -s 172.25.50.100 -j mangle --mangle-ip-s 172.25.50.101
                       /etc/init.d/arptables save #保存添加的策略 使策略生效
                       arptables -nL #查看添加的策略
  在server3 LVS主机上:yum install arptables_jf -y
                       arptables -A IN -d 172.25.50.100 -j DROP
                       arptables -A OUT -s 172.25.50.100 -j mangle --mangle-ip-s 172.25.50.102
                     /etc/init.d/arptables save
  测试页面:echo server2 > /var/www/html/index.html
           echo server3 > /var/www/html/index.html
  访问virtual ip 172.25.50.100 F5刷新 会不断的显示server2server3 关闭服务只显示一方 如果server2的服务都挂了 会显示server1的信息 一般server1的主机信息只用于提醒用户 当前服务不可以用的通知
  
  
  在server1主机上:cd /usr/share/doc/ldirectord-3..9.5/
  cp ldirectord.cf /etc/ha.d/
  vim /etc/ha.d/ldirectord.cf
  virtual=172.25.50.100:80
         real=172.25.50.101:80 gate
         real=172.25.50.102:80 gate
  保存退出
  /etc/init.d/ldirectord start
  ipvsadm -l #查看策略
  scp /etc/ha.d/ldirectord.cf root@172.25.50.103:/etc/ha.d/
  在server4上:vim /etc/ha.d/haresources
  添加:server4.example.com IPaddr::172.25.50.100/24/eth0 ldirectord
  scp /etc/ha.d/haresources root@172.25.50.100:/etc/ha.d/
  /etc/init.d/ldirectord start
  /etc/init.d/heartbeat restart
  server4主机:/etc/init.d/heartbeat restart
  测试:访问 172.25.50.100
  
  
  
  





运维网声明 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-659859-1-1.html 上篇帖子: Heartbeat v2+heartbeat 下篇帖子: 基于heartbeat v2与heartbeat
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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