当前位置: 首页 > news >正文

keepalived+nginx实现web高可用

目录

高可用集群搭建

Keepalived+nginx实现web高可用

一.节点规划

二.基础准备

1.修改主机名

2.关闭防火墙和selinux服务

三.用keepalived配置高可用

1.安装nginx服务

2.修改nginx配置文件

3.启动nginx

4.访问nginx

5.安装keepalived服务

6.编辑配置文件

7.编写nginx状态检测脚本

8.给脚本文件755权限

9.启动keepalived

10.测试高可用

(1)测试1:

(2)测试2:

(3)测试3:

(4)测试4:

(5)测试5:


高可用集群搭建

Keepalived+nginx实现web高可用

一.节点规划

IP

主机名

节点

192.168.77.130

Master

主节点

192.168.77.132

Backup

从节点

192.168.77.100

Vip地址

二.基础准备

1.修改主机名

主节点:

Hostnamectl set-hostname master

bash

从节点:

Hostnamectl set-hostname backup

bash

2.关闭防火墙和selinux服务

Systemctl stop firewalld

Systemctl disable firewalld

Setenforce 0

三.用keepalived配置高可用

1.安装nginx服务

主节点采用编译安装方式安装nginx,从节点采用yum方式安装nginx

主节点:

安装编译环境依赖包:

#安装c语言和编译安装的环境

Yum -y install gcc gcc-c++ make automake autoconf libtool zlib zlib-devel pcre pcre-devel openssl openssl-devel

安装nginx:

Wget http://nginx.org/download/nginx-1.13.7.tar.gz

没有wget的话需要先安装wget

Yum -y install wget

解压nginx安装包:

Tar -zxvf nginx-1.13.7.tar.gz

编译安装nginx:

Cd nginx-1.13.7

#./configure是运行nginx安装脚本 --prefix是配置安装路径

./configure --prefix=/usr/local/nginx

#make && make install开始编译安装

Make && make install

从节点:

安装nginx:

Yum -y install nginx

2.修改nginx配置文件

修改nginx首页面内容为节点的IP地址,方便后续测试观察

两台机器采用不同方式安装nginx配置文件路径会有不同

主节点:

Vi /usr/local/nginx/html/index.html

修改配置为如下:

<body>

<h1>192.168.77.130</h1>

从节点:

Vi /usr/share/nginx/html/index.html

修改配置为如下:

<div id="content">

       <h1>192.168.77.132</h1>

3.启动nginx

主节点:

Cd /usr/local/nginx/sbin/

./nginx

用netstat -ntpl命令查看是否有80端口 有则说明服务已启动:

Netstat -ntpl

#如果出现未找到命令,需要下载net-tools

Yum -y install net-tools

从节点:

Systemctl start nginx

Systemctl status nginx

Netstat -ntpl

4.访问nginx

http://192.168.77.130

http://192.168.77.132

5.安装keepalived服务

主从节点:

Yum -y install keepalived

6.编辑配置文件

红字为修改的地方

vi /etc/keepalived/keepalived.conf

编辑master节点配置文件(192.168.77.130)

! Configuration File for keepalived

global_defs {                                                          #全局配置标识

   notification_email {

     acassen@firewall.loc

     failover@firewall.loc

     sysadmin@firewall.loc

   }

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id 192.168.77.130                                   #路由id,不能重复,通常为hostname

   vrrp_skip_check_adv_addr

   vrrp_strict

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}

vrrp_script chk_nginx {                                         

    script "/etc/keepalived/nginx_check.sh"              #检测nginx状态的脚本路径

    interval 2                                                        #2秒运行一次上面的脚本      

}

vrrp_instance VI_1 {

    state MASTER

    interface ens33                                                #网卡名称,与本机ip地址所在网卡名

    virtual_router_id 51                                         称相同.

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {                                          #设置虚拟ip

        192.168.77.100                                        #设置vip100

    }

    track_script {                                                 #执行脚本

        chk_nginx                                               #对应vrrp_script配置的脚本

    }

}

编辑backup节点配置文件(192.168.77.132)

! Configuration File for keepalived

