nginx高可用集群搭建

本文介绍nginx高可用集群的搭建。利用keepalived实时检查nginx进程是否存活、keepalived的虚拟ip技术,达到故障转移的目的。终端用户通过访问虚拟ip,感知不到实际发生的故障。架构图如下:
在这里插入图片描述

0、环境

  • Ubuntu:22.04.2 lts
  • nginx: 1.18.0
  • keepalived:2.2.4
  • 虚拟机:vmware

1、规划

分别新建两个虚拟机,虚拟机的ip和端口规划如下:

序号ipport虚拟ip默认
A192.169.99.10080192.168.99.180
B1921.68.99.12080192.168.99.180

注意:虚拟ip就是我们后期统一的访问地址。

2、结点A安装nginx

sudo apt install nginx

等待安装完成,再启动:

sudo systemctl start nginx

虚拟机验证是否安装成功:

curl http://localhost/

宿主机浏览器验证,http://192.168.99.100/,效果如下:
在这里插入图片描述

宿主机如果访问成功,说明虚拟机1上的nginx搭建成功。

2.1、修改nginx首页

为了便于测试,我们修改一下首页。打开nginx.conf(位于/etc/nginx),找到server 80的配置段,如果找不到80的配置段,仔细看看include配置。通过一系列的跟踪,我这里nginx首页的位置在: /var/www/html/index.nginx-debian.html
打开这个文件,最后加一句,能让我们看出区别就行。
在这里插入图片描述

3、结点B安装nginx

结点B安装nginx和A相同,此处不在赘述。记得安装完成后,通过宿主机浏览器访问一下对应的地址,有成功提示,则说明安装成功。

4、结点A安装keepalived

sudo apt install keepalived

等待安装完成。

4.1、配置

cd /etc/keepalived
# 看一下有没有keepalived.conf文件,没有就新建。sudo vim keepalived.conf 

keepalived.conf文件配置如下:

