LVS负载均衡器从入门到精通
LVS(LinuxVirtualServer简写)介绍
Linux虚拟服务器是一个虚拟的服务器集群系统可以在UnixLinux平台实现负载均衡集群功能。该项目在1998年
由章文嵩博士组织成立的是中国国内最早出现的自由软件项目之一。
LVS项目介绍http:www。linuxvirtualserver。orgzhlvs1。html
LVS集群的体系结构http:www。linuxvirtualserver。orgzhlvs2。html
LVS集群中的IP负载均衡技术http:www。linuxvirtualserver。orgzhlvs3。html
LVS集群的负载调度http:www。linuxvirtualserver。orgzhlvs4。html
调度器是服务器集群系统的唯一入口点(SingleEntryPoint),它可以采用IP负载均衡技术、基于内容请求分发技术或者两者相结合。
在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求到达时,调度器只根据服务器负载情况和设定的调度算法从服务器池中选出一个服务器,
将该请求转发到选出的服务器,并记录这个调度;当这个请求的其他报文到达,也会被转发到前面选出的服务器。在基于内容请求分发技术中,服务器可以提供不同的服务,
当客户请求到达时,调度器可根据请求的内容选择服务器执行请求。因为所有的操作都是在Linux操作系统核心空间中将完成的,它的调度开销很小,所以它具有很高的吞吐率。
服务器池的结点数目是可变的。当整个系统收到的负载超过目前所有结点的处理能力时,可以在服务器池中增加服务器来满足不断增长的请求负载。
对大多数网络服务来说,请求间不存在很强的相关性,请求可以在不同的结点上并行执行,所以整个系统的性能基本上可以随着服务器池的结点数目增加而线性增长。
共享存储通常是数据库、网络文件系统或者分布式文件系统。服务器结点需要动态更新的数据一般存储在数据库系统中,同时数据库会保证并发访问时数据的一致性。
静态的数据可以存储在网络文件系统(如NFSCIFS)中,但网络文件系统的伸缩能力有限,一般来说,NFSCIFS服务器只能支持36个繁忙的服务器结点。
对于规模较大的集群系统,可以考虑用分布式文件系统,如AFS〔1〕、GFS〔2。3〕、Coda〔4〕和Intermezzo〔5〕等。分布式文件系统可为各服务器提供共享的存储区,
它们访问分布式文件系统就像访问本地文件系统一样,同时分布式文件系统可提供良好的伸缩性和可用性。此外,当不同服务器上的应用程序同时读写访问分布式文件系统上同一资源时,
应用程序的访问冲突需要消解才能使得资源处于一致状态。这需要一个分布式锁管理器(DistributedLockManager),它可能是分布式文件系统内部提供的,也可能是外部的。
开发者在写应用程序时,可以使用分布式锁管理器来保证应用程序在不同结点上并发访问的一致性。
IPVS(LVS)发展史
早在2。2内核时IPVS就已经以内核补丁的形式出现
从2。4。23版本开始IPvs软件就是合并到Linux内核的常用版本的内核补丁的集合
从2。4。24以后IPvs已经成为Linux官方标准内核的一部分。
我们使用该软件配置LVS时候不能直接配置IPvs需要使用IPvs管理工具ipvsadm
LVS负载均衡调度技术是在Linux内核中实现的因此被称之为Linux虚拟服务器。我们使用该软件配置LVS时候
不能直接配置内核的IPvs而需要使用IPvs的管理工具IPvsadm进行管理当然也可以同keepalive软件管理LVS
LVS体系结构和工作原理
LVS集群负载均衡器接受服务的所有入站客户端计算机的请求,并根据调度算法决定哪个集群节点应该处理回复请求。负载均衡器(简称LB)有时
也被称为LVSDirector(简称Director)10种调度算法。
一组服务器通过高速的局域网或者地理分布的广域网相互连接在它们的前端有一个负载均衡器(LoadBalancer)。负载调度器能无缝地将网络
请求调度到真实服务器上,从而使得服务器集群的结构对客户端是透明的客户端访问集群系统提供的网络服务就像访问一台高性能高可用的服务器一样
客户端程序不受服务器集群的影响不需要做任何修改。系统的伸缩性通过在服务集群中透明地加入和删除一个节点来达到。通过检测节点或服务进程
故障和正确地重置系统达到高可用性由于我们的负载均衡调度技术是在Linux内核中实现的我们称之为Linux虚拟服务器
LVS术语:
虚拟IP地址(VirtualipAddress)VIPVIP为Director用于向客户端计算机提供服务的IP地址(即用户请求的IP)
如www。aa。com域名就要解析到VIP上提供服务(DNS上要做相应的解析)
真实IP地址(RealServerIpAddress)RIP在集群下面节点上使用的IP地址
Director的IP地址DIPDirector用于连接内外网络的IP地址,物理网卡上的IP地址(负载均衡器的IP地址);与RealServer相连的IP
客户端主机IP地址CIP客户端PC请求集群服务器的IP地址该地址用作发送给机器的请求的源IP地址
LVS集群内部的节点称为真实服务器(RealServer)也叫集群节点。请求集群服务的计算机称为客户端计算机
与计算机通常在网上交换数据包的方式相同,客户端计算机Director和真实服务器使用IP地址彼此进行通信。
LVS集群的3种工作模式和原理
IP虚拟服务器软件IPvs
在调度器的实现技术中IP负载均衡技术是效率最高的在已有的IP负载均衡技术中有通过网络地址转换,将一组服务器构成一个高性能
高可用的虚拟服务器,我们成为VSNAT技术(VirtualServerviaNetworkAddressTranslation),大多数商业化的IP负载均衡调度器产品都
是使用NAT的方法如Cisco的localdirectorF5的Bigip和Alteon的aceDirector。
在分析VSNAT的缺点和网络服务的非对称性的基础上,我们提出通过IP隧道实现虚拟服务器的方法VSTUN(VirtualServerviaIPTunneling)
和通过直接路由实现虚拟服务器的方法VSDR(VirtualServerviaDirectRouting),它们可以极大地提供系统的伸缩性。(还有淘宝的FULLNAT模式开源的)
所有IPvs软件实现了这三种IP负载均衡技术它们的大致原理如下:
NAT模式:
通过网络地址转换调度器LB重写请求报文的目的地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文处理后
返回时必须要通过调度器,经过调度器时报文的源地址被重写,再返回给客户端完成整个负载调度过程。
结论:
1NAT技术将请求的报文(DNAT)和响应的报文(SNAT)通过调度器地址重写然后在转发给内部的RS,报文返回时在改写成源地址。
2只需要在LB上配置WANIP即可,也要有LANIP和内部通信,内部RS只需配置LANIP。
3每台内部RS节点的网关要配置成LB的LAN内物理网卡地址这样才能确保数据返回任然经过LB。
4由于请求与回传数据都经过负载均衡器因此访问量大时LB有较大瓶颈
5支持对IP及端口进行转换即用户请求10。0。0。1:80,可以转换到RS的10。0。0。2:8080上
6所有NAT内部RS节点只需要配置私有LANIP即可。
7由于数据包来回都需要经过调度器因此要开启内核转发net。ipv4。ipforward1
过程如下:
客户端通过VirtualIPaddress访问网络服务时请求的报文到达调度器LB时,调度器根据连接调度算法从一组真实服务器中选出一台服务器,
将报文的目的地址VIP改写成选定的服务器的地址RIP1,请求报文的目标端口改写成选定服务器的相应端口(RS提供的服务端口),最后将修改后的报文
发送给选出的服务器RS1。同时,调度器LB在连接的HASH表中记录这个连接,当这个连接的下一个报文到达时,从连接的hash表中可以得到原选定服务器
的地址和端口,进行同样的改写操作,并将报文传给原选定的服务器RS1。当来自真实服务器RS1的响应报文返回调度器时,调度器将返回报文的源地址和
源端口改写成VIP和相应的端口,然后调度器再把报文发给请求的用户。
TUN隧道模式:
采用NAT技术时由于请求和响应的报文都必须经过调度器地址重写当客户端请求越来越多时调度器的处理能力将成为瓶颈为了解决这个问题
调度器把请求报文通过IP隧道(IPIPipsec)转发到真实服务器而真实服务器将响应直接返回给客户端这样调度器只处理请求的入站报文由于一般网络服务
应答数据比请求报文大很多采用VSTUN技术后,集群系统的最大吞吐量可以提供10倍。
VSTUN的工作流程:它的连接调度和管理与VSNAT中的一样只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,
将请求报文封装在另一个IP报文中再将封装后的IP报文转发给选出的真实服务器服务器收到报文后先将报文解封获得原来目标地址为VIP的报文服务器发现VIP
地址被配置在本地的IP隧道设备上所以就处理这个请求然后根据路由表将响应报文直接返回给客户端。
总结:
1负载均衡器通过把请求的报文通过IP隧道的方式,把请求的报文不经过原目的地址的改写,而是直接封装成另外的IP报文转发到真实服务器,
而真实服务器将响应处理后的报文直接返回给客户端用户,因此,最后RS又一个外网IP,这样效率才会更高
2由于调度器LB只处理入站请求报文。因此集群系统的吞吐量可以提高很多,但是隧道模式也会带来一定的开销Tun模式适合LANWAN
3LAN环境不如DR模式效率高有的系统还要考虑IP隧道的支持问题另外还需绑定VIP配置复杂。
4LAN多采用DRWAN环境可以用TUN模式但是在WAN环境更多的被DNShaproxynginx等代理取代因此tun模式在国内公司实际应用很少。
DR模式直接路由模式
VirtualServerviaDirectRouting(VSDR)
VSDR模式是通过改写请求报文的目标Mac地址将请求发给真实服务器的而真实服务器将响应后的处理结果直接返回给客户端用户。
同VSTUN技术一样VSDR技术可以极大地提高集群系统的伸缩性。而且,这种DR模式没有IP隧道的开销,对集群中的真实服务器也没有
必须支持IP隧道协议的要求但是要求调度器LB与真实服务器RS都有一块网卡连在同一物理网段上,即必须在同一局域网环境下。
DR模式总结:
1通过在调度器LB上修改数据包的目的Mac地址实现转发注意,源地址仍然是CIP目的地址仍然是VIP地址。
2请求的报文经过调度器而RS响应处理后的报文无需经过调度器LB因此访问量大时使用效果特别好(和NAT相比)
3因此DR模式是通过Mac地址的改写机制实现的转发因此所有RS节点和调度器LB只能在一个LAN中。
4需要注意RS节点的VIP的绑定(lo:vip,lo1:vip)和ARP抑制的问题
5强调下:RS节点的默认网关不需要是调度器LB的DIP,而直接是IDC机房分配的上级路由器的IP(RS带有外网地址的情况下)
6由于DR模式的调度器仅进行了目的Mac地址的改写因此调度器LB无法改变请求的报文的目的端口(和NAT要区别)
7当前调度器LB支持几乎所有的UnixLinux系统但目前不支持Windows系统。真实服务器RS节点可以是Windows系统
8总之DR模式效率很高但是配置也较麻烦因此访问量不是特别大的公司可以用haproxynginx取代之这符合运维的原则:简单易用高效
日2000WPV以下都可以考虑用haproxynginx
9直接对外的访问业务如web服务做RS节点最后用公网IP地址不直接对外的业务如MySQL存储系统RS节点最好用内部IP地址
LVS调度算法:
LVS的调度算法决定了如何在集群节点之间分布工作负荷。
当Director调度器收到来自客户端计算机访问它的VIP上的集群服务的入站请求时,Director调度器必须决定哪个集群节点应该处理请求。
Director调度器可用于做出该决定的调度方法分成两个基本类别:
固定调度方法:rrwrrdhsh
动态调度算法:wlclclblclblcrsednq(后两种官方站点没有,但是make过程可以看到rrwrrlcwlclblclblcrdhshsednq)
rr:轮循调度(RoundRobin),它将请求依次分配给不同的RS节点也就是在RS中均摊请求。这种算法简单但是只适合于RS处理性能相差不大的情况
wrr:加权轮循调度(weightedRoundRobin)它将依据不同RS节点的权值分配任务权值较高的RS将优先获得任务并且分配到的连接数将比权值较低的
RS节点更多。相同权值的RS节点得到相同数目的连接数
wlc:加权最小连接数调度(weightedleastconnection)假设各台的权值依次为Wi(I1。。n),当前的TCP连接数依次为Ti(I1。。n),依次选取TiWi为最小的RS
作为下一个分配的RS。
。。。。
LVS的调度算法的生产环境选型
1一般的网络服务如httpmailmysql等常用的LVS调度算法为
a基本轮叫调度rr算法
b加权最小连接调度wlc
c加权轮叫调度wrr算法
2基于局部性的最少链接LBLC和带复制的基于局部性最少链接LBLCR主要适用于WebCache和DBCache集群
3源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中它们可以保证整个系统的唯一出入口。
4最短预期延时调度SED和不排队调度NQ主要是对处理时间相对比较成的网络服务
实际使用中这些算法的适合范围不限于这些我们最好参考内核中的连接调度算法是实现原理根据具体的业务需求合理的选项。
安装LVS
下载IPvsadm〔rootBackuptools〕wgethttp:www。linuxvirtualserver。orgsoftwarekernel2。6ipvsadm1。24。tar。gz〔rootBackuptools〕wgethttp:www。linuxvirtualserver。orgsoftwarekernel2。6ipvsadm1。26。tar。gz
查看ipvs的内核模块
〔rootBackuptools〕lsmodgrepipvs
查看系统相关信息〔rootBackuptools〕unamerm2。6。18406。el5x8664〔rootBackuptools〕catetcredhatreleaseCentOSrelease5。11(Final)〔rootBackuptools〕
做内核软链接
提示:如果没有usrsrckernels2。6。18406。e15x8664,是因为缺少kerneldevel2。6。18。406。e15软件包
可以通过yuminstallkerneldevely安装
软链接也可以不做在编译时指定内核参数即可〔rootBackuptools〕lnsusrsrckernels2。6。18406。el5x8664usrsrclinux此处的内核以unamerm为主〔rootBackuptools〕llusrsrctotal24drwxrxrx2rootroot4096May112011debugdrwxrxrx4rootroot4096Sep708:08kernelslrwxrwxrwx1rootroot38Feb2911:08linuxusrsrckernels2。6。18406。el5x8664drwxrxrx7rootroot4096Dec102014redhat〔rootBackuptools〕
安装LVS命令tarzxfipvsadm1。24。tar。gzcdipvsadm1。24makemakeinstalllsmodgrepipvs〔rootBackuptools〕lsipvsadm1。24。tar。gzipvsadm1。24。tar。gz〔rootBackuptools〕tarvxfipvsadm1。24。tar。gzipvsadm1。24configstream。cipvsadm1。24configstream。h。。。〔rootBackuptools〕cdipvsadm1。24〔rootBackupipvsadm1。24〕lsconfigstream。cdebianipvsadm。8ipvsadmrestore。8ipvsadm。shlibipvsSCHEDULERSconfigstream。hdynamicarray。cipvsadm。cipvsadmsaveipvsadm。specMakefileTAGScontribdynamicarray。hipvsadmrestoreipvsadmsave。8ipvsadm。spec。inREADMEVERSION〔rootBackupipvsadm1。24〕〔rootBackupipvsadm1。24〕makemakeClibipvsmake〔1〕:Enteringdirectoryhometoolsipvsadm1。24libipvsgccWallWunusedWstrictprototypesgO2IusrsrclinuxincludeDHAVENETIPVSHcolibipvs。olibipvs。carrvlibipvs。alibipvs。oar:creatinglibipvs。aalibipvs。omake〔1〕:Leavingdirectoryhometoolsipvsadm1。24libipvsgccWallWunusedWstrictprototypesgO2IusrsrclinuxincludeI。。I。DVERSION1。24DSCHEDULERSrrwrrlcwlclblclblcrdhshsednqDHAVEPOPTDHAVENETIPVSHcoipvsadm。oipvsadm。cipvsadm。c:Infunction‘printlargenum’:ipvsadm。c:1564:warning:fieldwidthshouldhavetype‘int’,butargument2hastype‘sizet’gccWallWunusedWstrictprototypesgO2IusrsrclinuxincludeI。。I。DVERSION1。24DSCHEDULERSrrwrrlcwlclblclblcrdhshsednqDHAVEPOPTDHAVENETIPVSHcoconfigstream。oconfigstream。cgccWallWunusedWstrictprototypesgO2IusrsrclinuxincludeI。。I。DVERSION1。24DSCHEDULERSrrwrrlcwlclblclblcrdhshsednqDHAVEPOPTDHAVENETIPVSHcodynamicarray。odynamicarray。cgccWallWunusedWstrictprototypesgO2oipvsadmipvsadm。oconfigstream。odynamicarray。olibipvslibipvs。aLusrliblpoptusrbinld:skippingincompatibleusrliblibpopt。sowhensearchingforlpoptusrbinld:skippingincompatibleusrliblibpopt。awhensearchingforlpoptusrbinld:skippingincompatibleusrliblibc。sowhensearchingforlcusrbinld:skippingincompatibleusrliblibc。awhensearchingforlc〔rootBackupipvsadm1。24〕makeinstallmakeClibipvsmake〔1〕:Enteringdirectoryhometoolsipvsadm1。24libipvsmake〔1〕:Nothingtobedoneforall。make〔1〕:Leavingdirectoryhometoolsipvsadm1。24libipvsif〔!dsbin〕;thenmkdirpsbin;fiinstallm0755sipvsadmsbininstallm0755ipvsadmsavesbininstallm0755ipvsadmrestoresbin〔dusrmanman8〕mkdirpusrmanman8installm0644ipvsadm。8usrmanman8installm0644ipvsadmsave。8usrmanman8installm0644ipvsadmrestore。8usrmanman8if〔detcrc。dinit。d〕;theninstallm0755ipvsadm。shetcrc。dinit。dipvsadm;fi〔rootBackupipvsadm1。24〕〔rootBackupipvsadm1。24〕echo?0
成功啦!
〔rootBackupipvsadm1。24〕lsmodgrepipvs此时IPvs模块没有被加载执行ipvsadm命令就会把ipvs加载到系统内核或者执行命令modprobeipvs也行〔rootBackupipvsadm1。24〕ipvsadmIPVirtualServerversion1。2。1(size4096)ProtLocalAddress:PortSchedulerFlagsRemoteAddress:PortForwardWeightActiveConnInActConn〔rootBackupipvsadm1。24〕lsmodgrepipvsipvs1222410〔rootBackupipvsadm1。24〕〔rootBackupipvsadm1。24〕whichipvsadmsbinipvsadm
提示:ipvsadm1。26。tar。gz使用于kernel2。6。28及之后的内核版本不适合5。8环境
如何符合系统环境后同样需要先安装依赖包yuminstalllibnlpopty
手动配置LVS负载均衡服务器
手工添加LVS转发
1用户访问:www。nicegirl。comVIP192。168。157。135这个步骤是在DNS配置nicegirl域的DNS记录设置的
wwwINA192。168。157。135
如果未自建DNS需要在DNS管理界面增加类似上面的DNS记录一条(域名提供商)。这里的ip地址一定是外网地址
才能正式使用
A132(VIP160)LB(DIP142)RS1(135)
配置LVS虚拟IP(vip)〔rootLVS11〕ifconfigeth0:0192。168。157。160netmask255。255。255。0up〔rootLVS11〕ifconfigeth0Linkencap:EthernetHWaddr00:0C:29:04:E8:7Finetaddr:192。168。157。142Bcast:192。168。157。255Mask:255。255。255。0UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:859652errors:0dropped:0overruns:0frame:0TXpackets:159511errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:1000RXbytes:623949333(595。0MiB)TXbytes:19517130(18。6MiB)eth0:0Linkencap:EthernetHWaddr00:0C:29:04:E8:7Finetaddr:192。168。157。160Bcast:192。168。157。255Mask:255。255。255。0UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1loLinkencap:LocalLoopbackinetaddr:127。0。0。1Mask:255。0。0。0UPLOOPBACKRUNNINGMTU:16436Metric:1RXpackets:117errors:0dropped:0overruns:0frame:0TXpackets:117errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:0RXbytes:6698(6。5KiB)TXbytes:6698(6。5KiB)〔rootLVS11〕
添加主机路由也可以不添加〔rootLVS11〕routeaddhost192。168。157。160deveth0〔rootLVS11〕routenKernelIProutingtableDestinationGatewayGenmaskFlagsMetricRefUseIface192。168。157。1600。0。0。0255。255。255。255UH000eth0192。168。157。00。0。0。0255。255。255。0U000eth00。0。0。0192。168。157。20。0。0。0UG000eth0〔rootLVS11〕
清空表中的原有记录〔rootLVS11〕ipvsadmCclearthewholetable〔rootLVS11〕〔rootLVS11〕ipvsadmset30560设置settcptcpfinudp超时参数〔rootLVS11〕
添加虚拟服务〔rootLVS11〕ipvsadmAt192。168。157。160:80swrrp20〔rootLVS11〕ipvsadmLnIPVirtualServerversion1。2。1(size4096)ProtLocalAddress:PortSchedulerFlagsRemoteAddress:PortForwardWeightActiveConnInActConnTCP192。168。157。160:80wrrpersistent20
添加realserver〔rootLVS11〕ipvsadmat192。168。157。160:80r192。168。157。135:80gw1〔rootLVS11〕ipvsadmLnIPVirtualServerversion1。2。1(size4096)ProtLocalAddress:PortSchedulerFlagsRemoteAddress:PortForwardWeightActiveConnInActConnTCP192。168。157。160:80wrrpersistent20192。168。157。135:80Route100〔rootLVS11〕〔rootLVS11〕ipvsadmat192。168。157。160:80r192。168。157。136:9000gw1〔rootLVS11〕ipvsadmat192。168。157。160:80r192。168。157。141:80gw1〔rootLVS11〕ipvsadmLnIPVirtualServerversion1。2。1(size4096)ProtLocalAddress:PortSchedulerFlagsRemoteAddress:PortForwardWeightActiveConnInActConnTCP192。168。157。160:80wrrpersistent20192。168。157。141:80Route100192。168。157。136:80Route100192。168。157。135:80Route100〔rootLVS11〕
删除测试〔rootLVS11〕ipvsadmdt192。168。157。160:80r192。168。157。136:80〔rootLVS11〕ipvsadmLnIPVirtualServerversion1。2。1(size4096)ProtLocalAddress:PortSchedulerFlagsRemoteAddress:PortForwardWeightActiveConnInActConnTCP192。168。157。160:80wrrpersistent20192。168。157。141:80Route100192。168。157。135:80Route100〔rootLVS11〕
RS端绑定VIP抑制ARP
每个集群节点上的回环接口(lo)设备上绑定VIP地址(其广播地址是其本身,子网掩码是4个255
采取可变长掩码方式把网段划分成只含一个主机地址的目的是避免ip地址冲突)允许LVSDR集群中的集群节点接受发向该VIP
地址的数据包这会有一个非常严重的问题发生集群内部的真实服务器将尝试回复来自正在请求VIP客户端的ARP广播这样所有的真实
服务器都将声称自己拥有该VIP地址这时客户端将直接发送请求数据包到真实服务器上从而破坏了DR集群的方法因此必须抑制真实服务器的
ARP广播。〔rootRS1〕ifconfiglo:135192。168。157。160netmask255。255。255。255up〔rootRS1〕routeaddhost192。168。157。160devlo〔rootRS1〕ifconfigeth0Linkencap:EthernetHWaddr00:0C:29:18:8F:41inetaddr:192。168。157。135Bcast:192。168。157。255Mask:255。255。255。0UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:549058errors:0dropped:0overruns:0frame:0TXpackets:341684errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:1000RXbytes:217735147(207。6MiB)TXbytes:426122467(406。3MiB)loLinkencap:LocalLoopbackinetaddr:127。0。0。1Mask:255。0。0。0UPLOOPBACKRUNNINGMTU:16436Metric:1RXpackets:133errors:0dropped:0overruns:0frame:0TXpackets:133errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:0RXbytes:144841(141。4KiB)TXbytes:144841(141。4KiB)lo:135Linkencap:LocalLoopbackinetaddr:192。168。157。160Mask:255。255。255。255UPLOOPBACKRUNNINGMTU:16436Metric:1〔rootRS1〕〔rootRS1〕routenKernelIProutingtableDestinationGatewayGenmaskFlagsMetricRefUseIface192。168。157。1600。0。0。0255。255。255。255UH000lo192。168。157。00。0。0。0255。255。255。0U000eth00。0。0。0192。168。157。20。0。0。0UG000eth0〔rootRS1〕
抑制ARP〔rootRS1conf〕pwdprocsysnetipv4conf〔rootRS1conf〕echo1procsysnetipv4confloarpignore〔rootRS1conf〕echo2procsysnetipv4confloarpannounce〔rootRS1conf〕echo1procsysnetipv4confallarpignore〔rootRS1conf〕echo2procsysnetipv4confallarpannounce〔rootRS1conf〕
分别在RS2RS3上执行相同的操作绑定VIP抑制ARP
LVS安装小结:
1CentOS5。X安装lvs使用ipvsadm1。24。tar。gz版本不用1。26
2CentOS6。4安装lvs使用ipvsadm1。24。tar。gz版本并且需要先安装yuminstalllibnlpopty
3安装lvs后要执行IPvsadm把ipvs模块加载到内核
4本地网卡子接口添加VIP,ifconfigeth0:0vip24up
5清空原有的VIP转发表ipvsadmCclearthewholetable
6ipvsadmset30560设置settcptcpfinudp超时参数
7添加VIP服务ipvsadmAt192。168。157。160:80swrrp20
8添加RSipvsadmat192。168。157。160:80r192。168。157。135:80gw1〔rootLVS11〕watchinterval1ipvsadmLnEvery1。0s:ipvsadmLnMonFeb2922:34:122016IPVirtualServerversion1。2。1(size4096)ProtLocalAddress:PortSchedulerFlagsRemoteAddress:PortForwardWeightActiveConnInActConnTCP192。168。157。160:80wrrpersistent20192。168。157。140:80Route100192。168。157。141:80Route120192。168。157。135:80Route100
测试LVS服务的转发:
首先客户端浏览器访问RS成功了,然后访问DR的VIPhttp:192。168。157。160,如果经过
多次测试能分别出现RS135,RS140,RS141的不同内容说明配置成功了
由于有浏览器缓存及LVS会话保持等影响个人简单的测试切换RS的几率要很多次才行,并且要关闭浏览器
换不同的客户端ip来测试,效果更明显一些。单机测试是有这种情况的(负载均衡的算法倾向于一个客户端ip定向到一个后端服务器,以保持会话连贯性)
如果用两三台机器去测试也许就不一样
ARP抑制参数说明
arpignoreINTEGER
定义对目标地址为本地IP的ARP询问不同的应答模式
0默认值,回应任何网络接口上对任何本地ip地址的ARP查询请求
1只回答目标ip地址是来访网络接口本地地址的ARP查询请求
2只回答目标ip地址是来访网络接口本地地址的ARP查询请求且来访ip必须在该网络接口的子网段内
3不回应该网络界面的ARP请求而只对设置的唯一和连接地址做出回应。
47保留未使用
8不回应所有(本地地址)的ARP查询
arpannounceINTEGER
对网络接口上本地ip地址的发出的,ARP回应,做出相应级别的限制
确定不同程度的限制宣布对来自本地源ip地址发出ARP请求的接口
0默认在任意网络接口(eth0eth1lo)上的任何本地地址
1尽量避免不在该网络接口子网段的本地地址做出ARP回应当发起ARP请求的源ip地址是被设置应该经由
路由达到此网络接口的时候很有用此时会检查来访ip是否为所有接口上的子网段内ip之一。如果该来访ip
不属于各个网络接口上的子网段内那么将采用级别2的方式来进行处理
2对查询目标使用最适当的本地地址在此模式下降忽略这ip数据包的源地址并尝试选择与能和该地址通信的本地地址
首要是选择所有的网络接口的子网中外出访问子网中包含该目标ip地址的本地地址如果没有合适的地址被发现
将选择当前的发送网络接口或其它的有可能接受到该ARP回应的网络接口来进行发送限制了使用本地的VIP
地址作为优先的网络接口。
抓包〔rootlampscripts〕tcpdumpieth1tcpport80s1000tcpdumpieth1tcpport80xvvXs1000〔rootlampscripts〕tcpdumpieth1tcpport80s1000tcpdump:verboseoutputsuppressed,usevorvvforfullprotocoldecodelisteningoneth1,linktypeEN10MB(Ethernet),capturesize1000bytes14:27:34。582880IP192。168。157。132。63548blog。aa。com。http:Flags〔S〕,seq3948779029,win8192,options〔mss1460,nop,wscale8,nop,nop,sackOK〕,length014:27:34。582995IPblog。aa。com。http192。168。157。132。63548:Flags〔S。〕,seq2127625605,ack3948779030,win14600,options〔mss1460,nop,nop,sackOK,nop,wscale5〕,length0VSNATifconfigeth0:29vip24uprouteaddhostvipdeveth0ipvsadmCipvsadmset30560ipvsadmAtvip:80swrrp20p表示连接的会话保持
添加rs
ipvsadmatvip:80rrip:80mw1参数m是nat模式的意思
RS端改网关指向DIP
routeadddefaultgwDIP
LB开启内核转发net。ipv4。ipforward1意思是让Linux系统能像路由器交换机那样具有转发功能
vimetcsysctl。conf
net。ipv4。ipforward1
sysctlp
VSTUN
LB端添加VIPRS和以上相同只要把参数m改成i即可
主要是客户端RS
RS端执行以下脚本
ipvstun。sh!binshdescription:startrealserverVIP192。168。157。166。etcrc。dinit。dfunctionscase1instart)sbinmodprobeipip开启隧道支持sbinifconfigtun10VIPbroadcastVIPnetmask255。255。255。255upsbinrouteaddhostVIPdevtun10echo1procsysnetipv4conftun10arpignoreecho2procsysnetipv4conftun10arpannounceecho0procsysnetipv4conftun10rpfilterecho1procsysnetipv4conftun10forwardingecho1procsysnetipv4confallarpignoreecho2procsysnetipv4confallarpannouncesysctlpdevnull21echoRealServerStartOK;;stop)echo0procsysnetipv4conftun10arpignoreecho0procsysnetipv4conftun10arpannounceecho1procsysnetipv4conftun10rpfilterecho0procsysnetipv4conftun10forwardingecho0procsysnetipv4confallarpignoreecho0procsysnetipv4confallarpannouncesbinroutedelVIPsbinifconfigtun0downsysctlpdevnull21echoRealServerStopOK;;)echoUsage:0{startstop};;esacexit0
调度器上实现对后端集群节点的健康监控
checkrs。sh
主备LB的实现及防止裂脑的一些方案
主备的LB配置相同(autoinstalllvs。shipvsdrconfig。sh)通过在备LB端用checklb。sh进行监控主LB
当主出现故障时checklb。sh执行,然后接管主LB任务,当主LB恢复时,checklb。sh会调用stop函数清掉VIP,否则会出现裂脑问题
主LB正常的情况下,备节点如下:
Every2。0s:ipvsadmLnThuMar323:25:392016
IPVirtualServerversion1。2。1(size4096)
ProtLocalAddress:PortSchedulerFlags
RemoteAddress:PortForwardWeightActiveConnInActConn
当主节点异常时:备节点接管任务
Every2。0s:ipvsadmLnThuMar323:29:072016
IPVirtualServerversion1。2。1(size4096)
ProtLocalAddress:PortSchedulerFlags
RemoteAddress:PortForwardWeightActiveConnInActConn
TCP192。168。157。160:80wrrpersistent20
192。168。157。142:80Route100
192。168。157。140:80Route100
主节点恢复时,备节点还原
导致裂脑发生的原因
1高可用服务器之间心跳线链路故障导致无法相互检查心跳
2高可用服务器上开启了防火墙阻挡了心跳检测
3高可用服务器上网卡地址等信息配置不正常导致发送心跳失败
4其它服务配置不当等原因如心跳方式不同心跳广播冲突软件BUG等
防止裂脑的一些方案
1加冗余链路
2检测到裂脑时强行关闭心跳检测(远程关闭主节点控制电源的电路fence)
3做好裂脑的监控报警
4报警后备节点在接管时设置比较长的时间去接管给运维人员足够的时间去处理
5启动磁盘锁正在服务的一方锁住磁盘裂脑发生时让对方完全抢不走共享磁盘资源
高可用方案:
1heartbeat(负责VIP切换)LVSldirector(ldirector负责RS节点的健康检查)
复杂不易控制
2piranha方案(利用红帽的Piranha方案实现web负载均衡)
3UltraMonkey
4heartbeatmoncodeldirectord
5keeplivedLVS
此法简单易用高效
http:www。linuxvirtualserver。orgdocshakeepalived。html
生产案例:LVS集群分发请求RS不均衡,生产环境实战解决
生产环境中ipvsadmLn发现两台RS的负载不均衡一台有很多请求,一台没有。
并且没有请求的那台RS经测试服务正常,lo:VIP也有但是就是没有请求。
TCP172。168。1。50:3307wrrpersistent10
172。168。1。51:3307Route100
172。168。1。52:3307Route1012389
问题原因:
persistent10的原因,persistent会话保持当clientA访问网站的时候,LVS把请求
分发给了52,那么以后clientA再点击的其它操作,其它请求,也会发送给52这台机器。
解决办法:
到keepalive中注释掉persistent10然后etcinit。dkeepalivedreload,然后可以看到
以后负载均衡两边都请求都均衡了。
其它导致负载不均衡的原因可能有:
1LVS自身的会话保持参数设置(p300,persistent300)优化:大公司尽量用cookie代替session
2LVS调度算法设置,例如rrwrrwlc算法
3后端RS节点的会话保持参数例如Apache的keepalive参数
4访问量较少的情况,不均衡的现象更加明显
5请求时间长短请求资源的多少大小等
LVS故障排错理论及实战讲解
排查的思路是要熟悉LVS的工作原理然后根据原理过程来排查
例如:
1调度器上LVS调度规则及IP的正确性
2RS节点上VIP绑定和抑制的检查
对绑定的VIP做实时监控出问题报警或者自动处理后报警
把绑定的VIP做成配置文件如etcsysconfignetworkscriptslo:0
ARP抑制的配置思路
1、如果的单个VIP那么可以用stop传参设置0
2、如果rs端有多个VIP绑定,此时,即使是停止VIP绑定也一定不要置0
3、RS节点上自身提供服务的检查
4、辅助排查工具有tcpdumpping等
5、三角形排查理论
用户到LB之间链路通不通
用户直接到RS端链路通不通
LB与RS之间链路通不通
100元到200元左右的台灯有好用的吗,你有哪些推荐?刚好我家的三个台灯非常符合题主的要求,我就拿出来做个简单的比较,方便大家选择。就是下面这仨货,从左到右依次是米家LED智能台灯1S,179元。倍思充电插电两用……
如果5G手机全面上市,那么不换5G手机,继续使用4G手机会怎如果不是高端,网速慢点没关系,不用跟风追潮,平民玩快手抖音看视频4G能用,要那么快没用,反正都是为了娱乐,打发时间,不挣钱还要花流量钱,玩不起,想看不敢看想说不敢说怕费流量钱。……
vivo首款主动降噪真无线耳机发布具备40dB降噪深度vivvivoTWS2中国网科技5月21日讯vivoTWS2系列真无线耳机20日正式发布。据介绍,作为vivo首款搭载主动降噪功能的真无线耳机,vivoTWS2不仅提供专业的音……
去华为当普工可以从哪里进?华为的普工没有正式工,只有外包工。一般来说,普工的招聘渠道就三种:一种是网站招聘。像前程无忧、智联招聘等,都有华为招聘的信息。第二种是现场招聘。在当地的人才市场,一般有华为普工……
脚踏风火轮畅游街巷间哪吒V增加4款车型浙江合众新能源汽车有限公司你可能不知道,但如果提起该公司旗下的哪吒系列新能源汽车,你没开过恐怕也听过吧。毕竟,哪吒这个IP太强大,足以让人过目不忘。目前,哪吒汽车旗下共有哪吒0……
网传美航母在南海GPS信号全无,是真的吗?最近一段时间,网上有这样的传言,美航母在南海GPS信号全无,原因是美国在该地区部署的定位坐标全部消失了,甚至还有人称是某国将这些坐标收拾了。事实真是这样吗?要谈论这件事情……
数字货币暴涨,还有哪些潜力币可埋伏二拟币数字货币行情火爆,狗狗币一年涨幅150倍,以太坊最近大涨,比特币一直维持在高位震荡。可是投资者炒币者想要再在这些虚拟币上暴富,难度可想而知,除非大力加杠杆,做杠杠合约交易,……
电商之殇百年之大变局淘宝死,中国不强,这句话早就出现了,为什么现在还是有很大争议,为什么?我相信当年马云创立阿里巴巴,是因为预期互联网将是社会发展的趋势效率更高,服务更好的新商业模式,这个梦想是伟……
家用吸尘器哪个品牌的好?我用的是飞利浦吸尘器,很好用前言前不久钣金装修好的新家,每天最烦恼的就是打扫卫生、做家务。尤其是扫地来说,家里之前的那个扫把每次用完都感觉手心腾,而且像一些灰尘、宝宝吃的……
周鸿祎元宇宙不是一个产品,而是全面数字化的高级阶段北京商报讯(记者魏蔚)12月28日,360创始人周鸿祎在360集团战略发布会上表示,元宇宙是数字化发展到高级阶段的产物。数字化程度越高,安全挑战越大,未来对虚拟世界的攻击会伤害……
上海有哪些值得加入的互联网公司?经过了近十年的发展,互联网公司在上海应该说是非常多了。那么以下就给大家简单列举几个近几年发展格外迅速,最值得加入的互联网公司1、规模最大:携程携程可能是当下上海最有名的互联网公……
给生活带来革命性变化的10项新科技成果一、3D游戏在预测期内(20212026年),3D游戏机市场的年复合增长率预计为15。15。玩家的平均支出增加,购买力提高,以及世界各地的开发商采取积极的营销策略,都推动……