global_defs {

   notification_email {

     acassen@firewall.loc

     failover@firewall.loc

     sysadmin@firewall.loc

   }

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id 192.168.77.132

   vrrp_skip_check_adv_addr

   vrrp_strict

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}

vrrp_script chk_nginx {

    script "/etc/keepalived/nginx_check.sh"

    interval 2

}

vrrp_instance VI_1 {

    state BACKUP                                                #可选值为master或者backup

    interface ens33

    virtual_router_id 51

    priority 90                                                      #定义优先级,数字越大优先级越高,ma

    advert_int 1                                                    ster优先级必须要大于backup优先级

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.77.100

    }

    track_script {

        chk_nginx

    }

}

7.编写nginx状态检测脚本

两台虚拟机都要编写

Vi /etc/keepalived/nginx_check.sh

主节点:

#!/bin/bash

#时间变量,用于记录日志

d=`date --date today +%Y%m%d_%H:%M:%S`

#计算nginx进程数量

n=`ps -C nginx --no-heading|wc -l`

#如果进程为0,则启动nginx,并且再次检测nginx进程数量,

#如果还为0,说明nginx无法启动,此时需要关闭keepalived

if [ $n -eq "0" ]; then

        /usr/local/nginx/sbin/nginx

        n2=`ps -C nginx --no-heading|wc -l`

        if [ $n2 -eq "0"  ]; then

                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log

#杀掉keepalived,是为了防止脑裂。脑裂指的是高可用集群中,当主从切换时,主上的keepalived还在启动,会和从争抢VIP,导致后台链接服务器时,不知道连接哪台服务器好,导致出错。

                systemctl stop keepalived

        fi

fi

从节点:

#!/bin/bash

#时间变量,用于记录日志

d=`date --date today +%Y%m%d_%H:%M:%S`

#计算nginx进程数量

n=`ps -C nginx --no-heading|wc -l`

#如果进程为0,则启动nginx,并且再次检测nginx进程数量,

#如果还为0,说明nginx无法启动,此时需要关闭keepalived

if [ $n -eq "0" ]; then

        systemctl start nginx    ##因为是yum安装,启动有点不一样

        n2=`ps -C nginx --no-heading|wc -l`

        if [ $n2 -eq "0"  ]; then

                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log

                systemctl stop keepalived

        fi

fi

8.给脚本文件755权限

Chmod 755 /etc/keepalived/nginx_check.sh

9.启动keepalived

Systemctl start keepalived         #启动

Systemctl status keepalived               #查看运行状态

Master节点成功标志:

可以看到。Master节点已经获取到了vip 192.168.77.100

Backup节点成功标志:

Backup节点上只有192.168.77.132这个ip是正常的

MASTER节点正常的情况下,BACKUP节点一定不会有浮动IP,也就是VIP只能同时在一个节点上。

10.测试高可用

为了区分master和backup两个角色,我们需要先把两台机器的Nginx做一个区分,其实编译安装的Nginx和yum安装的Nginx版本肯定不一样,事实就是如此:

通过curl -I来查看差异:

(1)测试1:

关闭master上的nginx服务

Cd /usr/local/nginx/sbin/

./nginx -s stop 

Ps -aux | grep nginx

脚本可以再次启动nginx,无法关闭

还有一种情况通过彻底关闭nginx来实现放在测试五讲解

(2)测试2:

在master上增加iptabls规则

Iptables -I OUTPUT -p vrrp -j DROP

可以发现master和backup上都出现了vip。在master上依旧有VIP,master上虽然被禁掉了VRRP协议,但它并不认为自己宕机了,所以不会释放VIP资源。如果master和backup都绑定了VIP,那么对外提供服务就会紊乱,这种情况被称为“脑裂”,这种情况是不允许发生的.

解决的话需要关闭master上的keepalived服务

恢复状态

Iptables -F

(3)测试3:

关闭master上的keepalived服务

Systemctl stop keepalived

访问vip成功切换到从上。

(4)测试4:

启动master上的keepalived服务

Systemctl start keepalived

Vip又调回到了主上。

(5)测试5:

