• Nginx配置upstream实现负载均衡及keepalived实现nginx高可用


    (原文链接:http://www.studyshare.cn/blog/details/1159/0 )

    一、准备工作

    1、准备两个项目,发布到不同的服务器上,此处使用2个虚拟机发布了两个项目分别为:http://192.168.28.128:8081,

    http://192.168.28.129:8081

    2、在两个虚拟机上都安装好nginx

    java开发工具下载地址及安装教程大全,点这里
    更多技术文章,在这里

    二、配置upstream

    1、在任意一台虚拟机上所安装的nginx的nginx.conf配置文件中配置upstream如下:

     

    以上是负载均衡的基本配置,当前模式采用的是轮询的方式负载。除了轮询,还有weight(权重)、ip_hash(根据访

    问ip,解决session问题)、第三方。

    2、根据weight负载

      upstream blog {
            server 192.168.28.128:8081 weight=2;
            server 192.168.28.129:8081 weight=1;
        }
    说明:以上配置表示三次访问的时候weight=2的服务被访问两次,weight=1的服务只被访问一次。

    3、根据ip_hash负载

    upstream blog {
            ip_hash;
            server 192.168.28.128:8081;
            server 192.168.28.129:8081;
        }
    说明:用户第一次访问落在128上,那么以后该用户的访问都会在128的服务器上,如此即可解决session问题。

    4、fair第三方

    这种方式是按后端服务的响应时间来分配请求,相应时间短的优先分配。

      upstream blog {
            server 192.168.28.128:8081;
            server 192.168.28.129:8081;

            fair;
        }

    5、url_hash第三方

    这种方式是按url的hash结果来分配请求,使没一个url请求定向到同一个后端服务器。也可解决session问题,但需

    要注意,使用这种方式后,server语句中不能写入weight等其他参数。

      upstream blog {
            server 192.168.28.128:8081;
            server 192.168.28.129:8081;

            hash $request_uri;

            hash_method crc32;  #使用crc32 hash算法
        }

    三、配置keepalived

    使用以上配置可以达到负载均衡的目的,如果使其中一台机器的服务挂掉,例如使用kill -9将192.168.28.128

    的服务(注意:不是nginx挂掉,而是服务挂掉),此时nginx的负载均衡会检测到128的服务停止,只将来自

    客户端的请求发到129所在的服务器上去,因此也保证了高可用。

    那么如果128机器上的nginx也挂了呢?整个服务肯定就不可用了,如何保证nginx也高可用呢?此处使用keepalived

    来保证nginx的高可用。

    首先在192.168.28.128虚拟机上安装配置keepalived,如下:

    1、安装keepalived:请参考:http://www.studyshare.cn/software/details/1158/1  ,此处不再赘述

    2、配置keepalived

    命令:cd /etc/keepalived  #进入keepalived配置文件目录

    命令:vi keepalived.conf   #编辑keepalived.conf配置文件

    global_defs {
       router_id LVS_1
    }
    vrrp_instance VI_1 {
        state MASTER  #主机
        interface eth0   #网卡
        virtual_router_id 51  
        priority 100  
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.28.200   #配置一个虚拟vip  
        }
    }
    启动keepalived

    命令:/usr/local/keepalived/sbin/keepalived

    命令:ps -ef|grep keepalived #查看启动进程

     

    命令:ip addr  #查看eth0网卡

     

    然后在192.168.28.129虚拟机上安装配置keepalived,如下:

    1、安装略

    2、配置keepalived配置文件

    global_defs {
       router_id LVS_2
    }
    vrrp_instance VI_1 {
        state BACKUP  #从机
        interface eth0   #网卡
        virtual_router_id 51  
        priority 50 #优先级  
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.28.200   #配置一个虚拟vip,此ip与主机配置在虚拟ip需要一致  
        }
    }

    启动从机器的keepalived,启动方式与主机启动方式相同。

    3、测试

    (1)、主机的keepalive被kill前与kill后,从机器上eth0绑定vip情况如下:

     

    总结:keepalived保证了vip在主从机器之间漫游。谁被kill掉后,vip就漫游到未被kill掉

    4、配置keepalived监控nginx,实现nginx的高可用

    (1)、新建一个文件并写入监控nginx执行脚本

    命令:cd /usr/local/src

    命令:vi check_nginx.sh

    写入以下脚本命令:

    #!/bin/bash

    A=`ps -C nginx --no-header |wc -l`        

    if [ $A -eq 0 ];then                            

          /usr/local/nginx/sbin/nginx                #重启nginx,根据自己本机nginx安装路径编写

          if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移

                  killall keepalived    #杀掉,vip就漫游到另一台机器                

          fi

    fi

    保存退出。

    (2)、修改keepalived.conf配置文件,加入以下两段

     

    配置完成,重启keepalived。

    总结:以上就完成了keepalived监控nginx的配置,当停止nginx的时候,监控脚本会自动检测nginx

    是否存活,否就重启。达到nginx不死鸟的目的。

    原创文章,转载请注明出处。java开发工具下载地址及安装教程大全,点这里
    更多技术文章,在这里

  • 相关阅读:
    Linq分组后,再对分组后的每组数据进行排序,获取每组的第一条记录
    C/C++ 常量存储: 总结
    张庆科(山师大硕导简介) [转载]
    composer [packagist]包制作(入门篇)
    MMGCN: Multi-modal Graph Convolution Network for Personalized Recommendation of Micro-video
    opencv.js编译
    推荐
    推荐
    推荐
    Azure Automation (10) 在Automation中动态修改Azure Analysis Firewall防火墙规则
  • 原文地址:https://www.cnblogs.com/darendu/p/10891030.html
Copyright © 2020-2023  润新知