关注分享主机优惠活动
国内外VPS云服务器

Keepalive构建高可用的nginx并详细讲解其原理(keepalive nginx)

一、Keepalived简介摘自官网简介:

Keepalived是一个用c语言编写的路由软件。这个项目的主要目标是为Linux系统和基于Linux的基础设施提供简单而健壮的负载平衡设施和高可用性。

项目地址:github.com/acassen/kee…

Keep alived的作用是检测服务器的状态。如果服务器宕机或其他故障导致当前服务器不可用,Keepalived将检测并从系统中移除故障服务器,同时用备用服务器替换该服务器的工作。当服务器正常工作时,Keepalived会自动将服务器添加到服务器群中,所有这些任务都是自动完成的,无需人工干预。所有需要做的就是手动修复故障服务器。Keepalived软件最初是为LVS负载均衡软件设计的,用于管理和监控LVS集群系统中每个服务节点的状态。后来增加了可以实现高可用性的VRRP功能。因此,除了能够管理LVS软件,Keepalived还可以作为其他服务的高可用解决方案软件(如Nginx、Haproxy、MySQL等。).Keepalived软件主要通过VRRP协议实现高可用性功能。VRRP是虚拟路由器冗余协议的缩写。VRRP的目的是解决静态路由单点故障的问题,在单个节点出现故障时可以保证整个网络的不间断运行。因此,Keepalived一方面具有配置和管理LVS的功能,同时还具有对LVS下的节点进行健康检查的功能,另一方面可以实现系统网络服务的高可用。

其次,Keepalived LVS软件的应用场景管理实现了基于VRRP的高可用性健康检查。通过官网的介绍,我们可以看到Keepalived提供了两个重要的功能:负载均衡和high -可用性。它最初是为LVS负载平衡软件设计的,可用于管理和监控LVS集群系统中每个服务节点的状态。后来的版本增加了VRRP功能,可以实现高可用性。

所以keepalived主要有两种应用场景,一种是通过配置keepalived结合ipv来实现负载均衡(LVS+keepalived);

另一种是通过自健康检查、资源接管等功能使高可用(双机热备)实现故障转移,类似心跳。

目前世界各地监控的分布式MySQL集群都是用Keeaplived来实现代理的热备功能,所以下面只介绍高可用场景下的相关知识。

三、Keepalived的工作原理

1 VRRP协议保持激活基于VRRP协议。VRRP代表虚拟路由器冗余协议,即虚拟路由冗余协议,可以认为是实现路由器高可用性的协议。

VRRP是一种用于实现路由器冗余的协议。VRRP协议是为消除静态默认路由环境下路由器单点故障导致的网络故障而设计的主/备模式协议,使得在不影响内外数据通信、不修改内网网络参数的情况下,切换设计设备的功能成为可能。VRRP协议需要具备IP备份、优先路由、减少不必要的路由器通信等功能。VRRP协议将两台或多台路由器设备虚拟化为一台设备,并向外部提供虚拟路由器IP。但是在路由器组内部,如果实际拥有这个外部IP的路由器正常工作,就是master,或者是通过算法选举出来的。MASTER为虚拟路由器IP实现各种网络功能,如ARP请求、ICMP、数据转发等。其他设备没有此IP,状态为备份。除了从主服务器接收VRRP状态通知信息之外,它不会执行外部网络功能。当主机出现故障时,备份将接管原主机的网络功能。配置VRRP协议时,需要配置每台路由器的虚拟路由ID(VRID)和优先级值,并使用VRID对路由器进行分组。VRID值相同的路由器在同一组,VRID是0-255的整数;同一组中的路由器通过使用优先级值来选举主路由器。优先级是MASTER,优先级是0-255的正整数。与高可用场景相对应的是,路由器实际上被改成了服务器或者服务器上的应用:通常是两台linux服务器组成一个热备组(master-backup),热备组中只有一台主服务器同时提供服务,主服务器会虚拟一个共享IP地址(VIP),这个地址只存在于主服务器上,对外提供服务。如果keepalived检测到主服务器宕机或服务失败,备份服务器会自动接管VIP成为主服务器,keepalived会将主服务器从热备组中移除,主服务器恢复后会自动加入热备组,默认情况下会抢占成为主服务器,起到故障转移的作用。

