Keepalived 實現 nginx 高可用

 1、什麼是 keepalived

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

 

 


  上圖是Keepalived的功能體系結構,大體分兩層:用戶空間(user space)和內核空間(kernel space)。 
內核空間:主要包括IPVS(IP虛擬服務器,用於實現網絡服務的負載均衡)和NETLINK(提供高級路由及其餘相關的網絡功能)兩個部份。 
用戶空間
linux

  • WatchDog:負載監控checkers和VRRP進程的情況
  • VRRP Stack:負載負載均衡器之間的失敗切換FailOver,若是隻用一個負載均稀器,則VRRP不是必須的。
  • Checkers:負責真實服務器的健康檢查healthchecking,是keepalived最主要的功能。換言之,能夠沒有VRRP Stack,但健康檢查healthchecking是必定要有的。
  • IPVS wrapper:用戶發送設定的規則到內核ipvs代碼
  • Netlink Reflector:用來設定vrrp的vip地址等。

  Keepalived的全部功能是配置keepalived.conf文件來實現的。nginx

 

  2、安裝 keepalived

  下載keepalived地址:http://www.keepalived.org/download.html vim

 wget http://www.keepalived.org/software/keepalived-1.4.1.tar.gz  #指定解壓路徑  tar -zxvf keepalived-1.4.1.tar.gz -C /usr/local/
 #安裝依賴的軟件包
 yum install -y openssl openssl-devel
 #安裝和編譯
cd /usr/local/keepalived-1.4.1/ && ./configure --prefix=/usr/local/keepalived

   make && make install服務器

  keepalived安裝成Linux系統服務

   keepalived的默認安裝路徑(默認路徑:/usr/local)此處沒有使用默認安裝方式網絡

mkdir /etc/keepalivedapp

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/負載均衡

而後複製keepalived腳本文件:ide

cp /usr/local/keepalived-1.4.1/keepalived/etc/init.d/keepalived /etc/init.d/ 測試

(或 : 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/sbin/keepalived /usr/sbin/

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

能夠設置開機啓動:chkconfig keepalived on

  service keepalived start

  service keepalived stop

 3、配置nginx主備自動重啓

  兩臺 linux 電腦安裝了 nginx

  備註:nginx 已成功安裝在默認路徑   /usr/local/nginx

  修改 keepalived 的配置文件 vim /etc/keepalived/keepalived.conf

  能夠備份源配置文件粘貼下面配置 mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

  vim /etc/keepalived/keepalived.conf      :wq

  vim /etc/keepalived/nginx_check.sh

  賦予可執行權限:chmod +x /etc/keepalived/nginx_check.sh

  

   /usr/local/nginx/sbin/nginx

 

    service keepalived start

 

    ps -ef | grep nginx

 

    ps -ef | grep 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 enth1 # 綁定虛擬 IP 的網絡接口,根據本身的機器填寫 virtual_router_id 121 # 虛擬路由的 ID 號, 兩個節點設置必須同樣 mcast_src_ip 192.168.110.141 #填寫本機ip priority 100 # 節點優先級,主要比從節點優先級高 nopreempt # 優先級高的設置 nopreempt 解決異常恢復後再次搶佔的問題 advert_int 1 # 組播信息發送間隔,兩個節點設置必須同樣,默認 1s authentication { auth_type PASS auth_pass 1111 } # 將 track_script 塊加入 instance 配置塊 track_script { chk_nginx #執行 Nginx 監控的服務 }i viirtual_ipaddress { 192.168.110.110 # 虛擬ip,也就是解決寫死程序的ip怎麼能切換的ip,也可擴展,用途普遍。可配置多個。 } }
keepalived.conf
nginx_check.sh

   實際配置以下:

  測試

   首先看一下倆臺機器的ip a 命令下 都會出現一個虛擬ip,能夠停掉一個機器的keepalived,而後測試,命令:service keepalived stop。結果發現當前停掉的機器已經不可用,keepalived 配置的虛擬 ip 會自動切換到另外一臺機器上。

  

  中止後:

   

  經過該虛擬 ip 能夠進行訪問 nginx

  

  4、測試 keepalived 重啓 nginx

    強殺掉nginx進程便可,發現也會實現自動切換服務器節點。

  

  5、Keepalived高可用故障切換轉移原理

     Keepalived高可用服務對之間的故障切換轉移,是經過 VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗餘協議)來實現的。

  在 Keepalived服務正常工做時,主 Master節點會不斷地向備節點發送(多播的方式)心跳消息,用以告訴備Backup節點本身還活看,當主 Master節點發生故障時,就沒法發送心跳消息,備節點也就所以沒法繼續檢測到來自主 Master節點的心跳了,因而調用自身的接管程序,接管主Master節點的 IP資源及服務。而當主 Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。

  那麼,什麼是VRRP呢?

  VRRP ,全 稱 Virtual Router Redundancy Protocol ,中文名爲虛擬路由冗餘協議 ,VRRP的出現就是爲了解決靜態踣甶的單點故障問題,VRRP是經過一種競選機制來將路由的任務交給某臺VRRP路由器的。

相關文章
相關標籤/搜索