彻底关闭nginx服务

需修改master的nginx配置文件

Vi /usr/local/nginx/conf/nginx.conf

我们在配置文件开头的woker和event前面添加个注释

测试完成后要修改回来

然后查看nginx进程

使用kill命令将nginx服务停掉

这时候我们再查看keepalived服务

能看到脚本使keepalived停掉了

然后在master和backup节点上查看ip

能看到vip成功转移到backup节点上,没有发生脑裂的情况。

至此测试完毕。

相关文章:

keepalived+nginx实现web高可用

目录 高可用集群搭建 Keepalived&#xff0b;nginx实现web高可用 一.节点规划 二.基础准备 1.修改主机名 2.关闭防火墙和selinux服务 三.用keepalived配置高可用 1.安装nginx服务 2.修改nginx配置文件 3.启动nginx 4.访问nginx 5.安装keepalived服务 6.编辑配置文件…...

边界层气象:脉动量预报方程展开 | 湍流脉动速度方差预报方程 | 平均湍流动能收支方程推导

写成分量形式 原始式子&#xff1a; ∂ u i ′ ∂ t u ‾ j ∂ u i ′ ∂ x j u j ′ ∂ u ‾ i ∂ x j u j ′ ∂ u i ′ ∂ x j − 1 ρ ‾ ⋅ ∂ p ′ ∂ x i g θ v ′ θ ‾ v δ i 3 f ϵ i j 3 u j ′ v ∂ 2 u i ′ ∂ x j 2 ∂ ( u i ′ u j ′ ‾ ) ∂ x j…...

TOSUN同星TsMaster使用入门——2、使用TS发送报文,使用graphics分析数据等

在第一章里面已经介绍了关于同星工程的创建和最基础的总线分析&#xff0c;接下来看看怎么使用TS发送报文以及图形化分析数据。 目录 一、使用Graphics分析报文信号/变量&#xff08;对标CANoe Graphics&#xff09; 二、使用数值窗口统计信号值/变量 三、使用TS发送报文 3…...

【操作系统】实验七:显示进程列表

实验7 显示进程列表 练习目的&#xff1a;编写一个模块&#xff0c;将它作为Linux内核空间的扩展来执行&#xff0c;并报告模块加载时内核的当前进程信息&#xff0c;进一步了解用户空间和内核空间的概念。 7.1 进程 进程是任何多道程序设计的操作系统中的基本概念。为了管理…...

day10 电商系统后台API——接口测试(使用postman)

【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 实战项目简介&#xff1a; 1、用户管理&#xff08;8个&#xff09; 1.1 登录 1.2 获取用户数据列表 1.3 创建用户 1.4 修改用户状态 1.5 根据id查询用户 1.6 修改用户信息 1.7 删除单个用户 1.8 …...

JavaScript ES6+ 语法速通

一、ES6 基础语法 1. let 和 const 声明变量 let&#xff1a;块级作用域&#xff0c;可以重新赋值。const&#xff1a;块级作用域&#xff0c;声明常量&#xff0c;不能重新赋值。 let name Li Hua; name Li Ming; // 可修改const age 21; // age 22; // 报错&#xff0…...

移动端h5自适应rem适配最佳方案

网页开发中&#xff0c;我们常用的单位有如下几个&#xff1a; px&#xff1a;像素固定&#xff0c;无法适配各分辨率的移动设备em: 该单位受父容器影响&#xff0c;大小为父元素的倍数rem: 因为html根元素大小为16px&#xff0c;所以默认 1rem 16px&#xff0c;rem只受根元素…...

2024年使用 Cython 加速 Python 的一些简单步骤

文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 文章有点长,期望您能坚持看…...

EasyExcel设置表头上面的那种大标题(前端传递来的大标题)

1、首先得先引用easyExcel的版本依赖&#xff0c;我那 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency> 2、然后得弄直接的实体类&#xff0c;&…...

【Linux网络编程】第十弹---打造初级网络计算器:从协议设计到服务实现

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、Protocol.hpp 1.1、Request类 1.1.1、基本结构 1.1.2、构造析构函数 1.1.3、序列化函数 1.1.4、反…...