2个核心组件Keepalive构建高可用的nginx并详细讲解其原理(keepalive nginx)-主机频道

Keepalived是模块化设计,不同的模块负责不同的功能。主要有核心、检查和VRRP三个模块,其中:

* *核心模块:* *是keepalived的核心组件,负责启动和维护主进程,加载和解析全局配置文件;* *检查:* *负责健康检查,包括各种常见的检查方法。这里的配置决定了在哪个层上工作;**VRRP模块:* *在这里实施VRRP协议。此外,还有:

系统调用:系统调用看门狗:libipfwc: iptables (ipchains)库,它监控check和vrrp进程。libipvs*用于配置LVS: libipvs用于配置LVS。

3分层工作keepalived在做负载均衡时工作在TCP/IP协议的3/4/5层,在做高可用性时工作在OSI七层协议模型的3/4/7层,基本相同,只是名称不同。

与层相关的协议TFTP、HTTP、SNMP、DNS、FTP、SMTP、Telnet是应用层网络服务和最终用户之间的接口,显示了层数据的表示、安全和压缩,以及无协议会话层中会话的建立、管理和终止。无协议传输层定义了数据传输的协议端口号,以及流量控制和错误检查。TCP和UDP网络层逻辑地址。实现不同网络之间的路径选择IP、ICMP、RIP、OSPF、BGP、IGMP数据链路层建立逻辑连接、硬件地址寻址、错误检查等。SLIP、CSLIP、PPP、ARP、RARP、MTU物理层建立、连接和断开物理连接。ISO 2110、IEEE 802和IEEE 802.2工作的层之间的差异取决于哪个网络协议用于健康检查:

第三层:工作在第三层时,keepalived会定期向热备组中的服务器发送互联网控制消息协议,判断某个服务器是否宕机,如果没有响应,则将该服务器从热备组中移除。

第四层:在第四层工作时,keepalived根据TCP端口的状态判断服务器是否有故障,比如检测MySQL的3306端口,如果无法访问,就将此服务器从热备组中移除。

Layer7:在七楼工作时,keepalived根据用户设置的策略,比如使用HTTP请求,判断服务器上的程序是否正常运行。如果返回错误状态代码,服务器将从热备用组中删除。

在保持活动的服务器之间,只有作为主服务器的服务器不断发送VRRP广播数据包,以告知备用服务器它仍然活动。这个时候备用的不会抓住主的。只有当主设备不可用,备用设备无法接收到主设备的VRRP广播包时,备用设备才会启动相关服务,接管主设备的任务,对外提供服务,以保证服务的正常使用。

4工作状态keepalived正常启动时,启动三个进程:一个是父进程,负责监控其子进程;

一个是VRRP子流程,另一个是跳棋子流程;

两个子流程都由watchlog监管,Healthcheck子流程检查各自服务器的健康状态。

如果healthchecks进程检查到主服务器上的服务不可用,它将通知本地计算机上的VRRP子进程删除通知,删除虚拟IP,并切换到备份状态。在生产服务器上保持活动的流程

四。Keepalived的使用

1配置简介keepalived配置文件分为层次和模块,每层由“{ } & quot来定义。主配置文件中的include可以包含多个子配置文件。详细语法描述:公文配置文件包括以下模块:

全局配置BFD配置VRRPD配置LVS配置

关闭主机上的nginx,看看VIP是否漂移到待机状态。

#关闭主nginx

动词 (verb的缩写)需要注意的问题:

1精神分裂症简介在一个高可用系统中,如果两个节点的心跳断开,那么这两个节点原本是一个行动整合协调的HA系统,现在却由于两个节点心跳断开而分裂成两个独立的个体。由于双方失去联系,他们都会认为对方出了故障。此时,这两个独立的个体就像“脑残人士”一样争夺共享资源和应用服务,会造成严重的问题:

