天天看點

Lvs+heartbeat高可用高性能web站點的搭建

 這是我們公司在實際的生産環境當中使用的一套東西,希望對大家有所幫助(實際的公網ip,我已經做了相應的修改):

說明:每台伺服器需要有兩塊網卡:eth0連接配接内網的交換機,用私網ip,實作伺服器間内部通路;eth1連接配接公網交換機,供外網通路。如果想節約成本可以隻用一個交換機,劃分2個vlan分别連接配接内網和外網也可以,但這樣有風險,一旦交換機出問題,内網和外網都不能通路,一定要權衡一下得失。

<a href="http://gehailong.blog.51cto.com/attachment/201110/21/765312_1319156305Uxle.jpg"></a>

各個伺服器ip配置如下:

主ha  eth1:1.1.1.14   eth0:192.168.1.8(心跳)

從ha  eth1:1.1.1.15   eth0:192.168.1.30(心跳)

real1:eth1:1.1.1.16 eth0:192.168.1.9

real1:eth1:1.1.1.16 eth0:192.168.1.10

real1:eth1:1.1.1.16 eth0:192.168.1.11

real1:eth1:1.1.1.16 eth0:192.168.1.12

一. 主ha的配置:

1. hosts檔案的内容如下(如果有自己的DNS的話,也可以用DNS做解析):

127.0.0.1 primary.fantong.com localhost.localdomain localhost 

::1  localhost6.localdomain6 localhost6 

1.1.1.14  primary.fantong.com 

192.168.1.8  primary.fantong.com 

1.1.1.15  backup.fantong.com 

192.168.1.30  backup.fantong.com

2.修改主機名: 編輯/etc/sysconfig/network

HOSTNAME=primary.fantong.com

3. 用指令修改一下主機名:

#hostname primary.fantong.com

4. 安裝軟體

yum -y install libnet

yum -y install heartbeat-*

yum -y install heartbeat(如果報錯,再安裝一次就ok了)

yum  -y install ipvsadm

如果是redhat系統沒有yum源的話,可以參考我的一篇部落格文章來更改yum的一些設定: http://gehailong.blog.51cto.com/765312/610127

5. 軟體安裝完成以後會生成目錄/etc/ha.d,該目錄下存放heartbeat 的配置檔案,驗證檔案,資源檔案(腳本,注意:在heartbeat中,腳本都被稱為資源)等,這三個檔案是必不可少的,本文中這三個檔案都是我手工寫的。

1). Heatbeat的主配檔案:/etc/ha.d/ha.cf/ha.cf

logfile /var/log/ha-log 

debugfile /var/log/ha-debug 

logfacility     local0  

keepalive 2 #主從切換的保持時間 

deadtime 30 #宣布對方死亡時間 

warntime 10 #警告時間 

udpport 694 #主從之間的通信端口 

ucast eth0 192.168.1.30  #采用單點傳播方式探測心跳,bcast是廣播方式;後面的位址是對端位址 

auto_failback on #自動恢複,就是說如果主從故障中恢複會搶回主的位置 

node    primary.fantong.com #主節點主機名 

node    backup.fantong.com #從節點主機名 

ping 192.168.1.30 

ping_group lbgroup 1.1.1.14 1.1.1.15 

ping_group lbgroup 192.168.1.8 192.168.1.30 

respawn hacluster /usr/lib64/heartbeat/ipfail  #如果是32位系統,則目錄應該為/usr/lib/heartbeat/ipfail 

apiauth ipfail gid=haclient uid=hacluster #驗證用的使用者群組ID(已經自動建好了)

2). 資源清單 /etc/ha.d/haresources後面跟的是資源名(腳本),要保證跟backup的内容完全一緻。

primary.fantong.com lvs ldirectord

3). 驗證檔案 /etc/ha.d/authkeys 主從驗證 testlab驗證密碼 ,要保證跟backup的内容一緻,否則主從驗證失敗。注意:改為該檔案權限必須為600

auth1 

1 sha1 testlab

6. 在安裝heatbeat-*的時候會安裝一個叫heartbeat-ldirectord 的檔案,他的作用是管理後端的realserver。比如後端某個realserver死掉了,他會自動從清單當中删除該資源,當該資源恢複後再自動添加進去。配置檔案是:/etc/ha.d/ldirectord.cf ,内容如下(是我自己手工寫的):

# Global Directives監控realserver 

checktimeout=3 #realserver逾時時間 

checkinterval=1 #檢查的間隔時間 

fallback=127.0.0.1:80 #如果所有realserver當機,由誰來承擔 

autoreload=yes 

logfile="/var/log/ldirectord.log" 

emailalertfreq=3600 

emailalertstatus=all 

quiescent=no #如果realserver出問題,立即從資源清單删除 

# Sample for an http virtual service 

virtual=1.1.1.13:80  #(注意這個檔案的格式,下面的内容必須至少空4格) 

   real=1.1.1.16:80 gate #gate表示采用的是lvs中DR模式,有關lvs的模式和工作原理大家可以查找相關資料來了解一下。 

     real=1.1.1.17:80 gate 

real=1.1.1.18:80 gate

real=1.1.1.19:80 gate 

fallback=127.0.0.1:80 gate 

service=http 

scheduler=wrr #realserver的調動方法:權重輪訓 

persistent=5 #用戶端連接配接的持久時間 

protocol=tcp 

checktype=connect 

   checkport=80

7. 該腳本的作用是啟動資源 /etc/init.d/lvs

#!/bin/bash 

# description: start LVS of DirectorServer 

# website director vip. 

