keepalived+nginx實現niginx高可用,宕機自動重啟


nginx作為http服務器,在集群中 用於接受客戶單發送過來的請求,並且根據配置的策略將請求 轉發給具體的哪台服務器

  1. 如果在nginx服務器使用輪詢策略處理客戶端的請求,出現了tomcat 宕機的情況下,例如:有兩個請求,第一個請求輪詢給了tomcat1,按照輪詢的策略,當在來一個請求的時候,這條請求 將交個
    tomcat2處理,此時 如果tomcat2 由於不知名的原因,宕機了,那這條請求 被分配到tomcat2,那這條請求 則會一直得不到響應,用戶也不知道怎么回事。

    nginx提供了宕機容錯機制,當tomcat2宕機以后,nginx可以通過配置超時,超過超時時間以后,則跳過當前服務器,輪詢下一台服務器
    在nginx.conf文件中 配置 proxy_connect_timeout 1 連接超過1s 則跳過當前輪詢

     

  2. nginx作為http服務器,接受來自客戶端的請求,然后根據負載均衡策略,反向代理到集群中的服務器。在集群的過程中,服務器是不會暴露真實的ip地址,集群服務器和nginx服務器是在同一個給局域網,對外暴露也只是nginx服務器的公網ip
  3. 在上面說了,如果是集群中的服務器宕機了,例如tomcat集群中有一台宕機了,nginx的宕機容錯機制會跳過需要輪詢的tomcat,直接輪詢到下一台服務器。如果是nginx服務器宕機以后,又該如何解決,所有的請求都是經過nginx服務器 將請求發送給tomat,tomcat不會暴露真實的ip地址,所以此時的客戶端請求根本無法訪問到tomcat,此時所有的服務器都不能訪問
  4. 在nginx作為http服務器的時候,tomcat宕機了,nginx提供宕機容錯機制,如果nginx服務器自己宕機了,則需要依靠一些重啟腳本的工具,幫助監聽nginx的活動狀態,來保證nginx最大可能的處於正常運行的狀態,使用keepalived的可以監聽重啟 nginx 保證nginx的高可用

    為了預防高並發,所以我們可以對tomcat集群,可以減輕單台服務器的壓力。為了預防nginx宕機,導致外網無法訪問tomcat,所以我們可以對nginx進行類似集群的操作,可以是一主一備,也可以是多主多備,根據實際用戶情況,考慮成本的情況,采用了一主一備。當nginx主機宕機以后,keepalived會監控nginx 發現nginx宕機了,則會自動切換到備機nginx,reids的主從復制中哨兵機制會檢測監控主reids是否宕機,如果宕機了,則從從redis選擇一台來作為master,當原來的主機啟動以后,主機不會切換,但是keepalived+nginx則不會,如果檢測到主nginx啟動以后,則繼續用主nginx如何

 

5 .什么是keepalived  

Keepalived是一個免費開源的,用C編寫的類似於layer3, 4 & 7交換機制軟件,具備我們平時說的第3層、第4層和第7層交換機的功能。主要提供loadbalancing(負載均衡)和 high-availability(高可用)功能,負載均衡實現需要依賴Linux的虛擬服務內核模塊(ipvs),而高可用是通過VRRP協議實現多台機器之間的故障轉移服務。 
 

 

使用keepalived+nginx實現nginx的高可用,宕機從啟

1.需要兩台或者兩台以上的服務器  

ip:192.168.31.144 (主nginx)

ip:192.168.31.179   (從nginx)

2.兩台服務器都需要安裝nginx和keepalived

  Linux安裝nginx可查看:https://www.cnblogs.com/taiyonghai/p/6728707.html

  Linux安裝keepalived

  1. http://www.keepalived.org/download.html    下載keepalived安裝包

  2 將下載好的keepalived安裝包 放到linux  /usr/local目錄下

  3  tar -zxvf keepalived-1.2.18

.

 

 4    yum -y install openssl-deve 安裝所需要的軟件包

 5   cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived 

 6   make&& make install

為了方便統一管理,將解壓編譯好的keepalived 配置文件進行地方修改

 mkdir /etc/keepalived         

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

 ln -s /usr/local/keepalived/sbin/keepalived /sbin/

 

 設置開機啟動:chkconfig keepalived on

  nginx 重啟腳本:

  

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

 

 keepalived最主要的是掌握它的配置文件 主配置文件

 

! Configuration File for keepalived

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #運行腳本,腳本內容下面有,就是起到一個nginx宕機以后,自動開啟服務
    interval 2 #檢測時間間隔
    weight -20 #如果條件成立的話,則權重 -20
}
# 定義虛擬路由,VI_1 為虛擬路由的標示符,自己定義名稱
vrrp_instance VI_1 {
    state MASTER #來決定主從
    interface eno16777736 # 綁定虛擬 IP 的網絡接口,根據自己的機器填寫
    virtual_router_id 121 # 虛擬路由的 ID 號, 兩個節點設置必須一樣
    mcast_src_ip 192.168.31.144 #填寫本機ip
    priority 100 # 節點優先級,主要比從節點優先級高
    nopreempt # 優先級高的設置 nopreempt 解決異常恢復后再次搶占的問題
    advert_int 1 # 組播信息發送間隔,兩個節點設置必須一樣,默認 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 將 track_script 塊加入 instance 配置塊
    track_script {
        chk_nginx #執行 Nginx 監控的服務
    }

    virtual_ipaddress {
        192.168.31.110 # 虛擬ip,也就是解決寫死程序的ip怎么能切換的ip,也可擴展,用途廣泛。可配置多個。
    }
}

 

 從配置文件

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #運行腳本,腳本內容下面有,就是起到一個nginx宕機以后,自動開啟服務
    interval 2 #檢測時間間隔
    weight -20 #如果條件成立的話,則權重 -20
}
# 定義虛擬路由,VI_1 為虛擬路由的標示符,自己定義名稱
vrrp_instance VI_1 {
    state BACKUP #來決定主從
    interface ens33 # 綁定虛擬 IP 的網絡接口,根據自己的機器填寫
    virtual_router_id 122 # 虛擬路由的 ID 號, 兩個節點設置必須一樣
    mcast_src_ip 192.168.31.197 #填寫本機ip
    priority 90 # 節點優先級,主要比從節點優先級高
    nopreempt # 優先級高的設置 nopreempt 解決異常恢復后再次搶占的問題
    advert_int 1 # 組播信息發送間隔,兩個節點設置必須一樣,默認 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 將 track_script 塊加入 instance 配置塊
    track_script {
        chk_nginx #執行 Nginx 監控的服務
    }

    virtual_ipaddress {
        192.168.31.110 # 虛擬ip,也就是解決寫死程序的ip怎么能切換的ip,也可擴展,用途廣泛。可配置多個。
    }
}

  兩台服務器啟動好以后,可以通過ip addr 查看到當前 主機的ip地址中包含了 虛擬的ip地址 如果主機宕機,則該虛擬ip會自動跑到備機

 

 

直接訪問 虛擬ip地址:192.168.31.110

   

關閉主nginx以后以后:

會自動切換到備nginx上面去

 

 

 

  以上 則完成了keepalived+nginx實現 高可用,nginx宕機以后 keepalived完成nginx的自動重啟

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM