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.rhkb.cn/news/232353.html

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

相关文章

Vue新手村(一)

目录 1、Vue简介——Vue的特点 2、Vue的第一个页面 3.Vue的简单使用介绍 3.1、{{ }}的使用 3.2、v-text和v-html 3.2.1、v-text和{{ }}的区别 3.2.2、v-html和v-text的区别 3.3、v-on【事件绑定】 3.3.1、绑定事件的语法 3.3.2、语法简化 3.3.3、传参 3.4、v-show和…

Elasticsearch基本操作之索引操作

本文说下Elasticsearch基本操作之索引操作 文章目录 概述创建索引创建索引示例重复创建索引示例 查看索引查看所有索引查看单个索引 删除索引删除索引 概述 由于是使用命令来操作Elasticsearch,可以使用kibana,postman和apifox等工具 我使用了apifox来执…

Access数据库C#读写验证

1、数据库简介 Access数据库是一个相当古老的文件型数据库,主打一个简单方便,没有复杂的安装过程,没有庞大的后端管理,整个数据库就是一个文件。可以像普通文件一样复制和修改,可以同时读写。 在小型系统中&#xff0c…

Java序列化篇----第一篇

系列文章目录 文章目录 系列文章目录前言一、什么是java序列化,如何实现java序列化?二、保存(持久化)对象及其状态到内存或者磁盘三、序列化对象以字节数组保持-静态成员不保存四、序列化用户远程对象传输前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,…

探索生成式AI:自动化、问题解决与创新力

目录 自动化和效率:生成式AI的颠覆力量 解谜大师生成式AI:如何理解和解决问题 创新与创造力的启迪:生成式AI的无限潜能 自动化和效率:生成式AI的颠覆力量 1. 神奇的代码生成器:生成式AI可以帮助开发人员像魔术一样快…

外包干了3个多月,技术退步明显。。。。。

先说一下自己的情况,本科生生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测…

Pytest的测试报告——Allure

一、html-report测试报告 html-report测试报告。是pytest下基本的测试报告。要使用pytest-html测试报告,就要确保python版本在3.6及以上即可。本身pytest所提供的测试结果汇总,是基于控制台的文本输出形式。 pytest-html是基于HTML格式实现的测试报告的…

手机视频监控客户端APP如何实现跨安卓、苹果和windows平台,并满足不同人的使用习惯

目 录 一、手机视频监控客户端的应用和发展 二、手机视频监控客户端存在的问题 三、HTML5视频监控客户端在手机上实现的方案 (一)HTML5及其优点 (二)HTML5在手机上实现视频应用功能的优势 四、手机HTML5…

机器人相关知识

机器人学(Robotics) 一些基础概念 位姿 位姿位置姿态 位姿的表示 刚体 刚性物体是一组粒子的集合,其中任意两个粒子之间的距离保持固定,不受物体运动或施加在物体上的力的影响。 “完全不可变形”的物体就是刚体。 刚体位置 刚性连杆 …

2024年阿里云优惠活动清单_优惠代金券领取大全

阿里云服务器优惠活动大全包括:云服务器新人特惠、云小站、阿里云免费中心、学生主机优惠、云服务器精选特惠、阿里云领券中心等,活动上阿里云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、轻量应用服务器2核2G3M带宽轻量服务器一年61元,…

使用Go语言编写高效的HTTP服务器

随着互联网的快速发展,HTTP服务器在Web开发中扮演着越来越重要的角色。而Go语言作为一种高效、并发性强的编程语言,为编写高性能的HTTP服务器提供了强大的支持。本文将探讨如何使用Go语言编写高效的HTTP服务器。 首先,我们需要了解Go语言的H…

基于FFmpeg的短视频编辑工具Cut

前言 最近在学习FFmpeg和音视频的相关知识,为了加强对FFmpeg的认识和了解,于是撸了一个短视频编辑软件Cut。 效果图先行: 技术点 启动页优化 但启动app的时候会有一个短暂的黑屏或者白屏。为什么呢? 是因为在App启动时&#x…

word2019保存后的图片变模糊了怎么办?Word 2019 默认保存后压缩变模糊的问题,解决方案

Word 2019 默认保存后压缩变模糊的问题,解决方案 1,新建word 文件,插入一张原始图片,1080*1920,如下图: 2,保存时,word 2019默认选项,导致word 保存后,图片…

Reids原理及简单命令

目录 1.关系数据库与非关系型数据库 关系型数据库 非关系型数据库 关系型数据库和非关系型数据库区别 数据存储方式不同 扩展方式不同 对事务性的支持不同 总结: 2. Redis简介 什么是redis reids优点 reids使用场景: reids快的原因 Redis数…

Linux/Unix/国产化操作系统常用命令(二)

目录 后CentOS时代国产化操作系统国产化操作系统有哪些常用Linux命令关于Linux的LOGO 后CentOS时代 在CentOS 8发布后,就有了一些变化和趋势,可以说是进入了"后CentOS时代"。这个时代主要表现在以下几个方面: CentOS Stream的引入…

阿里云迁移AWS视频点播技术攻坚

文章目录 🐷 背景🦥 简述🐥 Aws服务🦜 AWS CloudFormation🐞 问题🐉 落地方案🦉 Aws vs Aliyun🍄 避坑指南 🐷 背景 由于AWS整体成本略低于阿里云,公司决定将…

【软件测试】学习笔记-测试覆盖率

测试覆盖率通常被用来衡量测试的充分性和完整性,从广义的角度来讲,测试覆盖率主要分为两大类,一类是面向项目的需求覆盖率,另一类是更偏向技术的代码覆盖率。 需求覆盖率 需求覆盖率是指测试对需求的覆盖程度,通常的做…

YOLOv5训练损失、精度、mAP绘图功能 | 支持多结果对比,多结果绘在一个图片(消融实验、科研必备)

一、本文介绍 本文给大家带来的是YOLOv5系列的绘图功能,我将向大家介绍YOLO系列的绘图功能。我们在进行实验时,经常需要比较多个结果,针对这一问题,我写了点代码来解决这个问题,它可以根据训练结果绘制损失(loss)和mAP(平均精度均值)的对比图。这个工具不仅支持多个文件…

本地引入Element UI后导致图标显示异常

引入方式 npm 安装 推荐使用 npm 的方式安装&#xff0c;它能更好地和 webpack 打包工具配合使用。 npm i element-ui -SCDN 目前可以通过 unpkg.com/element-ui 获取到最新版本的资源&#xff0c;在页面上引入 js 和 css 文件即可开始使用。 <!-- 引入样式 --> <…

脆弱的SSL加密算法漏洞原理以及修复方法

漏洞名称&#xff1a;弱加密算法、脆弱的加密算法、脆弱的SSL加密算法、openssl的FREAK Attack漏洞 漏洞描述&#xff1a;脆弱的SSL加密算法&#xff0c;是一种常见的漏洞&#xff0c;且至今仍有大量软件支持低强度的加密协议&#xff0c;包括部分版本的openssl。其实&#xf…