nginx高可用

article/2025/10/12 17:29:37

Nginx高可用

为什么要使用nginx的高可用:因为nginx作为反向代理服务器时,有可能出现宕机的情况,而由于其反向代理的特性,就会导致其他服务器(tomcat等)无法被访问,这样项目就停止工作了。但是使用了高可用后,就可以避免这种现象出现。

什么是高可用:nginx的高可用简单来说就是配置了两台(或更多)的nginx服务器,当主服务器宕机时,就会自动切换到备用服务器,从而保证项目的持续运行。

高可用的原理:nginx的实现需要借助其他工具(keepalived)来实现。在keepalived中配置一个虚拟IP(VIP),同时keepalived会定时检查主服务器的工作状态(通过脚本实现)。在主服务器正常工作时,VIP就会映射到主服务器的IP,此时,虚拟ip对应的物理地址和主服务器IP对应的物理地址是相同的,所以访问虚拟IP即访问主服务器。当主服务器失效时,脚本就会监测到,从而根据预先的配置,找到优先级最高的备用服务器,并将虚拟IP映射到该备用服务器的ip,此时,这两个ip对应的物理地址时相同的。再主服务器回复正常时,又会被检测到,又会自动切换到主服务器。这样就实现了nginx的高可用。

在这里插入图片描述

一个nginx高可用实现的简单案例(Docker)

一、需求准备清单

  • 两台虚拟机
  • Nginx-MASTER(主服务器):安装在一台虚拟机的docker中。IP:192.168.1.117
  • Nginx-BACKUP(备用服务器):安装在另一台虚拟机docker中。IP:192.168.1.150
  • keepalived:虚拟IP设置:192.168.11.11

二、相关软件安装、配置

**虚拟机:**虚拟机安装这里不做展示,可自行查询资料(要求能连外网,相关:)

Nginx安装:

  1. 首先需要安装docker容器,( docker相关 ):

    #将yum更新到最新
    yum update
    #安装需要的软件包
    yum install -y yum-utils device-mapper-persistent-data lvm2
    #设置yum源
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    #安装docker
    yum install -y docker-ce
    #查看docker版本,检验是否成功
    docker -v
    #systemctl start docker(管理员权限)
    systemctl start docker
    #开机启动docker服务
    systemctl enable docker
    
  2. 下载nginx镜像

    #搜索镜像
    docker search nginx
    #拉取镜像,默认最新
    docker pull nginx
    
  3. 创建nginx容器

    首先:需要准备nginx中的配置文件(docker中有两个nginx.conf、default.conf),因为docker中的文件不能直接修改,需要挂载数据卷,这里直接从nginx容器中复制过来

    #创建配置文件存放位置,存放在/root/nginx/
    mkdir ~/nginx
    mkdir ~/nginx/conf.d
    mkdir ~/nginx/html
    #切换目录
    cd ~/nginx/
    #创建未挂载数据卷的nginx容器,只为要其中的配置文件
    docker run -id --name=nginx nginx
    #复制其中的文件
    docker cp nginx:/etc/nginx/nginx.conf ./
    docker cp nginx:/etc/nginx/conf.d/default.conf ./conf.d/

    准备好配置文件后,即可创建正式的nginx容器

    #创建容器,并映射端口
    docker run \
    --name=nginx-MASTER \
    -d -p 8000:80 \
    -v $PWD/html:/usr/share/nginx/html \
    -v $PWD/nginx.conf:/etc/nginx/nginx.conf:ro \
    -v $PWD/conf.d:/etc/nginx/conf.d \
    nginx
    

    再使用上面的命令在另一个虚拟机中实现注意将--name=nginx-MASTER改为nginx-BACKUP 理论上不该也行,为了好区分,注意开启端口8000

    此时可以分别在浏览器使用虚拟机的ip+8000访问nginx,出现欢迎界面即为安装成功。

    更多nginx相关配置信息见:

  4. 安装keepalived软件

    keepalived软件安装在linux本地,而不是安装在docker中

     #使用yum命令安装keepalivedyum install keepalived -y#检查是否安装完成rpm -q -a keepalived
    

    安装位置:/etc/keepalived/keepalived.conf,后面主要修改该配置文件

  5. 修改keepalived.conf配置文件,添加注释的为重点,其他不关键

    打开配置文件

    vi /etc/keepalived/keepalived.conf
    

    Nginx-MASTER(主服务器)配置:

    global_defs {notification_email {abc@qq.com    }notification_email_from root@qq.com    smtp_server 182.168.1.117    smtp_connect_timeout 30router_id 127.0.0.1     #127.0.0.1
    }vrrp_script chk_nginx {script "/etc/keepalived/nginx_pid.sh"   # 检查nginx状态的脚本interval 2      #检查时间间隔weight 3    #权重
    }vrrp_instance VI_1 {state MASTER     #备份服务器上将MASTER改为BACKUPinterface ens33   #网卡名称virtual_router_id 66   #主备机virtual_router_id必须一致priority 100       #备份服务上将100改为小于100,可配置成90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.11.11    #有多个vip可在下面继续增加}track_script {chk_nginx}
    }
    

    Nginx-BACKUP(备用服务器):

    global_defs {notification_email {1826467987@qq.com}notification_email_from root@xuad.comsmtp_server 182.168.1.117smtp_connect_timeout 30router_id 127.0.0.1   #127.0.0.1
    }vrrp_script chk_nginx {script "/etc/keepalived/nginx_pid.sh"   # 检查nginx状态的脚本interval 2weight 3
    }vrrp_instance VI_1 {state BACKUP     #备份服务器上将MASTER改为BACKUPinterface ens33virtual_router_id 66   #与master一致priority 90       #备份服务上将100改为小于100,可配置成90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.11.11    #有多个vip可在下面继续增加}track_script {chk_nginx}
    }
    
  6. 添加脚本信息

    在上面的配置文件中有一行:script “/etc/keepalived/nginx_pid.sh” 即脚本位置

    #转到该目录
    cd /etc/keepalived/
    #创建文件
    touch nginx_pid.sh
    #编辑文件
    vi nginx_pid.sh
    

    脚本内容:

    #!/bin/bash
    A=`ps -C nginx --no-header |wc -l`
    if [ $A -eq 0 ];thensystemctl restart docker    #重启docker容器sleep 3if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then#如果重启失败,关闭keepalivedsystemctl stop keepalived
    fi
    fi

    两个虚拟机中都要添加

  7. 完成以上配置后分别重启两个虚拟机中的nginx和keepalived

    #重启nginx
    docker stop nginx-MASTER
    docker start nginx-MASTER
    #开启keepalived
    systemctl start keepalvied.service
    
  8. 测试,使用虚拟IP访问:http://192.168.11.11:8000,即可看到nginx欢迎界面,当关闭主nginx时:

    docker stop nginx-MASTER
    systemctl stop keepalvied.service
    

    该访问url依然可以访问,表示高可用实现