GW=1.1.1.13  #網關位址千萬不要填錯了,否則你的輔助(浮動)ip是無法通路的。 

WEB_VIP=1.1.1.13 

WEB_RIP1=1.1.1.16 

WEB_RIP2=1.1.1.17 

WEB_RIP3=1.1.1.18

WEB_RIP3=1.1.1.19 

. /etc/rc.d/init.d/functions 

logger $0 called with $1 

case "$1" in 

start) 

# Clear all iptables rules. 

/sbin/iptables –F #這個地方要注意一下,如果公司最外端有防火牆,就可以清空iptables内容(都做允許,或者停止),把改行注釋掉;如果沒有就需要有防火牆了,自己寫政策或者寫腳本。 

# Reset iptables counters. 

/sbin/iptables –Z #同上 

# Clear all ipvsadm rules/services. 

/sbin/ipvsadm -C 

#set lvs vip for dr 

/sbin/ipvsadm --set 30 5 60 

/sbin/ifconfig eth1:0 $WEB_VIP broadcast $WEB_VIP netmask 255.255.255.255 up 

/sbin/route add -host $WEB_VIP dev eth1:0 

/sbin/ipvsadm -A -t $WEB_VIP:80 -s wrr -p 3 

/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP1:80 -g -w 1 

/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP2:80 -g -w 1

/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP3:80 -g -w 1

/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP4:80 -g -w 1

touch /var/lock/subsys/ipvsadm &amp;gt;/dev/null 2&amp;gt;&amp;1 

# set Arp 

/sbin/arping -I eth1 -c 5 -s $WEB_VIP $GW &amp;gt;/dev/null 2&amp;gt;&amp;1 

;; 

stop) 

/sbin/ipvsadm -Z 

ifconfig eth1:0 down 

route del $WEB_VIP &amp;gt;/dev/null 2&amp;gt;&amp;1 

rm -rf /var/lock/subsys/ipvsadm &amp;gt;/dev/null 2&amp;gt;&amp;1 

/sbin/arping -I eth1 -c 5 -s $WEB_VIP $GW 

echo "ipvsadm stoped" 

status) 

if [ ! -e /var/lock/subsys/ipvsadm ];then 

echo "ipvsadm is stoped" 

exit 1 

else 

ipvsadm -ln 

echo "..........ipvsadm is OK." 

fi 

*) 

echo "Usage: $0 {start|stop|status}" 

esac

exit 0

8.  做一下兩步操作:

chmod 755 /etc/init.d/lvs 

     ln -s  /etc/init.d/lvs  /etc/ha.d/resource.d  #啟動ldirectord的時候它會從/etc/init.d 和/etc/ha.d/resource.d 目 錄裡面搜尋資源(腳本)。

9. 讓heartbeat開機自啟動。

chkconfig   heartbeat  on

二.  backup上面的配置

1.安裝軟體包,同primary

2. 把primary上所有的腳本拷貝到backup上面,包括hosts檔案,/etc/ha.d/*裡面的所有的内容。

3.修改/etc/ha.d/ha.cf。其他檔案的内容與主的保持一緻就可以。

ucast eth0 192.168.1.8  #采用單點傳播方式探測心跳,bcast是廣播方式;後面的位址是對端位址(主的ip) 

.........

ping 192.168.1.8

4. chkconfig heartbeat  on

三. realserver的配置

1. 編寫腳本/root/real.sh,主要作用是屏蔽arp,否則的話會與其他realserver和ha的位址發生沖突,腳本内容如下:

#/bin/sh 

VIP=1.1.1.13 

source /etc/rc.d/init.d/functions 

echo "start LVS of RealServer" 

/sbin/ifconfig lo:0 ${VIP} broadcast ${VIP} netmask 255.255.255.255 up 

echo "1" &amp;gt;/proc/sys/net/ipv4/conf/lo/arp_ignore 

echo "2" &amp;gt;/proc/sys/net/ipv4/conf/lo/arp_announce 

echo "1" &amp;gt;/proc/sys/net/ipv4/conf/all/arp_ignore 

echo "2" &amp;gt;/proc/sys/net/ipv4/conf/all/arp_announce 

/sbin/ifconfig lo:0 down 

echo "Close LVS of RealServer" 

echo "0" &amp;gt;/proc/sys/net/ipv4/conf/lo/arp_ignore 

echo "0" &amp;gt;/proc/sys/net/ipv4/conf/lo/arp_announce 

echo "0" &amp;gt;/proc/sys/net/ipv4/conf/all/arp_ignore 

echo "0" &amp;gt;/proc/sys/net/ipv4/conf/all/arp_announce 

echo "wrong,please use start|stop" 

2. 修改一下腳本權限:chmod 755 real.sh

3. 啟動腳本/root/real.sh start

4. 加入啟動項:

修改/etc/rc.local在最後寫入一行

/root/real.sh  start

四. 測試。

1. 在主從上面分别啟動heartbeat。(注意:先主後從)

service heartbeat start

2. 觀察主日志檔案/var/log/ha-log

<a href="http://gehailong.blog.51cto.com/attachment/201110/21/765312_13191563064kKn.jpg"></a>

看到後面兩行表示已經啟動完畢,資源加載成功。

3. 觀察從日志檔案/var/log/ha-log

<a href="http://gehailong.blog.51cto.com/attachment/201110/21/765312_1319156307INB3.jpg"></a>

本文轉自 gehailong 51CTO部落格,原文連結:http://blog.51cto.com/gehailong/693717,如需轉載請自行聯系原作者

繼續閱讀