Nginx快速入门:Nginx实现高可用|结合keepalived实现主备节点(九)

0. 引言

在生产中我们要尽可能避免单点故障,nginx也不例外,因此搭建主备节点必不可少,今天我们来学习下如何利用keepalived实现主备

1. keepalived简介

keepalived 是一个LINUX系统中开源的负载均衡和故障转移软件,它主要用于高可用性(HA)环境中的服务监控和冗余,其核心含义就是“保活”。

keepalived 最初是为 Linux Virtual Server(LVS)设计的,但随着时间的推移,它已经发展成为一个更为通用的工具,可以用于各种类型的服务监控和负载均衡任务。

keepalived 的工作原理是通过所谓的“虚拟路由冗余协议”(VRRP)来实现的。在 VRRP 中,多个服务实例被配置为提供相同的虚拟 IP 地址(VIP),但只有一个实例在任何给定时间点是活跃的(即它是“主”实例)。如果主实例失败,其他实例可以接管 VIP,成为新的主实例,从而实现故障转移。

keepalived 提供了几种不同的冗余模式,包括:

  • 主备模式(Master-Slave):

在这种模式下,只有一个主实例负责处理请求,而其他备用实例处于待命状态。如果主实例失败,最优先的备用实例将接管成为新的主实例。

  • 负载均衡模式(Load Balancing):

在这种模式下,所有的实例都参与处理请求,keepalived 负责将客户端请求分发到不同的实例。这可以通过各种算法来实现,如轮询(Round Robin)、最少连接(Least Connections)等。

  • 主备负载均衡模式(Master-Slave Load Balancing):

这种模式结合了主备模式和负载均衡模式的特点,允许在主实例失败时进行故障转移,同时所有实例都参与处理请求。

keepalived 还提供了一些高级功能,如健康检查(用于监控服务实例的健康状态)、故障恢复(用于在服务实例失败后自动重启它们)等。它可以通过简单的配置文件进行配置,并且可以通过命令行工具进行管理和监控。

如下为nginx搭建高可用架构的流程示意图
在这里插入图片描述
keepalived实现主备切换的原理
keepalived主要有3个核心模块:core、check和VRRP。
Core模块负责启动和维护Keepalived的主进程,以及加载解析全局配置文件。
Check模块负责健康检查(Health Checking),用于监控网络服务(如HTTP、MySQL等)的状态。
VRRP模块负责实现VRRP协议,管理主备之间的状态和切换。

而VRRP协议就是实现主备切换的关键,VRRP可以将两台或多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过虚拟IP(一个或多个)对外提供服务,当其中一个设备故障,就会将路由切换到另一个设备上,但对外提供的虚拟ip不变,从而保证服务一直可用。

2. keepalived安装与配置

0、首先准备两台服务器,安装nginx

yum install nginx -y

1、两台服务上都安装keepalived

yum install keepalived -y

2、查看服务器网卡名

ifconfig -a

在这里插入图片描述
3、修改主节点keeplived配置文件

vim /etc/keepalived/keepalived.conf

配置内容

