ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

nginx高可用

2021-03-15 19:57:23  阅读:151  来源: 互联网

标签:可用 etc keepalived nginx conf 服务器 docker


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命令安装keepalived
     yum 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 30
       router_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改为BACKUP
        interface ens33   #网卡名称
        virtual_router_id 66   #主备机virtual_router_id必须一致
        priority 100       #备份服务上将100改为小于100,可配置成90
        advert_int 1
        authentication {
            auth_type PASS
            auth_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.com
       smtp_server 182.168.1.117
       smtp_connect_timeout 30
       router_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 BACKUP     #备份服务器上将MASTER改为BACKUP
        interface ens33
        virtual_router_id 66   #与master一致
        priority 90       #备份服务上将100改为小于100,可配置成90
        advert_int 1
        authentication {
            auth_type PASS
            auth_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 ];then
         systemctl restart docker    #重启docker容器
          sleep 3
                if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
                #如果重启失败,关闭keepalived
                      systemctl 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入门学习笔记

标签:可用,etc,keepalived,nginx,conf,服务器,docker
来源: https://blog.csdn.net/wuraox/article/details/114848094

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有