千家信息网

Keepalived+Nginx怎么实现高可用

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,今天小编给大家分享一下Keepalived+Nginx怎么实现高可用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收
千家信息网最后更新 2025年02月05日Keepalived+Nginx怎么实现高可用

今天小编给大家分享一下Keepalived+Nginx怎么实现高可用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1、方案规划

vipip主机名nginx端口
192.168.1.210192.168.1.201nginx-0180
192.168.1.210192.168.1.202nginx-0280

两台服务器的vip为:192.168.1.210

分别在两台web服务器安装nginx和keepalived:
1、安装nginx,请参考《nginx源码安装》
2、安装keepalived,请参考《keepalived安装与配置》
3、防火墙添加arrp组播规则,或关闭防火墙

1> iptables

shell> vi /etc/sysconfig/iptables -a input -p vrrp -d 224.0.0.18/32 -j accept

2> firewall

firewall-cmd --direct --permanent --add-rule ipv4 filter input 0 --in-interface enp4s0 --destination 224.0.0.18 --protocol vrrp -j acceptfirewall-cmd --reload

4、关闭selinux

shell> vi /etc/sysconfig/selinux#修改:selinux=disabled#setenforce 0

2、抢占模式配置

编辑/etc/keepalived/keepalived.conf配置文件

1> master(192.168.1.201):

global_defs { router_id nginx_01 #标识本节点的名称,通常为hostname}## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。vrrp_script chk_nginx {  script "/etc/keepalived/nginx_check.sh"  interval 2 #每2秒检测一次nginx的运行状态  weight -20 #失败一次,将自己的优先级-20}vrrp_instance vi_1 { state master     # 状态,主节点为master,备份节点为backup interface enp0s3    # 绑定vip的网络接口,通过ifconfig查看自己的网络接口 virtual_router_id 51   # 虚拟路由的id号,两个节点设置必须一样,可选ip最后一段使用,相同的vrid为一个组,他将决定多播的mac地址 mcast_src_ip 192.168.1.201 # 本机ip地址 priority 100     # 节点优先级,值范围0~254,master要比backup高 advert_int 1     # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒 # 设置验证信息,两个节点必须一致 authentication {  auth_type pass  auth_pass 1111 } # 虚拟ip,两个节点设置必须一样。可以设置多个,一行写一个 virtual_ipaddress {  192.168.1.210 } track_script {  chk_nginx # nginx存活状态检测脚本 }}

2> backup(192.168.1.202)

global_defs { router_id nginx_02}vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight -20}vrrp_instance vi_1 { state backup interface enp0s3 virtual_router_id 51 mcast_src_ip 192.168.1.202 priority 90 advert_int 1 authentication {  auth_type pass  auth_pass 1111 } virtual_ipaddress {  192.168.1.210 } track_script {  chk_nginx }}

3> 创建nginx服务检测脚本

分别在主备服务器/etc/keepalived目录下创建nginx_check.sh脚本,并为其添加执行权限chmod +x /etc/keepalived/nginx_check.sh。用于keepalived定时检测nginx的服务状态,如果nginx停止了,会尝试重新启动nginx,如果启动失败,会将keepalived进程杀死,将vip漂移到备份机器上。

#!/bin/basha=`ps -c nginx --no-header | wc -l`if [ $a -eq 0 ];then /opt/nginx/sbin/nginx #尝试重新启动nginx sleep 2 #睡眠2秒 if [ `ps -c nginx --no-header | wc -l` -eq 0 ];then  killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点 fifi

4> 启动keepalived服务

shell> service keepalived startshell> ps -ef | grep keepalived[root@localhost ~]# ps -ef | grep keepalivedroot  865  1 0 23:36 ?  00:00:00 keepalived -droot  869 865 0 23:36 ?  00:00:00 keepalived -droot  870 865 0 23:36 ?  00:00:00 keepalived -d

如果看到如上进程信息,表示keepalived已经启动成功。下面用ip add命令查看vip绑定的情况,如下图所示:


从上图可以看出,vip地址192.168.1.210绑定在master(192.168.1.201)的enp0s3网卡上。

5> 测试故障转移

将master上的keepalived停止,查看vip是否会漂移到192.168.2.202上。

停止201的keepalived服务:

shell> service keepalived stopshell> ip addr


从上图可以看出,vip已经成功从201漂移到了202。此时再将201的keepalived服务启动后,由于201是master,所以会将202的vip抢占过来。

启动201的keepalived服务:

shell> service keepalived start

结果vip又回到了201,如下图所示:

3、非抢占模式

master从故障中恢复后,不会抢占备份节点的vip

1> master(192.168.1.201):

global_defs { router_id nginx_01 #标识本节点的名称,通常为hostname}vrrp_script chk_nginx {  script "/etc/keepalived/nginx_check.sh"  interval 2   weight -20}vrrp_instance vi_1 { state backup      interface enp0s3     virtual_router_id 51    mcast_src_ip 192.168.1.201  priority 100      advert_int 1      nopreempt authentication {  auth_type pass  auth_pass 1111 } virtual_ipaddress {  192.168.1.210 } track_script {  chk_nginx # nginx存活状态检测脚本 }}

2> backup(192.168.1.202)

global_defs { router_id nginx_02}vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight -20}vrrp_instance vi_1 { state backup interface enp0s3 virtual_router_id 51 mcast_src_ip 192.168.1.202 priority 90 advert_int 1 nopreempt authentication {  auth_type pass  auth_pass 1111 } virtual_ipaddress {  192.168.1.210 } track_script {  chk_nginx }}

和非抢占模式的配置相比,只改了两个地方:

1> 在vrrp_instance块下两个节点各增加了nopreempt指令,表示不争抢vip

2> 节点的state都为backup

两个keepalived节点都启动后,默认都是backup状态,双方在发送组播信息后,会根据优先级来选举一个master出来。由于两者都配置了nopreempt,所以master从故障中恢复后,不会抢占vip。这样会避免vip切换可能造成的服务延迟。

以上就是"Keepalived+Nginx怎么实现高可用"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

节点 服务 配置 脚本 两个 优先级 状态 检测 信息 备份 知识 篇文章 结果 地址 故障 服务器 模式 参考 成功 上图 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器怎么调主副显示器 广西广电网络技术部年度总结 服务器电源怎样手启动 网络技术应用的弊端 酒店一般用哪个数据库软件 服务器启不来 泰兴网络安全知识竞赛 徐州常见软件开发价格比较 网络安全扫码清粉 江苏项目软件开发预算 企业网络安全设计拓扑图 长春一汽大众软件开发 软件开发是本科生多还是大专多 青少年网络安全教育项目在哪里 国家网络安全研究院建设思路 idea公司提供的数据库软件 恩施好的软件开发价格 陕西有网络技术专业的学校 什么是语音服务器 兰州共享充电软件开发公司 网络安全实战演练的意义 小程序域名服务器费用 银行程序员服务器 加固服务器近期行情 数据库的自动标识列和索引 战术小队加入服务器闪退 三星镁光海力士服务器内存条 中国的文摘型数据库 新建数据库排序规则怎么选 网络安全会议记录班会
0