共享资源被分割,两边服务都上不去;两个服务都是up,同时提供服务,同时读写存储,导致数据不一致甚至损坏。

1.1产生卵裂的原因一般来说,产生卵裂的原因有以下几种:

(1)1)HA服务器之间心跳故障导致通信异常;(2)在HA服务器上打开防火墙,阻断心跳的信息传递;(3)3)HA服务器上心跳网卡配置不正确,导致心跳信息发送失败;(4)其他服务器配置不当的原因。比如心跳模式不同,心跳广播冲突,软件bug等。(5)在5)Keepalived配置中的同一个VRRP实例中,如果virtualrouterid两端的参数配置不一致,也会出现裂脑问题。

1.2常见解决方案在实际环境中,我们可以从以下几个方面来预防裂脑问题:

(1)同时使用串行线或以太网线连接,同时使用两条心跳线。如果一个坏了,另一个仍能提供正常服务;(2)当检测到裂脑时,强制关闭一个节点(该功能需要特殊设备支持,如Stonith、feyce),相当于在备用节点接收不到心跳时,通过单独的线路发送关闭命令关闭主节点的电源。(3)做好脑裂的监测和报警(用zabbix等。),出现问题第一时间介入仲裁,减少损失。(4)启动磁盘锁。共享磁盘在服务器端被锁定。& ldquo裂脑& rdquo发生的时候,让对方彻底& ldquo不要带走& rdquo共享磁盘资源。但是使用锁盘会有一个很大的问题。如果占用共享磁盘的一方不主动& ldquo解锁& rdquo,对方永远得不到共享磁盘。在现实中,如果服务节点突然崩溃或崩溃,则无法执行解锁命令2。备份节点不能接管共享资源和应用程序服务。所以有人在HA & ldquo智力& rdquo锁定。即服务方只有在发现心跳完全断开(对面没有察觉)时才会启用磁盘锁,平时不会锁;(5)加入仲裁机制。比如设置了网关IP,当裂脑发生时,两个节点分别ping下面的网关IP,失败说明断点在本地终端,而不是只有& ldquo心跳& rdquo,也包括外部的& ldquo服务& rdquo的本地网络链接断了,即使启动(或继续)应用服务也没用。然后,放弃竞争,让能ping通网关IP的那端去服务。更安全的是,无法ping通网关IP的一方只需重新启动自己,以完全释放那些可能仍被占用的共享资源。

1.3 Keepalived monitors nginx防止裂脑(1)执行脚本检测

[root @ zdd 211-11 ~]# vim/etc/keepalive/check _ keepalive . sh #!/bin/bash NGINX _ SBIN = " which NGINX " NGINX _ PORT = 80 function check _ NGINX(){ NGINX _ STATUS = " nmap localhost -p $ { NGINX _ PORT } | grep " 80/TCP open " | awk ' { print $ 2 } ' " NGINX _ PROCESS = " PS -ef | grep NGINX | grep -v grep | WC -l " } check _ NGINX if[" $ NGINX _ STATUS "!= " open " -o $ NGINX _ PROCESS -lt 2]然后$ { NGINX _ SBIN } -s stop $ { NGINX _ SBIN } sleep 3 check _ NGINX if[" $ NGINX _ STATUS "!= " open " -o $ NGINX _ PROCESS -lt 2];systemctl stop keepalived fi fi[root @ localhost ~]# chmod+x/etc/keepalived/check _ port . sh(2)安装nmap。因为上面的脚本使用了这个工具,所以两台主机都需要安装它。

[root @ localhost ~]# yum install nmap -y(3)修改主配置

