Nginx配置upstream實現負載均衡及keepalived實現nginx高可用

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

1、準備工做算法

一、準備兩個項目,發佈到不一樣的服務器上,此處使用2個虛擬機發布了兩個項目分別爲:http://192.168.28.128:8081,後端

http://192.168.28.129:8081bash

二、在兩個虛擬機上都安裝好nginx服務器

2、配置upstreamsession

一、在任意一臺虛擬機上所安裝的nginx的nginx.conf配置文件中配置upstream以下:負載均衡

 

 

以上是負載均衡的基本配置,當前模式採用的是輪詢的方式負載。除了輪詢,還有weight(權重)、ip_hash(根據訪測試

問ip,解決session問題)、第三方。url

二、根據weight負載router

  upstream blog {
        server 192.168.28.128:8081 weight=2;
        server 192.168.28.129:8081 weight=1;
    }
說明:以上配置表示三次訪問的時候weight=2的服務被訪問兩次,weight=1的服務只被訪問一次。

三、根據ip_hash負載

upstream blog {
        ip_hash;
        server 192.168.28.128:8081;
        server 192.168.28.129:8081;
    }
說明:用戶第一次訪問落在128上,那麼之後該用戶的訪問都會在128的服務器上,如此便可解決session問題。

四、fair第三方

這種方式是按後端服務的響應時間來分配請求,相應時間短的優先分配。

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

        fair;
    }

五、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算法
    }

3、配置keepalived

使用以上配置能夠達到負載均衡的目的,若是使其中一臺機器的服務掛掉,例如使用kill -9將192.168.28.128

的服務(注意:不是nginx掛掉,而是服務掛掉),此時nginx的負載均衡會檢測到128的服務中止,只未來自

客戶端的請求發到129所在的服務器上去,所以也保證了高可用。

那麼若是128機器上的nginx也掛了呢?整個服務確定就不可用了,如何保證nginx也高可用呢?此處使用keepalived

來保證nginx的高可用。

首先在192.168.28.128虛擬機上安裝配置keepalived,以下:

一、安裝keepalived:請參考:http://www.studyshare.cn/blog-front//software/details/1158/1  ,此處再也不贅述

二、配置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,以下:

一、安裝略

二、配置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,啓動方式與主機啓動方式相同。

三、測試

(1)、主機的keepalive被kill前與kill後,從機器上eth0綁定vip狀況以下:

 

總結:keepalived保證了vip在主從機器之間漫遊。誰被kill掉後,vip就漫遊到未被kill掉

四、配置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

相關文章
相關標籤/搜索