无限弹窗?无限重启?

Windows开机自启目录&#xff1a; "%USERPROFILE%\AppData\Roaming\Microsoft\windows\StartMenu\Programs\Startup" 基于这个和 start 命令&#xff0c; shutdown 命令&#xff0c; 编写 bat 病毒程序。 无限弹窗 echo start cmd > hack.txt echo %0 >>…...

深入详解人工智能机器学习常见算法中的K-means聚类

目录 引言 1. K-means聚类的基本概念 1.1 K-means聚类的定义 1.2 K-means聚类的核心思想 1.3 K-means聚类的目标函数 2. K-means聚类的核心原理 2.1 初始化 2.2 分配 2.3 更新 2.4 迭代 3. K-means聚类的具体实现 3.1 K-means聚类的算法流程 3.2 K-means聚类的Pyt…...

lc146LRU缓存——模仿LinkedHashMap

146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09; 法1&#xff1a; 调用java现有的LinkedHashMap的方法&#xff0c;但不太理解反正都不需要扩容&#xff0c;super(capacity, 1F, true);不行吗&#xff0c;干嘛还弄个装载因子0.75还中途扩容一次浪费时间。 class LRUC…...

全面深入解析:C语言动态库

引言 动态库&#xff08;Dynamic Library&#xff09;是现代软件开发中不可或缺的一部分&#xff0c;它们不仅提高了代码的重用性和维护性&#xff0c;还显著提升了系统的性能和资源利用率。本文将全面探讨C语言中的动态库&#xff0c;从基础概念到高级应用&#xff0c;通过丰…...

运用 SSM 实现垃圾分类系统智能化升级

目 录 摘 要 1 前 言 3 第1章 概述 4 1.1 研究背景 4 1.2 研究目的 4 1.3 研究内容 4 第二章 开发技术介绍 5 2.1Java技术 6 2.2 Mysql数据库 6 2.3 B/S结构 7 2.4 SSM框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行性 10 3.1.3 操作可行性 10 …...

LeNet-5:深度学习与卷积神经网络的里程碑

目录 ​编辑 引言 LeNet-5的结构与原理 输入层 C1层&#xff1a;卷积层 S2层&#xff1a;池化层 C3层&#xff1a;卷积层 S4层&#xff1a;池化层 C5层&#xff1a;卷积层 F6层&#xff1a;全连接层 输出层 LeNet-5的算法基础 LeNet-5的优点 LeNet-5的现代应用 …...

从资产流动分析WIF市场潜力X.game深究其他未知因素

近日&#xff0c;两则关于WIF最新消息引起了投资者们的注意。据报道&#xff0c;11月28日Vintermute在过去13小时内累计从Binance交易所提取了价值533万美元的WIF&#xff0c;此举不仅彰显了其强大的资金实力&#xff0c;更在某种程度上推动了WIF币价的反弹&#xff1b;另一方面…...

深入解析Vue3响应式系统:从Proxy实现到依赖收集的核心原理

深入解析Vue3响应式系统&#xff1a;从Proxy实现到依赖收集的核心原理 响应式系统的基本原理 作为一个热门的JavaScript框架&#xff0c;Vue在3.x版本中引入了基于Proxy的响应式系统。这个系统的核心思想是利用Proxy对象拦截对数据的访问和修改&#xff0c;从而实现数据的自动更…...

FPGA实现GTP光口数据回环传输,基于Aurora 8b/10b编解码架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案 3、工程详细设计方案工程设计原理框图用户数据发送模块基于GTP高速接口的数据回环传输架构GTP IP 简介GTP 基本结构GTP 发送和接收…...

Linux网络 UDP socket

背景知识 我们知道&#xff0c; IP 地址用来标识互联网中唯一的一台主机&#xff0c; port 用来标识该主机上唯一的一个网络进程&#xff0c;IPPort 就能表示互联网中唯一的一个进程。所以通信的时候&#xff0c;本质是两个互联网进程代表人来进行通信&#xff0c;{srcIp&…...

沐曦股份曦云C系列GPU完成腾讯混元翻译模型Hy-MT2 Day 0 深度适配