global_defs {notification_email { # 发生故障时的邮件通知邮箱acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from xxx@qq.com # 邮件发送邮箱smtp_server smtp.qq.com # 邮箱发送服务器,这个配置成你公司的,或者使用其他第三方的,可以配置第三方的,比如腾讯的:smtp.qq.comsmtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}
# 配置心跳检测脚本
vrrp_script nginx_check {script "/etc/keepalived/nginx_check.sh"interval 1 #每1秒钟检测一次脚本
}
vrrp_instance VI_1 {state MASTERinterface ens160 # 网卡名virtual_router_id 51 # 主备服务器的virtual_router_id要相同priority 100 # 优先级,一般主节点更大,备节点更小advert_int 1 # 每隔1s发送心跳检测authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.244.100 # 虚拟ip, 可以配置多个,与你服务局域网的网段保持一致}track_script {nginx_check}
}

3、修改从节点keepalived配置文件,注意修改对应的网卡名

global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from xxx@qq.comsmtp_server smtp.qq.comsmtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}
vrrp_script nginx_check {script "/etc/keepalived/nginx_check.sh"interval 1 #每1秒钟检测一次脚本
}
vrrp_instance VI_1 {state BACKUPinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.244.100 # 与你服务局域网的网段保持一致}track_script {nginx_check} 
}

4、书写上述脚本,存放到两个服务器上

vim /etc/keepalived/nginx_check.sh

脚本内容

#!/bin/bash
result=`pidof nginx`
if [ ! -z "${result}" ];
thenexit 0
elseexit 1
fi

5、给脚本赋权

chmod +x /etc/keepalived/nginx_check.sh

6、如果没有安装ipvsadm工具,需要先安装

yum install ipvsadm -y
# 启动ipvsadm
ipvsadm

在这里插入图片描述

7、主备节点上都启动keepalived

# 启动
systemctl start keepalived
# 重启
systemctl restart keepalived
# 停止
systemctl stop keepalived

8、如果发现访问不了虚拟ip,可以检查下keepalived启动日志,根据启动日志报错来进行排查

tail -500f /var/log/messages

正常启动日志如下:
在这里插入图片描述
备用节点启动日志
在这里插入图片描述

9、用虚拟ip访问测试,发现能够正常转发到nginx则设置成功
在这里插入图片描述
10、我们将主节点nginx关闭,观察看虚拟ip会不会漂移到备用节点

nginx -s stop

11、再次访问nginx,可以正常访问,说明已经转移到备用节点
在这里插入图片描述
通过ip a指令,也可以看到备用节点虚拟ip,主节点因为宕机已经没有虚拟ip了
在这里插入图片描述

3. 常见报错

1、Cant find interface eth0 for vrrp_instance VI_1 !!!
在这里插入图片描述
解决:

一般是由于网卡名错误导致的,使用ifconfig -a 查询网卡名,然后修改keepalived.conf中的interface参数即可
在这里插入图片描述

2、IPVS: Can’t initialize ipvs: Protocol not available
在这里插入图片描述
解决:

这是因为没有安装ipvsadm工具导致的,安装即可

yum install ipvsadm -y
# 启动ipvsadm
ipvsadm

在这里插入图片描述

4. 总结

综上,我们就实现了nginx主备节点的搭建,通过keepalived组件实现了健康检测,为转发服务实现高可用保驾护航

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/327970.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt pro文件

1. 项目通常结构 2.pri文件 pri文件可定义通用的宏,例如创建一个COMMON.pri文件内容为 COMMON_PATH D:\MyData 然后其它pri或者pro文件如APPTemplate.pro文件中通过添加include(Common.pri) ,QtCreator就会自动在项目结构树里面创建对应的节点 3.变量…

thinkphp6入门(15)-- 模型动态构建查询条件

背景 我使用thinkphp6的模型写数据库查询,有多个where条件,但是不确定是否需要添加某个where条件,怎么才能动态得生成查询 链式查询 在ThinkPHP 6中,可以使用链式查询方法来动态地构建查询条件。可以根据参数的值来决定是否添加…

[java小贴士]关于double类型进行运算时有误差的相等判断的替代方式

double类型在进行运算时会产生误差, 在不能进行相等判断时可以用绝对值在小于某个范围来替代相等; 如果没有进行运算, 是查询得到或者直接赋值则可以正常进行判断相等

docker拉取镜像提示 remote trust data does not exist for xxxxxx

1、How can I be sure that I am pulling a trusted image from docker 2、docker: you are not authorized to perform this operation: server returned 401. 以上两个问题可以试试以下解决办法 DOCKER_CONTENT_TRUSTfalse 本人是使用jenkins部署自己的项目到docker容器出现…

腾讯云取消免费10G CDN流量包:免费CDN时代结束

关注卢松松,会经常给你分享一些我的经验和观点。 免费送了7-8年的腾讯云10G免费流量包,从2024年开始,停止赠送了!自此,国内绝大多数互联网大厂的CDN都开收费了! 大概从2016年开始,腾讯云为了抢夺CDN客户&#xff0…

【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第21套

少儿编程 蓝桥杯青少组科技素养题真题及解析第21套 1、小李说:“冰激凌太凉了。”小王说:“冰激凌可以由牛奶制作。”小李说的是()小王说的是() A、事实 事实 B、事实 观点 C、观点 事实 D、观点 观点 答案:C 考点分析:主要考查小朋友们的对事实和观点的认识:小李…

企业微信开发:自建应用:接收消息(企业内部服务器)/回调配置

概述 在企业微信的自建应用中,用户触发了某些行为(发送消息、进行菜单操作或者外部联系人变更等),要发送相关信息给企业内部服务器。 备注:接收消息 和 回调,在本文中指代相同的行为,即企业微信…

计算机网络-VLAN原理与配置

之前我们学习了以太网的基础知识,了解了网络交换设备的发展,交换机的工作原理,广播域和冲突域。 一、概述 还简单了解了以太网的CSMA/CD通讯机制,以太网是建立在CSMA/CD (Carrier Sense Multiple Access/Collision Detection&…

基于Python新闻推荐系统 大数据毕业设计 爬虫+可视化+推荐算法 vue框架+Django框架(附源码)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

Halcon计算一个区域的最大内接圆 inner_circle

Halcon计算一个区域的最大内接圆 该算子用于计算一个区域的最大内接圆,其原型如下: inner_circle(Regions : :: Row, Column, Radius)参数1:Regions 表示输入的区域。 参数2和3:Row、Column为输出参数,表示最大内接圆…

大数据Doris(五十一):Colocation Join介绍

文章目录 Colocation Join介绍 一、原理 二、使用方式 1、建表 2、删表

玩转Mysql 四(MySQL逻辑架构与数据引擎)

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。 一、MySQL逻辑架构 1、从Oracle收购MySQL后,MySQL逻辑架构受Oracle影响,MySQL8版本中逻辑架构受Oracle的影响逐步完善查询缓存,O…