• 2.Nginx基本配置


    1. Nginx相关概念

      代理服务器一般分为正向代理(通常直接称为代理服务器)和反向代理。

      通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服

    务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的。

      而反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返

    回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器

    1.1. 反向代理(服务器端的代理)

      反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果

    返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

      

    1.1. 正向代理(客户端的代理)

      正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理

    向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

      

    3.1. 配置反向代理(虚拟主机)

    Nginx配置nginx.conf(/usr/local/nginx/conf/nginx.conf)(功能2:作为集群构建者拥有反向代理功能)

    server {
        listen       8888;
        server_name  shizhan2;    #nginx所在服务器的主机名
       #反向代理的配置
       location / {             #拦截所有请求
           root html;
            proxy_pass http://192.168.232.200:8080;   #这里是代理走向的目标服务器:tomcat
        }
    }

     nginx的反向代理功能的实现:通过访问Nginx服务允许请求跳转到其他服务器

      

      启动201的Nginx服务,200的Tomcat服务,然后访问代理服务器地址:http://192.168.232.201,然后刷新:用服务名访问,需要配置hosts

      

      即就是:

        

    3.2. 配置动静分离

      如果请求jsp或者servlet,需要进行业务逻辑的处理,将静态的放在前端,动态的放在后端(功能1:作为前端服务器拥有响应静态页面功能)

    #动态资源 index.jsp
    location ~ .*.(jsp|do|action)$ {
        proxy_pass http://tomcat-01:8080;
    }
    
    #静态资源
    location ~ .*.(html|js|css|gif|jpg|jpeg|png)$ {
        expires 3d;
    }

    location配置规则

      

    3.2. 配置负载均衡  

      负载均衡,英文名称为Load Balance,是指建立在现有网络结构之上,并提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据

    处理能力、提高网络的灵活性和可用性。其原理就是数据流量分摊到多个服务器上执行,减轻每台服务器的压力,多台服务器共同完成工作任务,从而提高了数据的吞吐量

      

      在http这个节下面配置一个叫upstream的,后面的名字可以随意取,但是要和location下的proxy_pass http://后的保持一致

    http {
    是在http里面的, 已有http, 不是在server里,在server外面 upstream tomcats { server 192.168.232.200:
    8080 weight=1;#weight表示权重 server 192.168.232.205:8080 weight=1;    }   #卸载server里
      server{
        listen 8888;     location
    ~ .*.(jsp|do|action) { ~:表示大小写敏感     proxy_pass http://tomcats; #tomcats是后面的tomcat服务器组的逻辑组号(可以理解为后台一组服务器的名称)和 upstream后面一样     }
      }
    }

    2. 利用keepalived实现高可靠配置(HA  

    2.1. 高可靠概念

      HA(High Available):高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。

     

    2.2. 高可靠软件keepalived

      keepalive是一款可以实现高可靠的软件,通常部署在2台服务器上,分为一主一备。Keepalived可以对本机上的进程进行检测,一旦Master检测出某个进程出

    现问题,将自己切换成Backup状态,然后通知另外一个节点切换成Master状态。

    2.3. keepalived安装

      下载keepalived官网:http://keepalived.org

       将keepalived解压到/usr/local/src目录下:tar -zxvf  keepalived-1.2.19.tar.gz -C /usr/local/src

       进入到/usr/local/src/keepalived-1.2.19目录:cd /usr/local/src/keepalived-1.2.19

       开始configure(检查安装环境,并指定将来要安装的路径):./configure --prefix=/usr/local/keepalived    

       #编译并安装:make && make install

    2.4. keepalived添加到系统服务中  

      拷贝执行文件cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

      将init.d文件拷贝到etc加入开机启动项:cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived 

      将keepalived文件拷贝到etc下:cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 

      创建keepalived文件夹:mkdir -p /etc/keepalived

      将keepalived配置文件拷贝到etc下:cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf 

      添加可执行权限:chmod +x /etc/init.d/keepalived  

      添加keepalived到开机启动:chkconfig --add keepalived        chkconfig keepalived on

    2.4. 配置keepalived虚拟IP

    1.基本服务器宕机的主从切换配置

      

      

    机器IP

    安装软件

    角色

    虚拟ip

    描述

    192.168.232.201

    Nginx、keepalived

    Nginx主机

    192.168.232.203

    反向代理到tomcat1和tomcat2

    192.168.232.205

    Nginx、keepalived

    Nginx备机

    主机挂了切换虚拟ip 192.168.232.203

    反向代理到tomcat1和tomcat2

    192.168.232.200

    Tomcat

    Tomcat1

    192.168.232.204

    Tomcat

    Tomcat2

     

      两台nginx服务器,分别安装keepalived,配置/etc/keepalived/keepalived.conf

    主从配置:

      主nginx修改配置文件: /etc/keepalived/keepalived.conf

      #MASTER节点

    #全局配置
    global_defs {
       notification_email {   #指定keepalived在发生切换时需要发送email到的对象,一行一个
         XXX@XXX.com
       }
      notification_email_from Alexandre.Cassen@firewall.loc   #指定发件人
       smtp_server 192.168.200.1  #指定smtp服务器地址
       smtp_connect_timeout 30    #指定smtp连接超时时间
       router_id LVS_DEVEL  #运行keepalived机器的一个标识
    }
    vrrp_instance VI_1 {
        state MASTER       #指定A节点为主节点 备分机上设置为BACKUP即可
        interface eth0      #设置实例绑定的网卡
        virtual_router_id 51 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组(同一实例下virtual_router_id必须相同)
        priority 100       #主节点的优先级(1-254之间),备用节点必须比主节点优先级低
        advert_int 1       #MASTERBACKUP负载均衡器之间同步检查的时间间隔,单位是秒
        authentication {     #设置验证信息,两个节点必须一致
            auth_type PASS  #主从服务器验证方式
            auth_pass 1111
        }
        virtual_ipaddress {    #指定虚拟IP, 两个节点设置必须一样
            192.168.232.203/24   #如果两个nginx的ip分别是192.168.232.201,,...205,则此处的虚拟ip跟它俩同一个网段即可,24子网掩码(255.255.255.0),可以多个虚拟IP,换行即可
        }
    }

    备nginx

    修改备nginx下/etc/keepalived/keepalived.conf文件

    配置备nginx时需要注意:需要修改stateBACKUP , priorityMASTER低,virtual_router_idmaster的值一致

    #BACKUP节点

    global_defs {
    }
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.232.203/24
        }
    }

    #分别启动两台机器上的keepalived:

    service keepalived start 

    用ip addr查看主从:

    主机:

    备机:

    此时如果主机宕机则备机会顶替主机获得虚拟ip

    首先将主机的keepalived关闭:

    再次查看主机:ip addr

    备机:

    至此,基本服务器宕机的主从切换配置完毕

    访问虚拟ip是不是还能轮询访问tomcat

    2.基于nginx进程死掉主从切换配置 

      keepalived是通过检测keepalived进程是否存在判断服务器是否宕机,如果keepalived进程在但是nginx进程不在了那么keepalived是不会做主备切换,所以我们需要写

    个脚本来监控nginx进程是否存在,如果nginx不存在就将keepalived进程杀掉。

      在主nginx上需要编写nginx进程检测脚本(check_nginx.sh),判断nginx进程是否存在,如果nginx不存在就将keepalived进程杀掉,check_nginx.sh内容如下:

    #!/bin/bash
    # 如果进程中没有nginx则将keepalived进程kill掉
    A=`ps -C nginx --no-header |wc -l`      ## 查看是否有 nginx进程 把值赋给变量A 
    if [ $A -eq 0 ];then                    ## 如果没有进程值得为 零
           service keepalived stop          ## 则结束 keepalived 进程
    fi

      将check_nginx.sh拷贝至/etc/keepalived下,

      注意修改/etc/keepalived/check_nginx.sh的可执行权限

      修改主nginx的keepalived.conf,添加脚本定义检测:

      注意下边红色标识地方:

    #全局配置
    global_defs {
       notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
         XXX@XXX.com
       }
       notification_email_from miaoruntu@itcast.cn  #指定发件人
       #smtp_server XXX.smtp.com                             #指定smtp服务器地址
       #smtp_connect_timeout 30                               #指定smtp连接超时时间
       router_id LVS_DEVEL                                    #运行keepalived机器的一个标识
    }
    vrrp_script check_nginx {
        script "/etc/keepalived/check_nginx.sh"         ##监控脚本
        interval 2                                      ##时间间隔,2秒
        weight 2                                        ##权重
    }
    vrrp_instance VI_1 {
        state MASTER           #标示状态为MASTER 备份机为BACKUP
        interface eth0         #设置实例绑定的网卡
        virtual_router_id 51   #同一实例下virtual_router_id必须相同
        priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99
        advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
        authentication {       #设置认证
            auth_type PASS     #主从服务器验证方式
            auth_pass 8888
        }
       track_script {
            check_nginx        #监控脚本
       }
        virtual_ipaddress {    #设置vip
            192.168.101.100       #可以多个虚拟IP,换行即可
        }
    
    }

    修改后重启keepalived

    2.5. 配置keepalived对后端服务器心跳检查(健康检查模块)

    原理:Keepalived并不跟nginx耦合,它俩完全不是一家人但是keepalived提供一个机制:让用户自定义一个shell脚本去检测用户自己的程序,返回状态给keepalived就可以了

    #MASTER节点

    global_defs {
    }
    
    vrrp_script chk_health {
        script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1"
        interval 1    #每隔1秒执行上述的脚本,去检查用户的程序ngnix
        weight -2
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 1
        priority 100
        advert_int 2
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    
        track_script {
            chk_health
        }
    
        virtual_ipaddress {
            10.0.0.10/24
        }
    
        notify_master "/usr/local/keepalived/sbin/notify.sh master"
        notify_backup "/usr/local/keepalived/sbin/notify.sh backup"
        notify_fault "/usr/local/keepalived/sbin/notify.sh fault"
    }

    #添加切换通知脚本:vi /usr/local/keepalived/sbin/notify.sh

    #!/bin/bash
    
    case "$1" in
        master)
            /usr/local/nginx/sbin/nginx
            exit 0
        ;;
    backup)
            /usr/local/nginx/sbin/nginx -s stop
            /usr/local/nginx/sbin/nginx
            exit 0
        ;;
        fault)
            /usr/local/nginx/sbin/nginx -s stop
            exit 0
        ;;
        *)
            echo 'Usage: notify.sh {master|backup|fault}'
            exit 1
        ;;
    esac

    #添加执行权限:chmod +x /usr/local/keepalived/sbin/notify.sh

    global_defs {
    }
    
    vrrp_script chk_health {
        script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1"
        interval 1
        weight -2
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 1
        priority 99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    
        track_script {
            chk_health
        }
    
        virtual_ipaddress {
            10.0.0.10/24
        }
        
        notify_master "/usr/local/keepalived/sbin/notify.sh master"
        notify_backup "/usr/local/keepalived/sbin/notify.sh backup"
        notify_fault "/usr/local/keepalived/sbin/notify.sh fault"
    }

    #在第二台机器上添加notify.sh脚本

    #分别在两台机器上启动keepalived

    service keepalived start

    chkconfig keepalived on

      

      

      

     

     

      

      

      


      

  • 相关阅读:
    C语言数据类型取值范围
    C语言的概述--学习c的第二天
    开始学习c语言
    Comet 反Ajax: jQuery与PHP实现Ajax长轮询
    jquery的toFixed方法的正确使用
    JavaScript 正则表达式
    JavaScript中原型链存在的问题解析
    vue编程式导航
    vue 动态组件,传递参数
    JavaScript如何封装插件
  • 原文地址:https://www.cnblogs.com/yaboya/p/9090352.html
Copyright © 2020-2023  润新知