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

一、准备工作

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

http://192.168.28.129:8081

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

二、配置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/blog-front//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不死鸟的目的。

原创文章,转载请注明出处。更多技术文章:http://www.studyshare.cn/blog-front/blog/index

Nginx配置upstream实现负载均衡及keepalived实现nginx高可用的更多相关文章

  1. Nginx配置upstream实现负载均衡

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  2. 【upstream】Nginx配置upstream实现负载均衡

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  3. Nginx配置upstream实现负载均衡1

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  4. 【Nginx(三)】Nginx配置集群 负载均衡策略

    Nginx配置集群 负载均衡策略 一.安装环境 1.安装JDK8的环境,配置JDK8的环境变量 2.上传jar包demo-1.jar 和 demo-2.jar demo-1.jar 监听8080端口; ...

  5. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

    1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...

  6. keepalived+LVS 实现双机热备、负载均衡、失效转移 高性能 高可用 高伸缩性 服务器集群

    本章笔者亲自动手,使用LVS技术实现实现一个可以支持庞大访问量.高可用性.高伸缩性的服务器集群 在读本章之前,可能有不少读者尚未使用该技术,或者部分读者使用Nginx实现应用层的负载均衡.这里大家都可 ...

  7. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案

    http://aokunsang.iteye.com/blog/2053719   声明:以下仅为个人的一些总结和随写,如有不对之处,还请看到的网友指出,以免误导. (详细的配置方案请google,这 ...

  8. web应用的负载均衡、集群、高可用(HA)解决方案

    看看别人的文章: 1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代 ...

  9. JAVAEE——宜立方商城03:商品类目选择、Nginx端口或域名区分虚拟机、Nginx反向代理、负载均衡、keepalived实现高可用

    1. 学习计划 第三天: 1.商品类目选择(EasyUI的tree实现) 2.图片上传 a) 图片服务器FastDFS(Nainx部分) 2. 商品类目选择 2.1. 原型 2.2. 功能分析 展示商 ...

随机推荐

  1. 为什么ABAP整型的1转成string之后,后面会多个空格

    有同事问这个问题:lv_s是从int4转过来的,长度为2,和硬编码的lv_s2(长度为1)相比,后面多了个空格. 为什么?查SAP ABAP的编程帮助F1 help. 帮助文档说的很清楚了:如果赋值操 ...

  2. Java三大特性之继承

    二.类的继承 1. 概念:从已有的类中派生出新的类,新的类能吸收已有类的属性和行为,并能扩展新的能力. 2. 一个不由任何类派生出来的类称为基类,一个派生类最近的上层类称为该类的父类,从某一类派生出来 ...

  3. liunx 中安装mysql 图形界面 phpmyadmin

    是浏览器图形界面 1. 安装mysql 图形管理工具. 2. 使用phpmyadmin 图像化工具. 3.下载地址  http://www.phpmyadmin.net/ 4. 查看是否安装这两个包 ...

  4. SQL Server连接不上本地服务器

    昨天星期一,到公司,如常打开电脑后,上个厕所,吃个早餐,电脑才完全醒来.打开项目后台,发现登不上,用户名或密码错误,认真输入几遍,还是错误,打开本地数据库,sql server连接不上,提示错误: 我 ...

  5. ios之sqllite3简单使用

    SQLite3是嵌入在iOS中的关系型数据库,对于存储大规模的数据很有效.SQLite3使得不必将每个对象都加到内存中. 基本操作: (1)打开或者创建数据库 sqlite3 *database; i ...

  6. luogu P1042 乒乓球

    题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役.华华就是其中一位,他退役 ...

  7. Linux制作本地yum

    首先在vm上安装centos 1.首先查看挂载光盘的位置:#df -h [root@lang ~]# df -hFilesystem                   Size  Used Avai ...

  8. 上传文件到Ubuntu阿里云服务器(windows到Linux的文件上传)

    上传文件到Ubuntu阿里云服务器(windows到Linux的文件上传) 最近在阿里云上面租了一个轻量级服务器玩玩,学习学习怎么在服务器部署网站.然后嘞,在想要将本地文件上传到服务器的时候,自己研究 ...

  9. python3.x Day6 协程

    协程:#定义来自牛人alex博客协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程.协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈 ...

  10. 条款12:复制对象时勿忘其每一个成分(Copy all parts of an object)

    NOTE: 1.Copying 函数应该确保复制“对象内的所有成员变量”及“所有base class成分”. 2.不要尝试以某个copying函数实现另一个copying函数.应该将共同机能放进第三个 ...