天天看點

keepalived雙機熱備nginx

  nginx目前是我最常用的反向代理服務,線上環境為了能更好的應對突發情況,一般會使用keepalived雙機熱備nginx或者使用docker跑nginx叢集,keepalived是比較傳統的方式,雖然用docker跑nginx叢集更友善,但傳統的方式總是有他的可取之處,并且多學一些東西也很好。以後也會寫如何使用docker跑nginx叢集。

  環境準備:

  2台centos: 192.168.0.105 和192.168.0.118, 虛拟IP(VIP)為192.168.0.119

配置keepavlived

  分别在105和118上安裝keepalived

yum install keepalived      

  準備心跳角本

  keepalived的配置相當靈活,可以定時執行角本指令,用于心跳檢查,比如,我們通路nginx發現nginx不可通路時,就關閉keepalived,進而切換到從nginx來實作不間斷的服務支援。

vi /etc/keepalived/keepalived.conf      
#!/bin/bash

count=0
for (( k=0; k<2; k++ ))
do
   check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\\n" http://localhost:81 -o /dev/null )
   if [ "$check_code" != "200" ]; then
       count=count +1
       continue
   else
       count = 0
       break
   fi
done
if [ "$count" != "0" ]; then
   killall keepalived
   exit 1
else
   exit 0
fi      

  這段角本的意思就是說每次的心跳檢查會執行一個for循環,通路http://localhost:81,在for的2次循環中如果傳回的狀态都不是200就會關閉keepalived。這個角本在105和118兩台機器上都要準備好。

  設定118機器上的keepalived為主節點,105機器上的keepalived為從節點,它們兩個的配置檔案差不太多

vi /etc/keepalived/keepalived.conf      

  118機器keepalived的配置檔案

! Configuration File for keepalived
vrrp_script chk_nginx {
   script "/etc/keepalived/check_nginx.sh" # 心跳檢測角本
   interval 2 #腳本執行間隔,每2s檢測一次
   weight -5 #腳本結果導緻的優先級變更,檢測失敗(腳本傳回非0)則優先級 -5
   fall 3 #檢測連續2次失敗才算确定是真失敗。會用weight減少優先級(1-255之間)
   rise 2 #檢測1次成功就算成功。但不修改優先級
}

vrrp_instance VI_1 {
   state MASTER #指定keepalived的角色,MASTER表示此主機是主伺服器,BACKUP表示此主機是備用伺服器
   interface eth0 #指定監測網絡的接口。執行個體綁定的網卡,因為在配置虛拟IP的時候必須是在已有的網卡上添加的
   mcast_src_ip  192.168.0.118 ## 發送多點傳播資料包時的源IP位址
   virtual_router_id 51 #虛拟路由辨別,MASTER和BACKUP必須是一緻的
   priority 100 #定義優先級,數字越大,優先級越高
   advert_int 2 #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,機關是秒
   authentication { #設定驗證類型和密碼。主從必須一樣
       auth_type PASS #設定vrrp驗證類型,主要有PASS和AH兩種
       auth_pass 1111 #設定vrrp驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信
   }
   virtual_ipaddress {
       192.168.0.119 #VRRP 虛拟位址 如果有多個VIP,換行填寫
   }
   track_script {
      chk_nginx # 心跳腳本,即在 vrrp_script 部分指定的名字
   }
}      

115機器上的角本對上面的角本稍做變動即可

改變 state MASTER -> state BACKUP,priority 100 -> priority 90,mcast_src_ip 192.168.0.118 -> mcast_src_ip 192.168.0.105。其他的地方保持不變,是不是很簡單。

! Configuration File for keepalived
vrrp_script chk_nginx {
   script "/etc/keepalived/check_nginx.sh"
   interval 2
   weight -5
}

vrrp_instance VI_1 {
   state BACKUP # 修改
   interface eth0
   mcast_src_ip  192.168.0.105 # 修改 為本機IP
   virtual_router_id 51
   priority 90  #數字變小
   advert_int 2
   authentication {
       auth_type PASS
       auth_pass 1111
   }
   virtual_ipaddress {
       192.168.0.119
   }
   track_script {
      chk_nginx
   }
}      

到這裡keepalived的簡單配置就完成了下面就啟動keepalived

service keepalived start      

安裝Nginx

檢視nginx的依賴庫是否完整

rpm -qa zlib

rpm -qa zlib-devel

rpm -qa openssl

rpm -qa openssl-devel

rpm -qa pcre

rpm -qa pcre-devel

rpm -qa gcc

keepalived雙機熱備nginx

如果沒有就安裝

yum -y install gcc zlib zlib-devel openssl openssl-devel pcre-devel      

下載下傳并解壓nginx

mkdir nginxsrc
cd nginxsrc/      
keepalived雙機熱備nginx
wget http://nginx.org/download/nginx-1.13.9.tar.gz
 
tar zxvf nginx-1.13.9.tar.gz
 
cd nginx-1.13.9/      
keepalived雙機熱備nginx
./configure --prefix=/usr/local/nginx   --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module      

安裝在/usr/local/nginx/sbin/nginx 目錄下

make&&make install      
keepalived雙機熱備nginx

執行成功後會顯示leaving directory 

keepalived雙機熱備nginx

啟動

/usr/local/nginx/sbin/nginx      
keepalived雙機熱備nginx

檢查

ps aux|grep nginx      
keepalived雙機熱備nginx

開機啟動

vi /etc/rc.local

添加一行

/usr/local/nginx/sbin/nginx

keepalived雙機熱備nginx

 因為我的機器上80端口被别的應用占用了,是以就修改105和118的 nginx.conf 把端口80 修改為81

vi /usr/local/nginx/conf/nginx.conf

keepalived雙機熱備nginx

 分别個性105 和119上的index.html 加上一個ip以便們們識别打開的是哪個ip上的index.html

vi /usr/local/nginx/html/index.html 

keepalived雙機熱備nginx

nginx重新加載配置

/usr/local/nginx/sbin/nginx -s reload      

好了,我們通路一下

curl 192.168.0.119:81      

傳回的html是 118機器上的index.html

keepalived雙機熱備nginx

 現在我們把118的nginx停止

/usr/local/nginx/sbin/nginx -s stop      

這時118上的keepalived的心跳檢查角本發現nginx無法通路會把keepalived關閉,然後轉向從節點

我們再通路一下119

curl 192.168.0.119:81      
keepalived雙機熱備nginx

在118上重新啟動nginx和keepalived

再通路119 傳回的網址是118上的index.html

作者:李鵬

出處:http://www.cnblogs.com/li-peng/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

繼續閱讀