5月21日&#xff0c;腾讯混元翻译模型Hy-MT2正式开源&#xff0c;包含3个尺寸的模型Hy-MT2-1.8B、Hy-MT2-7B、Hy-MT2-30B-A3B。沐曦股份曦云C系列GPU凭借全栈自研技术优势&#xff0c;率先实现对三个模型的Day 0深度适配。此次腾讯混元宣布开源的三个模型均重点支持33个语种互译…...

ADAS系统设计全解析:从传感器融合到域控制器实战

1. 项目概述与行业背景最近几年&#xff0c;但凡和汽车沾点边的行业&#xff0c;都绕不开“智能化”这三个字。作为一名在汽车电子和嵌入式系统领域摸爬滚打了十多年的工程师&#xff0c;我亲眼见证了从简单的倒车雷达&#xff0c;到如今能自动跟车、紧急刹车的ADAS系统&#x…...

黑苹果终极简化方案:OpCore Simplify 让你的OpenCore配置变得前所未有的简单

黑苹果终极简化方案&#xff1a;OpCore Simplify 让你的OpenCore配置变得前所未有的简单 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的…...

让Office界面真正属于你:Office RibbonX Editor的个性化定制之道

让Office界面真正属于你&#xff1a;Office RibbonX Editor的个性化定制之道 【免费下载链接】office-ribbonx-editor An overhauled fork of the original Custom UI Editor for Microsoft Office, built with WPF 项目地址: https://gitcode.com/gh_mirrors/of/office-ribb…...

Gemini 1.5、Sora与V-JEPA:AI工程水位线的三大坐标轴

1. 这份AI Newsletter到底在讲什么&#xff1f;为什么它值得你花5分钟读完“Towards AI”这个名称&#xff0c;对很多刚接触AI内容生态的朋友来说可能有点陌生——它不是某个大厂的官方号&#xff0c;也不是某位顶流KOL的个人频道&#xff0c;而是一个由一线工程师、研究员和产…...

开源大模型实战指南:从架构权重到数据生态的完整解析

1. 项目概述&#xff1a;从“开源”的迷思谈起最近和几个刚入行AI领域的朋友聊天&#xff0c;发现一个挺有意思的现象&#xff1a;大家一提到“开源大模型”&#xff0c;第一反应就是去GitHub上找代码&#xff0c;然后对着一个庞大的仓库发懵&#xff0c;不知道从何下手。紧接着…...

2026 SSH工具推荐:不装传统面板,还有什么更适合管理 Linux 服务器?

这几年很多人选 SSH 工具&#xff0c;已经不只是为了“远程登上服务器敲命令”。 真正常见的需求其实是&#xff1a;连上服务器之后&#xff0c;还要继续完成文件管理、服务部署、HTTPS 配置、站点检查&#xff0c;甚至多台 VPS 的统一管理。 也正因为这样&#xff0c;到了 202…...

lin诊断功能寻址和静态电流测试方法

lin诊断功能寻址是不会回响应的&#xff0c;不管正响应还是负响应&#xff0c;而且进入会话必须是10 83这种&#xff08;不知道是不是项目规定&#xff09;****************************************************************************************************这个数字电流…...

AI时代软件工程教育:同理心融入技术课程的教学实践

1. 项目概述&#xff1a;当代码遇见人心最近几年&#xff0c;我一直在高校和培训机构里讲授软件工程相关的课程&#xff0c;从传统的软件生命周期、设计模式&#xff0c;到如今火热的敏捷开发、DevOps。一个越来越强烈的感受是&#xff1a;我们的技术教育&#xff0c;似乎正在与…...

不跨界,现有的地盘就会被别人用跨界的方式蚕食掉

微软这么多员工养着&#xff0c;有时也不得不多个行业发展&#xff0c;就像是美团一样&#xff0c;不得不电商也做起来和京东抢生意。阿里也同时多个行业做着&#xff0c;影视&#xff0c;外卖&#xff0c;生鲜。否则纯电商做不下去就完了。就像是华为一样本来可以卖AI服务器&a…...