关于url:这里需要添加端口,因为nginx是在docker容器中,在上面也可以看到,80端口映射了宿主机的8000端口,所以要添加端口;由此推导,两个nginx的映射端口也必须一致,否则无论如何只能访问其中一个nginx

Nginx入门学习笔记


http://chatgpt.dhexx.cn/article/AZVesQa0.shtml

相关文章

RabbitMQ高可用

RabbitMQ高可用 各种消息队列对比使用推荐 RabbitMQ 高可用普通集群模式镜像集群模式保证消息队列的幂等性(消息不被重复消费)消息队列的可靠性传输生产者丢失数据RabbitMQ丢失数据消费者丢失数据 保证消息的顺序性消息积压问题 各种消息队列对比 特性ActiveMQRabbitMQRocketM…

系统高可用

系统高可用 1. 什么是高可用?可用性的判断标准是啥?1.1 可用性的判断标准是啥? 2. 哪些情况会导致系统不可用?3. 有哪些提高系统可用性的方法?3.1 注重代码质量,定时Review代码3.2 使用集群,减少…

HBase高可用

一、HBase高可用简介 HBase集群如果只有一个master,一旦master出现故障,将导致整个集群无法使用,所以在实际的生产环境中,需要搭建HBase的高可用,也就是让HMaster高可用,也就是需要再选择一个或多个节点也…

你管这破玩意儿叫高可用

大家好,我是坤哥 今天我们来聊一下互联网三高(高并发、高性能、高可用)中的高可用,看完本文相信能解开你关于高可用设计的大部分困惑 前言 高可用(High availability,即 HA)的主要目的是为了保障…

什么是高可用?高可用介绍:

前言: 高可用(High availability,即 HA)的主要目的是为了保障「业务的连续性」,即在用户眼里,业务永远是正常(或者说基本正常)对外提供服务的。高可用主要是针对架构而言&#xff0c…

HTML Responsive Web Page

注&#xff1a;参考网站 https://www.w3schools.com HTML Responsive Web Page index.html <!DOCTYPE html> <html><head><link rel"stylesheet" href"style.css"><title>Responsive web page</title><meta lan…

响应式布局【Responsive】 与 自适应布局 【adaptive】、单页面【SPA】 和多页面【MPA】

1、响应式布局 是一个网址能兼容多个terminate【终端】&#xff0c;而不是为每个终端做一个特定的版本 优点&#xff1a; 用户体验好节约开发时间、节省设计seo友好可以适用所有设备屏幕 缺点 设计与风格有局限性《自由度太低&#xff0c;局部性较大》灵活性有所欠缺 基于不…

Bootstrap:Responsive Design with Bootstrap(一)

