天天看點

Keeplived配置Nginx雙機高可用

  一、簡介

不管是Keepalived還是Heartbeat做高可用,其高可用,都是站在伺服器腳本去說的高可用,而不是服務的角度。

也就是說,如果伺服器DOWN機或者網絡出現故障,高可用是可以實作自動切換的。如果運作的服務,比如Nginx挂掉

這些高可用軟體是意識不到的,需要自己寫腳本去實作服務的切換。

二、安裝配置Keepalived

複制内容到剪貼闆

<code># ./configure # make # make install # cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ # cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ # cp /usr/local/sbin/keepalived /usr/bin/ # chkconfig --add keepalived  # mkdir /etc/keepalived/ # cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/</code>

編輯MASTER的主配置檔案(MASTER: 1.1.1.1)

<code># vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs {    router_id LVS_DEVEL } vrrp_script chk_nginx {         script "/opt/monnginx.sh"         interval 2         weight 2 } vrrp_instance VI_1 {     state MASTER     interface eth0     virtual_router_id 51     priority 100     advert_int 1     authentication {         auth_type PASS         auth_pass mdnginx     }     virtual_ipaddress {         1.1.1.100     }     track_script {         chk_nginx   } }</code>

編輯BACKUP的主配置檔案(BACKUP:1.1.1.2)

<code># vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs {    router_id LVS_DEVEL } vrrp_script chk_nginx {         script "/opt/monnginx.sh"         interval 2         weight 2 } vrrp_instance VI_1 {     state BACKUP     interface eth0     virtual_router_id 51     priority 100     advert_int 1     authentication {         auth_type PASS         auth_pass mdnginx     }     virtual_ipaddress {         1.1.1.100     }     track_script {         chk_nginx   } }</code>

三、啟動服務與腳本編寫(主機和備機都要執行)

<code># service nginx start # service keepalived start</code>

編寫監控Nginx的腳本

<code># vim /opt/monnginx.sh #!/bin/bash # author: honway.liu # date: 2013-03-15 if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then         service nginx start fi sleep 3 if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then         service keepalived stop fi</code>

改進腳本,加上報警功能。

<code># vim /opt/monnginx.sh #!/bin/bash # author: honway.liu # date: 2013-03-15 IPADDR=$(ip addr show eth0|awk '{print $2}' | sed -n 3p) contact=([email protected]) num=${#contact[@]} function email() { for ((i=0;i&lt;num;i++));do         echo "$IPADDR service problem" | mail -s "WARNING" ${contact[i]} -- -f [email protected] done } if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then         service nginx start fi email sleep 3 if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then         service keepalived stop email fi</code>

這裡的報警使用的是139郵箱,在139郵箱裡面設定有郵件的時候,通知到手機,并且以長短信的方式。

需要開戶本機的sendmail服務。'

本文轉自 gm100861 51CTO部落格,原文連結:http://blog.51cto.com/gm100861/1155549

繼續閱讀