[root @ localhost ~]# vim/etc/keepalived/keepalived . conf!keepalivedglobal_defs的配置文件{ router _ id 192 . 168 . 73 . 136 } vrrp _ script chk _ nginx { script "/etc/keepalived/check _ nginx { port . sh 80 " interval 2 weight -20 } vrrp _ script chk _ nginx { script "/etc/keepalived/check _ keepalive . sh " # Path interval 2 #执行时间间隔weight -5 #计算权重值,脚本结果引起的优先级变化,如果检测失败(脚本返回非0将使用权重来降低优先级(在1-255之间)。升2 #检测两次就成功了。不修改优先级vrrp _ instance VI _ 1 { state master interface ens 33 virtual _ router _ id 251 priority 100 advert _ int 1 authentication { auth _ typepassauth _ pass 111111 } track _ script { chk _ nginx } virtual _ IP address { 192 . 168 . 73 . 100 } }(4)修改从机配置

!keepalivedglobal_defs的配置文件{ router _ id 192 . 168 . 73 . 135 } vrrp _ script chk _ nginx { script "/etc/keepalived/Check _ keepalive . sh " interval 2 #执行时间间隔权重-5 #计算权重值。如果脚本导致优先级发生变化,并且检测失败(脚本返回非0),则优先级为-5 fall 3 #。只有连续三次检测失败,才算真正失败。将使用权重来降低优先级(在1-255之间)。升2 #检测两次就成功了。不修改优先级vrrp _ instance VI _ 1 { state backup interface ens 33 virtual _ router _ id 251 priority 90 advert _ int 1 authe。验证{ auth _ type PASS auth _ PASS 11111111 } track _ script { chk _ nginx }虚拟IP地址{ 192.168.73.100 }}

2保持激活设置不会在故障恢复后重新捕获vip。通常,不允许vip在生产环境中来回漂移。当主机业务出现问题时,VIP漂移到备机,保证业务不中断。即使发生故障恢复,Keepalived也不会将VIP切到主机;

需要解决相应的问题,在确认主机环境没有问题后,在主机上手动重启keepalived服务,从而将vip切换回主机。为

为了满足这样的业务场景,您可以使用nopreempt参数修改主配置,而不抢占VIP,如下所示

[root @ localhost ~]# vim/etc/keepalived/keepalived . conf!keepalivedglobal_defs的配置文件{ router _ id 192 . 168 . 73 . 136 } vrrp _ script chk _ nginx { script "/etc/keepalived/check _ keepalive . sh " # Path interval 2 #执行时间间隔weight -5 #计算权重值,脚本结果引起的优先级变化,如果检测失败(脚本返回非0),优先级-5 fall 3 #连续三次检测失败,则确定为真故障。将使用权重来降低优先级(在1-255之间)。升2 #检测两次就成功了。无需修改优先级} vrrp _ instance VI _ 1 { state master interface ens 33 Virtual _ router _ id 251 priority 100 advert _ int 1 no prime # # authentic ation { auth _ typepassauth _ pass 1111111 } track _ script { chk _ nginx }无需抢夺VIP机制Virtual _ IP地址{192.168.73.100}}可自行重启keepalived,然后停止web,再启动web验证是否能自动漂移回主机

3组播地址冲突当多组keepalived服务器部署在同一个局域网中时,可能会出现高可用性接管的严重故障问题。因为keepalived的高可用功能是通过VRRP协议实现的,所以高可用对之间的通信默认是通过IP组播实现的。如果在同一个局域网中有多组keepalived服务器对,就会造成IP组播地址冲突,导致接管混乱。不同的Keepalived组将使用默认的224.0.0.18作为多播地址。此时的解决方案是在同组keepalived服务器的所有配置文件中指定一个唯一的组播地址,配置如下:

global _ defs { ` ` router _ idlvs _ 19 `` ` vrrp _ mcast _ group 4 224 . 0 . 0 . 19 `` `#指定组播地址}以上是keepalived对nginx的高可用构建的详细情况及其原理的详细说明。更多关于keepalived对nginx的构建,请关注主机频道zhujipindao中的其他相关文章。com!

未经允许不得转载:主机频道 » Keepalive构建高可用的nginx并详细讲解其原理(keepalive nginx)

评论 抢沙发

评论前必须登录!