輕鬆實現web高可用!(keepalived實戰講解)

Keepalived是爲了實現LVS(持久連接)高可用而應運而生的一款獨具特色的軟件,以其獨特的使用方式受到廣大愛好者的追捧,下邊我本就詳細講解一下其內容。

Keepalived簡介

 正如開頭所說,keepalived主要是爲了實現LVS的高可用而產生的,爲此他實現瞭如下三個功能:ip地址轉移、LVS規則轉移和後端服務器健康狀況檢測。我們來一一分析。

VRRP協議

 Keepalived如何實現ip地址轉移的功能呢?這裏就不得不提到VRRP協議(虛擬路由冗餘協議)了,它是一種爲了解決網絡高可用的實現機制,它能實現路由網關地址的漂移,以解決網關損壞而帶來的網絡故障。而keepalivedip地址轉移功能正是通過軟件的方式模擬了VRRP協議的實現,其工作示意圖如下:



1


 一旦master出現故障,VRRP會根據優先級的高低在多個路由上選擇master,並嘗試重新獲取原來master信息,如果在規定時間段內沒有應答,新的網關將漂移到新master上。而多個路由之間則通過互傳在線信息以確保自己的狀態,一旦發現沒有信息,在等待一定時間段後便可頂替成爲master。這就是VRRP的工作流程。它還有很多的定義,如:

備份組:將多個網關設備組成一個虛擬設備,這個虛擬設備就叫備份組

角色:分爲主設備和從設備,與其優先級有關。只能有一個主,可以有多個從。等

雙主模型:使多臺設備互爲主從關係來實現其功能。

這些都能在官方文檔中找到,就不在多講了。主要在於keepalived正是藉助於這個協議,運用內部模塊虛擬出其功能,來實現ip地址轉移功能。

LVS規則轉移和後端服務器健康狀況檢測

 Keepalived的另外兩個功能則是通過內部機制來模擬實現的,我們將在後邊的實現配置下詳細講解,這裏就不羅嗦了。要注意的是,根據LVS的特性,keepalived分爲主從模型和雙主模型。

Keepalived的作用

說到其作用,我們就不得不先看一張圖,如下:

2 官方工作模型

從圖上我們不難看出,keepalived設計的最初目的就是爲了實現LVS的高可用。但是我們知道如果要實現其高可用我們還可以用corosync等來實現,爲什麼要用keepalived呢?因爲其使用簡單,所以深受大家喜歡。另外它還用作RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現。高可用web架構:LVS+keepalived+nginx+apache+php+eaccelerator


Keepalived實現和配置

Keepalived的實現依賴於其配置文件和諸多的腳本,其不同模型的配置不同,下邊我們用Keepalived+HAProxy配置高可用負載均衡:

1、在節點上安裝keepalived


2、查看主從模型的配置文件;cat /etc/keepalived/keepalived.conf 格式如下

! Configuration File for keepalived  


global_defs {

 notification_email {  

       [email protected]

       [email protected]  

 }  

 notification_email_from [email protected]

 smtp_connect_timeout 3  

 smtp_server 127.0.0.1  

 router_id LVS_DEVEL  

}  


vrrp_script chk_haproxy {  

  script "killall -0 haproxy"

  interval 1  

  weight 2  

}  


vrrp_script chk_mantaince_down {

 script "[[ -f /etc/keepalived/down ]] && exit 1 || exit0"

  interval1

 weight 2

}


vrrp_instance VI_1 {  

  interface eth0  

  state MASTER  # BACKUP for slaverouters

  priority 101  # 100 for BACKUP

  virtual_router_id 51

  garp_master_delay 1


  authentication {  

      auth_type PASS  

       auth_pass password  

  }  

  track_interface {  

     eth0    

  }  

  virtual_ipaddress {  

      172.16.100.1/16 dev eth0 label eth0:0

  }  

  track_script {  

      chk_haproxy  

      chk_mantaince_down

  }  



  notify_master "/etc/keepalived/notify.sh master"  

  notify_backup "/etc/keepalived/notify.sh backup"  

  notify_fault "/etc/keepalived/notify.sh fault"  

}


注意:
1、上面的state爲當前節點的起始狀態,通常在master/slave的雙節點模型中,其一個默認爲MASTER,而別一個默認爲BACKUP。
2、priority爲當關節點在當前虛擬路由器中的優先級,master的優先級應該大於slave的;
其中global_defs表示全局模式,vrrp_instance用來定義虛擬路由組的。
3、提供notify.sh腳本
#!/bin/bash
# 
vip=172.16.100.1
contact='root@localhost'
Notify() {
    mailsubject="`hostname` to be $1: $vip floating"
    mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"
    echo $mailbody | mail -s "$mailsubject" $contact
}
case "$1" in
    master)
        notify master
        /etc/rc.d/init.d/haproxy start
        exit 0
    ;;
    backup)
        notify backup
        /etc/rc.d/init.d/haproxy restart
        exit 0
    ;;
    fault)
        notify fault
        exit 0
    ;;
    *)
        echo 'Usage: `basename $0` {master|backup|fault}'
        exit 1
    ;;

esac

4、安裝HAProxy

tar xf haproxy-1.4.20.tar.gz

cd haproxy-1.4.20

make TARGET=linux26PREFIX=/usr/local/haproxy install

cd /usr/local/haproxy/

mkdir conf logs

cd conf/

vim haproxy.cfg

/usr/local/haproxy/sbin/haproxy-f /usr/local/haproxy/conf/haproxy.cfg


haproxy.cfg

=============

global

log127.0.0.1 local3 info

maxconn4096 #單個進程的最大併發連接數

usernobody

groupnobody

daemon#進程在後臺運行

nbproc1 #創建一個進程

pidfile/usr/local/haproxy/logs/haproxy.pid

defaults

maxconn2000 #最大連接數

contimeout5000 #連接超時

clitimeout30000 #客戶端超時

srvtimeout30000 #服務器超時

modehttp #http 7層模式

logglobal

log127.0.0.1 local3 info

statsuri /admin?stats #統計頁面url

optionforwardfor #後端服務器獲取用戶IP

listen web0.0.0.0:80

modehttp

statsenable

balanceroundrobin #負載均衡的方式

cookieSERVERID insert indirect nocache #客戶端的cookie信息

optionhttpclose #每次請求完畢後主動關閉http通道

optionforwardfor

optionhttpchk HEAD /index.html HTTP/1.0 #健康檢查

serverserver1 1.1.1.10:80 cookie 1 check inter 2000rise 2 fall 5

serverserver2 1.1.1.20:80 cookie 2 check inter 2000rise 2 fall 5

#cookie 1 標識serverid爲 1

#check inter 2000檢測心跳頻率

#rise 2 2次正確認爲服務器可用

#fall 5 5次失敗認爲服務器不可用

5、測試負載均衡效果以及高可用性 負載均衡測試:
啓動真實服務器的web服務,在2個真實服務器上創建2個首頁文件,內容分別爲test1和test2,如果在瀏覽器上訪問web服務每次刷新既顯示test1又顯示tetst2就說明負載均衡已經生效了.
6、高可用性測試:
拔掉主調度服務器的網線或者關閉主調度服務器,看下VIP是否順利的切換到從調度器,假如切換正常,那就說明keepalived已經成功生效了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章