# Configuration File for keepalived
global_defs {router_id keepalived_01  # 名字自己起
}vrrp_script chk_nginx {# 具体的脚本,后面有具体内容,功能就是检查nginx进程是否存在,不存在就启动script "/etc/keepalived/nginx_check.sh"interval 2 # 2s执行一次 weight -20 # 失败一次 则优先级 -20
}vrrp_instance VI_1 {state MASTER     # 主机interface ens33  # 网卡名字,不知道就ifconfig看一下virtual_router_id 41  # 保证唯一,并且与备机一致priority 100advert_int 1authentication {auth_type PASS   # 验证类型, 与备机一致auth_pass 1234   # 密码, 与备机一致}virtual_ipaddress {192.168.99.180   # 虚拟地址,主、备机入口,必须一致}# 指定脚本track_script {chk_nginx}

nginx_check.sh的脚本代码:

#!/bin/bash
status=$(ps -C nginx --no-heading|wc -l)
if [ "${status}" = "0" ]; then# 尝试启动一次systemctl start nginx# 再次检查ngixn 进程status2=$(ps -C nginx --no-heading|wc -l)if [ "${status2}" = "0"  ]; then# 关闭 keepalived systemctl stop keepalivedfi
fi

4.2、启动keepalived

sudo systemctl start keepalived

5、结点B安装keepalived

结点B和A安装和配置完全一样,此处不再赘述。

6、测试

访问虚拟ip,http://localhost:80/, 效果如下:
在这里插入图片描述
关闭A机的nginx,刷新浏览器,发现效果如上图。原因是,我们的脚本里检查nginx进程是否存在,不存在就重启。我们直接关闭A主机,再次刷新浏览器,效果如下:
在这里插入图片描述
达到了我们故障转移的目的。
OK,就这样了,有问题给我留言,我们共同进步。

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

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

相关文章

Cause: java.sql.SQLException: sql injection violation, comment not allow异常问题处理

1、安全策略检验sql注入,禁止sql中的注释信息存在,删除注释信息 2、在数据源配置时,加上了 Druid 的 wall 过滤器。而它默认的拦截策略是,不允许 SQL 中带有备注,可修改Druid过滤器配置,去除wall。 druid…

【开源】创建自动签到系统—QD框架

1. 介绍 QD是一个 基于 HAR 编辑器和 Tornado 服务端的 HTTP 定时任务自动执行 Web 框架。 主要通过抓包获取到HAR来制作任务模板,从而实现异步响应和发起HTTP请求 2. 需要环境 2.1 硬件需求 CPU:至少1核 内存:推荐 ≥ 1G 硬盘:推…

【数据结构Ⅰ复习题】

如有错误欢迎指正,题目根据教材----------严蔚敏数据结构(c语言版 第2版)人民邮电电子版 数据结构Ⅰ复习题 一、填空题1.算法应该具备的5个重要特性有___有穷性___、确定性、可行性、输入和输出。2.非空单链表L中*p是头…

python爬虫--小白篇【selenium自动爬取文件】

一、问题描述 在学习或工作中需要爬取文件资源时,由于文件数量太多,手动单个下载文件效率低,操作麻烦,采用selenium框架自动爬取文件数据是不二选择。如需要爬取下面网站中包含的全部pdf文件,并将其转为Markdown格式。…

Edge Scdn的应用场景有哪些?

酷盾安全Edge Scdn 具备强大的安全防护能力,通过多层防御机制,如防火墙、DDoS 攻击防护、入侵检测和防御、数据加密等,有效抵御各种网络攻击,包括 DDoS 攻击、CC 攻击、SQL 注入攻击、XSS 跨站脚本攻击等,保障网站和应…

TCPDump参数详解及示例

TCPDump参数详解及示例 TCPDump参数详解TCPDump -G的示例TCPDump -i any -s 2048 -G 600 -p udp -Z root -n -X -tt -w %Y_%m%d_%H%M_%S.pcap &的含义TCPDump是一款强大的网络数据包截获分析工具,可以将网络中传送的数据包的完全截获下来提供分析。它支持针对网络层、协议…

mysql8 从C++源码角度看 客户端发送的sql信息 mysql服务端从网络读取到buff缓存中

MySQL 8 版本中的客户端-服务器通信相关,特别是在接收和解析网络请求的数据包时。以下是对代码各个部分的详细解释,帮助您更好地理解这些代码的作用。 代码概述 这段代码主要负责从网络读取数据包,它包含了多个函数来处理网络数据的读取、缓…

Vue2: table加载树形数据的踩坑记录

table中需要加载树形数据,如图: 官网给了两个例子,且每个例子中的tree-props都是这么写的: :tree-props="{children: children, hasChildren: hasChildren}" 给我一种错觉,以为数据结构中要同时指定children和hasChildren字段,然而,在非懒加载模式下,数据结…

SpringCloudAlibaba实战入门之Sentinel服务降级和服务熔断(十五)

一、Sentinel概述 1、Sentinel是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 一句话概括:sentinel即Hystrix的替代品,官网: https://sentinelguard.io/zh…

LeetCode:731. 我的日程安排表 II(差分 Java)

目录 731. 我的日程安排表 II 题目描述: 实现代码与解析: 差分 原理思路: 731. 我的日程安排表 II 题目描述: 实现一个程序来存放你的日程安排。如果要添加的时间内不会导致三重预订时,则可以存储这个新的日程安…

Java 操作 PDF:从零开始创建功能丰富的PDF文档

Java 操作 PDF:从零开始创建功能丰富的PDF文档 引言环境准备依赖引入 创建PDF文档一键生成空白PDF添加表单字段(选项)添加电子签名添加公章图像 结论 引言 随着数字化办公的普及,PDF格式因其跨平台兼容性和安全性而被广泛应用于各…

DDoS攻击防御方案大全

1. 引言 随着互联网的迅猛发展,DDoS(分布式拒绝服务)攻击成为了网络安全领域中最常见且危害严重的攻击方式之一。DDoS攻击通过向目标网络或服务发送大量流量,导致服务器过载,最终使其无法响应合法用户的请求。本文将深…

问题清除指南|关于num_classes与 BCELoss、BCEWithLogitsLoss 和 CrossEntropyLoss 的关系

前言:关于「 num_classes 1 」引发的探究。 2024年尾声,学弟问到一个问题:在研究工作 CNNDetection 的github开源代码 networks/trainer.py 文件的 line 27 self.model resnet50(num_classes1) 中,变量 num_classes 的值为1&…

grouped.get_group((‘B‘, ‘A‘))选择分组

1. df.groupby([team, df.name.str[0]]) df.groupby([team, df.name.str[0]]) 这一部分代码表示对 DataFrame df 按照 两个条件 进行分组: 按照 team 列(即团队)。按照 name 列的 首字母(df.name.str[0])。 df.name.s…

poetry更换国内pip源

poetry 默认使用官方镜像源下载,特别慢并且还报错,在国内每一次poetry配环境请都添加一次环境。 方法一 poetry source add --priorityprimary mirrors https://pypi.tuna.tsinghua.edu.cn/simple/方法二 修改 pyproject.toml 文件 # pyproject.toml…

啥是大模型

介绍完了chatGPT的生成原理, 那么我们继续介绍介绍大模型。 大模型的缩写是LLM,全称是Large Language Model, 所以这个大模型也可以被称作为大语言模型 那么问题来了,为啥有了大模型呢,难道之前都是小模型吗?确实,大模…

SQL字符串截取函数——Left()、Right()、Substring()用法详解

SQL字符串截取函数——Left()、Right()、Substring()用法详解 1. LEFT() 函数:从字符串的左侧提取指定长度的子字符串。 LEFT(string, length)string:要操作的字符串。length&#x…

C# 服务调用RFC函数获取物料信息,并输出生成Excel文件

这个例子是C#服务调用RFC函数,获取物料的信息,并生成Excel文件 上接文章:C#服务 文章目录 创建函数创建结构编写源代码创建批处理文件运行结果-成功部署服务器C#代码配置文件注意!! 创建函数 创建结构 编写源代码 创建…

打开idea开发软件停留在加载弹出框页面进不去

问题 idea软件点击打开,软件卡在加载弹框进不去。 解决方法 先进入“任务管理器”停止IDEA的任务进程 2.找到IDEA软件保存的本地数据文件夹 路径都是在C盘下面:路径:C:\Users\你的用户名\AppData\Local\JetBrains 删除目录下的文件夹&…