一、LVS概述 LVS是LinuxVirtualServer的缩写,是一种基于Linux内核实现的高可用性、高性能的负载均衡技术。它可以将来自客户端的请求分发到多台服务器上,实现多台服务器的负载均衡,提高整个系统的性能和可用性。 LVS技术主要包括以下几个组件:LVS调度器:负责接收客户端请求并将其分发到后端的真实服务器上,根据不同的负载均衡算法进行分发。真实服务器:处理来自调度器的请求并返回响应,提供实际的服务。Keepalived:LVS的高可用组件,用于监控LVS调度器的状态并在发生故障时自动切换到备用调度器,以保证服务的高可用性。IPVS:内核中实现LVS技术的模块,实现负载均衡算法和请求分发等功能。 LVS技术广泛应用于互联网服务、网络游戏、数据中心等领域,能够提高系统的性能和可用性,降低系统的维护成本。二、LVS基本操作1)基本命令操作1、添加规则ipvsadmAEtufserviceaddress〔sscheduler〕〔ptimeout〕〔Mnetmast〕〔pepersistenceengine〕〔bschedflags〕2、删除规则ipvsadmDtufserviceaddress3、清空定义的所有内容ipvsadmC4、重载ipvsadmR6、保存ipvsadmS〔n〕7、增、改RS规则ipvsadmaetufserviceaddressrserveraddress〔gim〕〔wweight〕8、删除RS规则ipvsadmdtufserviceaddressrserveraddress9、查看规则列表ipvsadmLnl〔options〕numeric,n:以数字形式输出地址和端口号exact:扩展信息,精确值stats:统计信息rate:输出速率信息10、清空计数器ipvsadmZ〔tufserviceaddress〕11、ipvs规则procnetipvs12、ipvs连接procnetipvsconn2)保存及重载规则1、保存 建议保存至etcsysconfigipvsadmipvsadmsavenPATHTOIPVSADMFILEipvsadmSnPATHTOIPVSADMFILEsystemctlstopipvsadm。service2、重载ipvsadmrestorePATHTOIPVSADMFILEipvsadmRPATHTOIPVSADMFILEsystemctlrestartipvsadm。service三、LVS四种模式实战操作讲解1)NAT模式 1、设计要点RIP与DIP在同一IP网络,RIP的网关要指向DIP支持端口映射Director要打开核心转发功能2、配置 1、管理集群服务:增,改,删增、改ipvsadmAEtufserviceaddress〔sscheduler〕〔ptimeout〕删除:ipvsadmDtufserviceaddressserviceaddress:tuf:t:TCP协议的端口,VIP:TCPPORTu:UDP协议的端口,VIP:UDPPORTf:firewallMARK,标记,一个数字〔sscheduler〕:指定集群的调度算法:默认为wlc 2、管理集群上的RS:增、改、删增、改:ipvsadmaetufserviceaddressrserveraddress〔gim〕〔wweight〕serveraddress: rip〔:port〕如省略port,不作端口映射选项:lvs类型:g:gateway,dr类型,默认i:ipip,tun类型m:masquerade,nat类型wweight:权重3、ipvsscheduleripvsscheduler:根据其调度是否考虑各RS当前的负载状态 两种:静态方法和动态方法静态方法:仅根据算法本身进行调度1、RR:roundrobin,轮训2、WRR:WeightedRR,加权轮训3、SH:SourceHashing,实现sessionsticky,源IP地址hash;将来自同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定4、DH:DestinationHashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:带宽运营商4、实验:实现NAT模式的LVS(必须原路返回)ipforward1routeadddefaultgw192。168。0。201t:tcp,swrr:加权轮训ipvsadmAt172。20。0。200:80swrrm:NAT模式;默认:DR模式,不支持映射到不同端口;w:权重,默认是1ipvsadmat172。20。0。200:80r192。168。30。17:8080mw3ipvsadmat172。20。0。200:80r192。168。30。27:8080m2。router:路由器配置ipforward1routeadddefaultgw192。168。0。2002)DR模式 1、DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:在前端网关做静态绑定在各RS使用arptables在各RS修改内核参数,来限制arp响应和通告的级别2、限制响应级别:arpignore0:默认值,表示可使用本地任意接口上配置在任意地址响应1:仅在请求目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应3、限制通告级别:arpannounce0:默认值,把本机所有接口的所有信息向每个接口的网络进行通知1:尽量避免将接口信息向非直接连接网络进行通知2:必须避免将接口信息向非网络进行通告4、实验:实现DR模式的LVS(不原路返回)步骤一:准备3台虚拟机步骤二:先配置3台虚拟机的网络eth0配置在一个网段DIP,RIP配置在一个网段步骤三:配置lvs的VIPifconfigens33:0192。168。182。10024echo1procsysnetipv4ipforward步骤四(RS):调整RS的响应,通告级别(每一台RS都配)echo1procsysnetipv4confens33arpignoreecho1procsysnetipv4confallarpignoreecho2procsysnetipv4confens33arpannounceecho2procsysnetipv4confallarpannounce步骤五:在RS上配置VIPifconfiglo:8192。168。182。100netmask255。255。255。255步骤六:启动RS上的httpd服务yuminstallhttpdycdvarwwwhtmlviindex。htmlservicehttpdstart客户端验证:RIP:80能显示VIP:80不能显示步骤七:安装LVSipvsadmyuminstallipvsadmyt:tcp,srr:轮训ipvsadmAt192。168。182。100:80srrm:NAT模式;默认:DR模式,不支持映射到不同端口;w:权重,默认是1;g:DR模型,m:NET模型ipvsadmat192。168。182。128:80r192。168。182。129gipvsadmat192。168。182。128:80r192。168。182。130gipvsadmln浏览器刷新:访问vipipvsadmlncnetstatnatp3)TUN模式 4)FULLNAT模式 四、KeepalivedLVS实战操作 Keepalived是一个用于Linux平台的高可用性软件。它实现了虚拟路由器冗余协议(VRRP)和健康检查功能,可以用于确保在多台服务器之间提供服务的高可用性。Keepalived可以检测服务器的故障,并在主服务器宕机时,自动将备份服务器提升为主服务器,确保服务的持续性和可用性。 Keepalived可以在主备服务器之间动态分配虚拟IP地址,使客户端能够在主备服务器之间无缝切换,提高服务的可用性。此外,Keepalived还支持基于文本文件的配置和基于SNMP的监控。它可以与常用的负载均衡器配合使用,如HAProxy、Nginx等。 总的来说,Keepalived是一个功能强大的工具,可用于提供高可用性服务。它是一个免费的开源软件,广泛应用于企业和个人服务器环境中。 架构图如下: 1)keepalived安装以及基本操作安装yuminstallkeepalivedy启动servicekeepalivedstart配置文件位置etckeepalivedkeepalived。conf查看ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志atailfvarlogmessage2)具体配置步骤【步骤一】至少准备四台虚拟机【步骤二】调整RS的响应,通告级别(每一台RS都配)echo1procsysnetipv4confens33arpignoreecho1procsysnetipv4confallarpignoreecho2procsysnetipv4confens33arpannounceecho2procsysnetipv4confallarpannounce步骤三:在RS上配置VIP,切记(DR模式)不要忘了在RS配置VIP,要不然数据包会被丢弃ifconfiglo:8192。168。182。100netmask255。255。255。255步骤四:在RS安装启动httpd服务yuminstallhttpdycdvarwwwhtmlechofromooxxipindex。htmlservicehttpdstart步骤五:给两台keepalived机子安装keepalived(一主一备)yumyinstallkeepalivedyumyinstallipvsadm步骤六:配置keepalived配置文件 主节点配置:etckeepalivedkeepalived。conf!ConfigurationFileforkeepalivedglobaldefs{notificationemail{acassenfirewall。locfailoverfirewall。locsysadminfirewall。loc}notificationemailfromAlexandre。Cassenfirewall。locsmtpserver192。168。200。1smtpconnecttimeout30routeridLVSDEVELvrrpskipcheckadvaddrvrrpstrict如果还是访问不了VIP,可以把这行注释掉vrrpgarpinterval0vrrpgnainterval0}vrrpinstanceVI1{主stateMASTER备stateBACKUPinterfaceens33virtualrouterid51主priority100备priority50advertint1authentication{authtypePASSauthpass1111}virtualipaddress{192。168。182。10032devens33labelens33:7}}virtualserver192。168。182。10080{delayloop6lbalgorrlbkindDRnatmask255。255。255。0persistencetimeout0protocolTCPrealserver192。168。182。13080{weight1HTTPGET{url{pathstatuscode200}connecttimeout3nbgetretry3delaybeforeretry3}}realserver192。168。182。13180{weight1HTTPGET{url{pathstatuscode200}connecttimeout3nbgetretry3delaybeforeretry3}}} 从节点配置:复制一份修改好的配置到从主机,修改1、stateBACKUP,2、priority50cdetckeepalivedscp。keepalived。confroot192。168。182。129:pwd启动binsystemctlstartkeepalived。serviceRS切记关闭防火墙,如果web也访问不了,lvs也可以关闭防火墙试试systemctlstopfirewalld查看是否配置了VIP查看是否配置了规则主未挂,备则会自动配置规则,但是不会配置VIP,保证只有一个VIP对外提供服务一旦主挂了,则备接管(测试,down掉主网卡:ifconfigens33down) 缺点:脑裂问题 【分析原因】:keepalived自身不是高可用,主进程可能会被杀死,但是进程杀死后,没有回收VIP,导致主keepalived无法广播,备keepalived得不到主的广播信号,导致备也会配上VIP,使得主备都有VIP,最后CIP访问VIP的三次握手可能会被打散到主备keepalived上,无法建立连接,导致无法访问。 【解决方案】:写一个自动脚本,定时巡检主keepalived进程是否还存活,如果被杀死,则重启主keepalived服务换用更高级的高可用技术(zookeeper),后续会有zookeeper相应的文章 最后附上keepalived配置文件说明:!ConfigurationFileforkeepalivedglobaldefs{全局定义部分notificationemail{设置报警邮件地址,可设置多个acassenfirewall。loc接收通知的邮件地址}notificationemailfromtest0163。com设置发送邮件通知的地址smtpserversmtp。163。com设置smtpserver地址,可是ip或域名。可选端口号(默认25)smtpconnecttimeout30设置连接smtpserver的超时时间routeridLVSDEVEL主机标识,用于邮件通知vrrpskipcheckadvaddrvrrpstrict严格执行VRRP协议规范,此模式不支持节点单播vrrpgarpinterval0vrrpgnainterval0scriptuserkeepalivedscript指定运行脚本的用户名和组。默认使用用户的默认组。如未指定,默认为keepalivedscript用户,如无此用户,则使用rootenablescriptsecurity如过路径为非root可写,不要配置脚本为root用户执行。}vrrpscriptchknginxservice{VRRP脚本声明scriptetckeepalivedchknginx。sh周期性执行的脚本interval3运行脚本的间隔时间,秒weight20权重,priority值减去此值要小于备服务的priority值fall3检测几次失败才为失败,整数rise2检测几次状态为正常的,才确认正常,整数userkeepalivedscript执行脚本的用户或组}vrrpinstanceVI1{vrrp实例部分定义,VI1自定义名称stateMASTER指定keepalived的角色,必须大写可选值:MASTERBACKUPinterfaceens33网卡设置,lvs需要绑定在网卡上,realserver绑定在回环口。区别:lvs对访问为外,realserver为内不易暴露本机信息virtualrouterid51虚拟路由标识,是一个数字,同一个vrrp实例使用唯一的标识,MASTER和BACKUP的同一个vrrpinstance下这个标识必须保持一致priority100定义优先级,数字越大,优先级越高。advertint1设定MASTER与BACKUP负载均衡之间同步检查的时间间隔,单位为秒,两个节点设置必须一样authentication{设置验证类型和密码,两个节点必须一致authtypePASSauthpass1111}virtualipaddress{设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个192。168。119。130}trackscript{脚本监控状态chknginxservice可加权重,但会覆盖声明的脚本权重值。chknginxserviceweight20}notifymasteretckeepalivedstarthaproxy。shstart当前节点成为master时,通知脚本执行任务notifybackupetckeepalivedstarthaproxy。shstop当前节点成为backup时,通知脚本执行任务notifyfaultetckeepalivedstarthaproxy。shstop当当前节点出现故障,执行的任务;}virtualserver192。168。119。13080{定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开delayloop6每隔6秒查询realserver状态lbalgorr后端调试算法(loadbalancingalgorithm)lbkindDRLVS调度类型NATDRTUNpersistencetimeout60同一IP的连接60秒内被分配到同一台realserverprotocolTCP用TCP协议检查realserver状态realserver192。168。119。12080{weight1权重,最大越高,lvs就越优先访问TCPCHECK{keepalived的健康检查方式HTTPGETSSLGETTCPCHECKSMTPCHECKMISCconnecttimeout1010秒无响应超时retry3重连次数3次delaybeforeretry3重连间隔时间connectport80健康检查realserver的端口}}realserver192。168。119。12180{weight1权重,最大越高,lvs就越优先访问TCPCHECK{keepalived的健康检查方式HTTPGETSSLGETTCPCHECKSMTPCHECKMISCconnecttimeout1010秒无响应超时retry3重连次数3次delaybeforeretry3重连间隔时间connectport80健康检查realserver的端口}}}vrrpinstanceVI2{vrrp实例部分定义,VI1自定义名称stateBACKUP指定keepalived的角色,必须大写可选值:MASTERBACKUP分别表示(主备)interfaceens33网卡设置,绑定vip的子接口,lvs需要绑定在网卡上,realserver绑定在回环口。区别:lvs对访问为外,realserver为内不易暴露本机信息virtualrouterid52虚拟路由标识,是一个数字,同一个vrrp实例使用唯一的标识,MASTER和BACKUP的同一个vrrpinstance下这个标识必须保持一致priority90定义优先级,数字越大,优先级越高。advertint1设定MASTER与BACKUP负载均衡之间同步检查的时间间隔,单位为秒,两个节点设置必须一样authentication{设置验证类型和密码,两个节点必须一致authtypePASSauthpass1111}virtualipaddress{设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个192。168。119。131}}virtualserver192。168。119。13180{定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开delayloop6每隔6秒查询realserver状态lbalgorr后端调试算法(loadbalancingalgorithm)lbkindDRLVS调度类型NATDRTUNpersistencetimeout60同一IP的连接60秒内被分配到同一台realserverprotocolTCP用TCP协议检查realserver状态realserver192。168。119。12080{weight1权重,最大越高,lvs就越优先访问TCPCHECK{keepalived的健康检查方式HTTPGETSSLGETTCPCHECKSMTPCHECKMISCconnecttimeout1010秒无响应超时retry3重连次数3次delaybeforeretry3重连间隔时间connectport80健康检查realserver的端口}}realserver192。168。119。12180{weight1权重,最大越高,lvs就越优先访问TCPCHECK{keepalived的健康检查方式HTTPGETSSLGETTCPCHECKSMTPCHECKMISCconnecttimeout1010秒无响应超时retry3重连次数3次delaybeforeretry3重连间隔时间connectport80健康检查realserver的端口}}} LVSKeepalived介绍和实战操作演示就先到这里了,有任何疑问欢迎给我留言,也可关注我的公众号【大数据与云原生技术分享】,后续会持续更新相关技术文章。