热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

keepalived监控nginx实现高可用

什么是高可用?一般是指2台机器启动着相同的业务系统,当有一台机器故障了,另外一台机器能快速自动接管,对于访问的用户是无感知的。keepalived是如何实现高可用的

什么是高可用?

      一般是指2台机器启动着相同的业务系统,当有一台机器故障了, 另外一台机器能快速自动接管, 对于访问的用户是无感知的。


keepalived是如何实现高可用的?

       keepalived 是基于VRRP协议实现的。VRRP虚拟路由冗余协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。


keepalived 工作模式

1、抢占模式:MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。
2、非抢占模式:MASTER恢复后不抢占,BACKUP升级为MASTER后的VIP。


keepalived 配置文件详解

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf global_defs { #全局定义router_id LVS_01 #每个keepalived名字标识 在同一个局域网中唯一即可
}vrrp_script chk_lb { #添加一个执行的脚本script "/server/scripts/chk_lb.sh" #指定要执行的脚本的路径interval 2 #指定脚本执行的间隔,单位秒weight 2 #调整优先级
}vrrp_instance VI_1 { #实例名字,在同一个配置文件中唯一. 在同一组主备之间名字一致state MASTER #指定该keepalived节点的初始状态interface eth0 #vrrp实例绑定的接口,用于发送VRRP包virtual_router_id 50 #指定VRRP实例ID,同一组 主备之间priority 150 #指定优先级,优先级高的将成为MASTERadvert_int 1 #心跳间隔,发vrrp包间隔时间authentication { #认证模式 推荐使用PASS简单密码认证即可auth_type PASSauth_pass 1111}virtual_ipaddress { #指定虚IP地址(VIP)10.0.0.3/24 dev eth0 label eth0:0}track_script { #执行上面添加的脚本chk_lb }
}

配置案例:keepalived 抢占式


1、准备2台服务器: 

lb01 10.0.0.5 负载均衡
lb02 10.0.0.6 负载均衡

2、这2台服务器已部署了nginx做负载均衡,后端对应有3台web服务器,上面跑着blog.oldboy.com网站


在这2台服务器部署keepalived监控nginx修改为高可用

#10.0.0.5 配置文件:[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {router_id LVS_01
}vrrp_script chk_lb {script "/server/scripts/chk_lb.sh"interval 2weight 2
}
vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 50priority 150advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.3/24 dev eth0 label eth0:0}track_script {chk_lb }
}

 

#10.0.0.6 配置文件:[root@lb02 ~]# vim /etc/keepalived/keepalived.conf
global_defs {router_id LVS_02 #名字02
}vrrp_script chk_lb {script "/server/scripts/chk_lb.sh"interval 2weight 2
}vrrp_instance VI_1 {state BACKUP #状态设置为backupinterface eth0virtual_router_id 50priority 100 #优先级比master低advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.3/24 dev eth0 label eth0:0}track_script {chk_lb}}

3、在2台服务器上分别创建脚本文件并添加文件为执行权限

[root@lb02 ~]# cat /server/scripts/chk_lb.sh
#!/bin/bash count=`ps -C nginx --no-heading |wc -l` #统计nginx进程数量
if [ $count -eq 0 ];then #进程数量为0,停掉keepalivedsystemctl stop keepalived
fi

4、2台服务器启动keepalived&nginx服务

[root@lb01 ~]# systemctl start keepalived
[root@lb01 ~]# systemctl start nginx#检查vip此时在lb01服务器上
[root@lb01 conf.d]# ip a |grep 10.0.0.3inet 10.0.0.3/24 scope global secondary eth0:0

5、测试:

1)、访问http://10.0.0.3/ ,抓包分析可以看出,其实访问的是10.0.0.5服务器
2)、把lb01服务器 nginx进程停掉,触发脚本keepalied服务自动停掉。证明此时lb01 nginx服务有故障,这时VIP地址自动漂流到lb02服务器上
3)、当lb01服务器nginx进程、keepalied进程手动启动后,VIP地址又自动漂流到lb01服务器上。意思就是lb01把vip抢占过来的

如何配置非抢占式模式?


1、修改10.0.0.5&10.0.0.6 keepalived配置文件

1)、两个节点的state 初始状态必须设置为BACKUP(官方建议)
2)、两个节点都在vrrp_instance中添加nopreempt参数
3)、其中一个节点的优先级必须要高于另外一个节点的优先级。 例如:
vrrp_instance VI_1 {state BACKUPnopreempt
}

2、重启服务

systemctl restart nginx
systemctl restart keepalived

3、测试:

1、把lb01服务器 nginx进程停掉,触发脚本keepalied服务自动停掉,VIP地址自动漂流到lb02服务器上
2、再将lb01服务器nginx进程、keepalied进程手动启动后,VIP地址并没有漂流到lb01。
这就是非抢占式

keepalived 脑裂


1、什么是脑裂?

两台keepalived高可用服务器在无法检测到对方的心跳消息,相互失去了联系,都以为是对方出了故障,各自都争抢取得资源及服务的所有权,而此时的两台高可用服务器又都还活着。


2、脑裂的原因?

1)、服务器网线松动等网络故障
2)、服务器硬件故障发生损坏现象而崩溃
3)、主备都开启firewalld防火墙


3、如何避免脑裂?

         最佳方法:设置仲裁机制。例如设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。


4、案例:利用脚本判断检测,在备服务器lb02上执行

1)、检查本机是否存在VIP
2)、本机是否能够ping通网关。2个条件同时满足发生了脑裂

vip=10.0.0.3
gateway=10.0.0.2
while true
dovip_cnt=`ip a |grep  $vip -w|wc -l`#使用ping检查指定ip是否可以访问arping eth0 -c 1 $master_ip &>/dev/nullif [ $? -eq 0  -a $vip_cnt -eq 1 ];thenecho 发生脑裂elseecho 一切正常fisleep 3
done

 

 

 

 


推荐阅读
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
author-avatar
美美2502909961
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有