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.mzph.cn/news/602651.shtml

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

相关文章

2024年阿里云、腾讯云、华为云、LightNode、硅云服务器如何选?怎么买最划算?[最新价格表]

很多小伙伴都有一颗上云的心,包括我自己 有事没事的折腾一下自己的小破站,也挺有意思的! 那么,云服务器哪家好?优惠力度哪家大?活动入口哪里进?云服务器如何配置?如何选型&#xf…

K8S集群部署解决工作节点couldn‘t get current server API group list问题

最近在自己电脑上装了VMWare Player,在上面装了两个Ubuntu虚拟机,为了方便学习云原生技术,决定在上面装一个2个节点(一个控制面,一个工作节点)的K8S集群。 参考这篇文章: Ubuntu 22.04 搭建K8…

kubectl的插件安装工具krew

最近得知一个kubectl插件安装工具,叫做krew。 官网地址是:Krew – kubectl plugin manager 安装krew 按照官网的做法,一直安装失败,于是拆解步骤,一步一步下载离线安装。 1、下载krew.yaml 地址:https:…

Proteus 各版本安装指南

Proteus下载链接 https://pan.baidu.com/s/1vHgg8jK9KSHdxSU9SDy4vQ?pwd0531 1.鼠标右击【Proteus8.15(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到Proteus8.15(64bit) 】。 2.打开解压后的文件夹&#…

适用于生物行业的生信云平台

随着基因检测技术的不断发展,生物信息云平台在基因检测行业的应用越来越广泛。生物信息云平台是一种基于云计算的技术,可以将基因检测数据存储在云端,并通过数据分析、挖掘等技术手段,对基因数据进行处理、分析和解读。 这种技术的…

Linux安装nginx(带http ssl)

nginx安装 nginx文件 以及gcc pcre zlib openssl 网盘下载 1.安装gcc yum -y install gcc gcc-c 2.安装pcre rpm -ivh pcre-8.32-17.el7.x86_64.rpm --force --nodeps rpm -ivh pcre-devel-8.32-17.el7.x86_64.rpm --force --nodeps 3.安装zlib tar -zxvf zlib-1.2.11.ta…

metaSPAdes,megahit,IDBA-UB:宏基因组装软件安装与使用

metaSPAdes,megahit,IDBA-UB是目前比较主流的宏基因组组装软件 metaSPAdes安装 GitHub - ablab/spades: SPAdes Genome Assembler #3.15.5的预编译版貌似有问题,使用源码安装试试 wget http://cab.spbu.ru/files/release3.15.5/SPAdes-3.15.5.tar.gz tar -xzf SP…

C++ 给父类带参构造函数的赋值

在类的使用中,默认的构造函数不带任何参数,但是也会因为需要而使用带参数的构造函数。 在带参的构造函数中,是如何继承的呢,这里我们通过使用基类,子类,孙类的两重继承来观察,如何给带参构造函数…

完美版视频网站模板 – 苹果CMS v10大橙子vfed主题

源码下载: https://download.csdn.net/download/m0_66047725/88700504 这次提供的大橙子 vfed 模板 已经完美,只去除了授权验证和正版主题神秘后门,不影响任何功能体验性。主题优化:全站响应式自带主题设置面板自带联盟资源库大全…

【C/C++】开源串口库 CSerialPort 应用

文章目录 1、简述2、效果图2.1、命令行(不带GUI)2.2、GUI(这里用的Qt) 3、串口硬件知识普及4、核心实现4.1、Qt的pro文件4.2、main文件4.3、SSerialPort类4.3.1、头文件4.3.2、源文件 4.4、Linux下的CMakeLists.txt 1、简述 本文…

设计模式之单例模式的懒饿汉

懒汉式 说白了就是你不叫我我不动,你叫我我才动。 类初始化模式,也叫延迟占位模式。在单例类的内部由一个私有静态内部类来持有这个单例类的实例。因为在 JVM 中,对类的加载和类初始化,由虚拟机保证线程安全。 public class Singl…

cesium键盘控制模型

效果: 由于对添加模型和更新位置api进行二次了封装,下面提供思路 1.添加模型 const person reactive({modelTimer: null,position: {lon: 104.07274,lat: 30.57899,alt: 1200,heading: 0,pitch: 0,roll: 0,}, }); window.swpcesium.addEntity.addMo…

SSH 无密登录配置

1)配置 ssh (1)基本语法 ssh 另一台电脑的 IP 地址 (2)ssh 连接时出现 Host key verification failed 的解决方法 [yuxuan@yuxuan102 ~]$ ssh yuxuan103 ➢ 如果出现如下内容 Are you sure you want to continue connecting (yes/no)? ➢ 输入 yes,并回车 (3)退回到 …

简单 Web Server 程序的设计与实现 (2024)

1.题目描述 Web 服务是 Internet 最方便与受用户欢迎的服务类型,它的影响力也远远超出了专业技术范畴, 已广泛应用于电子商务、远程教育、远程医疗与信息服务等领域,并且有继续扩大的趋势。目前很多 的 Internet 应用都是基于 Web 技术的&…

Linux驱动学习—中断

1、中断基础概念 1.1 什么是中断 CPU在正常运行期间&#xff0c;由外部或者内部引起的时间&#xff0c;让CPU停下当前正在运行的程序&#xff0c;转而去执行触发他的中断所对应的程序&#xff0c;这就是中断。 响应中断的过程&#xff1a; <1>中断请求 <2>中断…

三、C语言中的分支与循环—for循环 (6)

本章分支结构的学习内容如下&#xff1a; 三、C语言中的分支与循环—if语句 (1) 三、C语言中的分支与循环—关系操作符 (2) 三、C语言中的分支与循环—条件操作符 与逻辑操作符(3) 三、C语言中的分支与循环—switch语句&#xff08;4&#xff09;分支结构 完 本章循环结构的…

JavaScript基本语法

文章目录 1. JavaScript 是什么1.1 JavaScript 和 HTML 和 CSS 之间的关系1.2 JavaScript 运行过程1.3 JavaScript 的组成 2. JavaScript 的书写形式2.1 行内式2.2 内嵌式2.3 外部式 3. 变量的使用3.1 静态变量和动态变量 4. 基本数据类型4.1 undefined 未定义数据类型4.2 null…

2.3_6 用信号量实现进程互斥、同步、前驱关系

2.3_6 用信号量实现进程互斥、同步、前驱关系 #mermaid-svg-fj0wp6tJGfadcT8h {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fj0wp6tJGfadcT8h .error-icon{fill:#552222;}#mermaid-svg-fj0wp6tJGfadcT8h .error-t…

ENVI 各版本安装指南

ENVI下载链接 https://pan.baidu.com/s/1APpjHHSsrXMaCcJUQGmFBA?pwd0531 1.鼠标右击【ENVI 5.6(64bit&#xff09;】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 ENVI 5.6(64bit&#xff09;】。 2.打开解压后的文件夹&#xff0c…

mysql基础-数据操作之增删改

目录 1.新增数据 1.1单条数据新增 1.2多条数据新增 1.3查询数据新增 2.更新 2.1单值更新 2.2多值更新 2.3批量更新 2.3.1 批量-单条件更新 2.3.2批量-多条件更新 2.4 插入或更新 2.5 联表更新 3.删除 本次分享一下数据库的DML操作语言。 操作表的数据结构&#xf…