1.Use Responsive Design with Bootstrap Fluid Containers 现在让我们回到我们的Cat Photo应用。这次&#xff0c;我们将用流行的响应式框架Bootstrap来美化它。 Bootstrap将会根据你的屏幕的大小来调整HTML元素的大小 —— 强调 响应式设计的概念。 通过响应式设计&#x…

responsive tables

以上内容原本是整理为ppt格式的&#xff0c;贴过来格式有点乱&#xff0c;请见谅。 其他responsive tables参考&#xff1a; http://gergeo.se/RWD-Table-Patterns/ 3种类型的代码参考 unseen column&#xff1a; http://runjs.cn/code/zrhodpx5 flip scroll&#xff1a; ht…

CSS之responsive image gallery

responsive image gallery 这次实例主要是练习如何讲不同的图片设置为一个栏目&#xff0c;并且能够根据屏幕的大小进行自适应的变换。需要注意的是&#xff0c;本次实例中运用到的重要的关键的内容是&#xff1a;float-left&#xff1b;box-sizing; media screen and (max-wi…

html5 响应式表格插件,响应式表格jQuery插件 – Responsive tables

响应式表格jQuery插件 – Responsive tables 4月 24, 2014 评论 (1) Sponsor 这个Responsive tables jQuery插件依赖于Bootstrap 3使用&#xff0c;比BS自带的自适应多了一些好用的功能&#xff0c;比如筛选显示&#xff0c;Focus选定、Table头滑动固定等&#xff0c;下来看看介…

SAP Fiori 设计准则里的 Responsive 表格概述

Responsive Table 是 SAP Fiori 中的默认表控件。 它包含一组 Line item 并且完全响应(fully responsive)。 根据具体情况&#xff0c;用户还可以从行项目导航到更多详细信息页面。 一个行项目包含多个数据点(data point)&#xff0c;这些数据点被分类到列中。 数据点是指一个…

Responsive Web测试

什么是Responsive Web设计 Ethan Marcotte曾于2010年5月25日在A List Apart发表了文章《Responsive Web Design》&#xff0c;首次提出了RWD(Responsive Web Design)的概念。其理念是&#xff0c;Web页面的设计能够自适应多种设备、平台和浏览器&#xff0c;同时减少缩放、平移…

CSS之Responsive设计的关键三步

下面我们就通过这篇教程&#xff0c;帮助大家从三个步骤来了解和学习“Responsive”设计 第一步&#xff1a;Meta标签 大家都知道&#xff0c;现在智能手机上浏览web页面会让页面适应屏幕的大小&#xff0c;显示在屏幕上。不过我们可以通过“meta”标签对他进行重置&#xff…

CSS之Responsive网页设计的三个特性

Responsive网页设计无疑是网页设计中的一个热门话题。某种程度上&#xff0c;他将是一个最受欢迎的网页设计概念&#xff0c;因为随着网站用户日渐多样化的访问方法&#xff0c;比如说“iPad”、“iPhone”、“Android移动设备”、“平板电脑”、“台式机”以及“ 笔记本”等不…

下载Django中文官方文档

点击?地址&#xff0c;2.2是版本号&#xff0c;后续更新需自行更改对应的版本 https://docs.djangoproject.com/zh-hans/2.2/ 点击下载 HTML&#xff0c;即可下载全中文官方文档 有部分没有中文翻译的页面&#xff0c;请自行安装谷歌翻译插件

Django 文档 | Django

项目介绍 一款 Python 语言基于Django、Layui、MySQL等框架精心打造的一款模块化、高性能、企业级的敏捷开发框架&#xff0c;本着简化开发、提升开发效率的初衷触发&#xff0c;框架自研了一套个性化的组件&#xff0c;实现了可插拔的组件式开发方式&#xff1a;单图上传、多…

Django文档4.0(通俗易懂)

欢迎访问个人博客http://www.jkraise.top 初识 django project 01. 进入虚拟环境 创建Django 工程 使用django-admin.py 来创建 xxx 项目 django-admin startproject xxxx 创建完成后 我们查看 项目结构 目录说明&#xff1a; test——djgo_001: 项目容器 manage.py: 一…

Django技术文档

安装Django 安装python环境并添加到系统环境中 注意&#xff1a;安装的时候尽量避免路径中含有中文 virtualenv虚拟环境的使用 安装virtualenv pip install virtualenv创建virtualenv虚拟环境 CMD创建虚拟环境 cmd进入自己创建的虚拟环境文件夹输入virtualenv 虚拟环境名…

django-rest-framework文档导读

django-rest-framework文档导读 技巧反序列化校验数据保存数据ModelSerializer简化代码 APIViewrequest/responseGenericAPIViewMixinListAPIViewCreateAPIViewRetrieveAPIViewDestroyAPIViewUpdateAPIViewListCreateAPIViewRetrieveUpdateAPIViewRetrieveDestroyAPIViewRetrie…