首先呢,我想先給大家簡單介紹一下什麼是keepalived:
Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器死機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的服務器。
大家瞭解到Keepalived是什麼東西了之後,咱們就進入主題。
1.下載
http://www.keepalived.org/download.html
或
wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
2.安裝
tar -zxvf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure --prefix=/home/wangpl/mine/soft/keepalived-1.2.2
make && make install
補充: 在大家進行./configure 有的機器會報錯,這裏爲大家提供一個簡單的解決方案。
1.遇到keepalived執行./configure --prefix=/usr/local/keepalived時報錯:configure: error: Popt libraries is required
3.方式
安裝到系統,默認的啓動腳本里寫的是系統路徑,所以需要拷貝一些文件到系統目錄下
$ cp /home/wangpl/mine/soft/keepalived-1.2.2/etc/rc.d/init.d/keepalived /etc/init.d/
$ cp /home/wangpl/mine/soft/keepalived-1.2.2/sbin/keepalived /usr/sbin/
$ cp /home/wangpl/mine/soft/keepalived-1.2.2/etc/sysconfig/keepalived /etc/sysconfig/
$ mkdir -p /etc/keepalived/
$ cp /home/wangpl/mine/soft/keepalived-1.2.2/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
4.試用
進入目錄 進行啓動cd /etc/init.d/
啓動:sh keepalived start
停止:sh keepalived stop
重啓:sh keepalived restart
5. (主從模式)配置keepalived.conf
默認的配置文件中,使用第三方smtp服務器,但這在現實中幾乎沒有意義(需要驗證的原因),我們將其指定爲localhost, 將通知信息的發送交給本地sendmail服務處理。或者把其內容全部刪除掉只留下router_id NodeA。查閱說明文檔得知route_id配置是爲了標識當前節點,我將其設置爲NodeA。當然兩個節點的此項設置可相同,也可不相同。
按同樣的方法配置節點B並修改配置文件,可將A節點的配置文件複製到B節點,並修改以下幾項:
router_id NodeB
state BACKUP
priority 99
其它項不必修改。
測試及驗證:
執行命令 ip a (注意ifconfig命令無法查看到配置的虛擬IP),來查看。
6.(主從模式)腦裂問題
上述主從配置方式存在腦裂的可能,即兩個節點實際都處於正常工作狀態,但是無法接收到彼此的組播通知,這時兩個節點均強行綁定虛擬IP,導致不可預料的後果。
這時就需要設置仲裁,即每個節點必須判斷自身的狀態(應用服務狀態及自身網絡狀態),要實現這兩點可使用自定義shell腳本實現,通過週期性地檢查自身應用服務狀態,並不斷ping網關(或其它可靠的參考IP)均可。當自身服務異常、或無法ping通網關,則認爲自身出現故障,就應該移除掉虛擬IP(停止keepalived服務即可)。主要藉助keepalived提供的vrrp_script及track_script實現:
再在vrrp_instance配置中加入以下代碼使用上面定義的檢測腳本:
我們在/usr/local/keepalived/bin/check_local.sh定義的檢測規則可以是:
以上的路徑及文件是自己定義的。
a.自身web服務故障(超時,http返回狀態不是200)
b.無法ping通網關
c.產生以上任何一個問題,均應該移除本機的虛擬IP(停止keepalived實例即可)
但這裏有個小問題,如果本機或是網關偶爾出現一次故障,那麼我們不能認爲是服務故障。更好的做法是如果連續N次檢測本機服務不正常或連接N次無法ping通網關,才認爲是故障產生,才需要進行故障轉移。另一方面,如果腳本檢測到故障產生,並停止掉了keepalived服務,那麼當故障恢復後,keepalived是無法自動恢復的。我覺得利用獨立的腳本以秒級的間隔檢查自身服務及網關連接性,再根據故障情況控制keepalived的運行或是停止。
這裏提供一個思路,具體腳本內容請大家根據自己的需要編寫即可。
腳本/usr/local/nginx/check_nginx.sh"內容:
//如果以上配置我介紹的不理解的話 大家參考一下實例代碼。
vi /etc/keepalived/keepalived.conf
編輯文件(主):
vi /etc/keepalived/keepalived.conf
編輯文件(從):
啓動並測試:
1.啓動兩臺機器上的nginx
2.啓動兩臺機器上的keepalived
此時使用命令 ip addr 查看虛擬IP綁定 可以看到主 有,從沒有,將主機的keepalived關掉,可以看到vip綁定到了從的上面。
參考地址:
http://www.linuxidc.com/Linux/2012-08/69383.htm
http://www.68idc.cn/help/buildlang/ask/20150616370229.html
http://blog.csdn.net/conquer0715/article/details/47955553