天天看點

heartbeat+lvs+ldirectord 叢集

 第一,系統規劃                        Heartbeat +LVS+Ldirectord

1 需要的源碼包

      ipvsadm-1.24 需要linux 核心為2.6.18 ,同時也需要編譯核心。

2.規劃網絡

   VIP  192.168.10.100

   HA1  192.168.10.10

        192.168.20.10

   HA2   192.168.10.20

         192.168.20.20

   RealServer1  192.168.10.1

   RealServer2  192.168.10.2

3 在heartbeat節點上修改主機名

  #vim /etc/sysconfig/network

HOSTNAME= ha1 并儲存,隻有重新開機或者登出時時才生效

  #hostname  ha1 #立即生效

  # vim /etcsysconfig/network

HOSTNAME=ha2

  # hostname  ha2

4 在heartbeat 節點上hosts 檔案中添加如下

   192.168.10.10   ha1

   192.168.10.20  ha2

   192.168.20.10  ha010

   192.168.20.20  ha020

第二, 編譯核心并讓 linux-2.6.18.tar.gz

1 解壓核心linux-2.6.18.tar.gz

 # tar xvf linux-2.6.18.tar.gz 

 #mv   linux-2.6.18  /usr/src/

2 因為linux系統默下是在尋找linux 目錄是以建立連接配接

   #ln  -sv  linux-2.6.18   linux

3,拷貝/boot/config-2.6.18-164.el5 到linux 目錄下面

   #cp /boot/config-2.6.18-164.el5  /usr/src/linux/.config

4 編譯核心

    如果以前編譯過核心,并且想删除編譯過的核心

    # make mrproper

5 編譯核心的命為

      #make  menuconfig  或者make  xconfig  

6 選擇核心支援IPvsadm

      Code maturity level options --->

[*] Prompt for development and/or incomplete code/drivers

Networking options --->

[*] Network packet filtering (replaces ipchains)

[ ] Network packet filtering debugging

...

IP: Netfilter Configuration --->

IP: Virtual Server Configuration --->

<M> virtual server support (EXPERIMENTAL)

[*] IP virtual server debugging

(12) IPVS connection table size (the Nth power of 2)

     --- IPVS scheduler

<M> round-robin scheduling

<M> weighted round-robin scheduling

<M> least-connection scheduling scheduling

<M> weighted least-connection scheduling

<M> locality-based least-connection scheduling

<M> locality-based least-connection with replication scheduling

<M> destination hashing scheduling

<M> source hashing scheduling

--- IPVS application helper

<M> FTP protocol helper

7 安裝核心

     make bzImage;make modules  ;make modules_install : make install

8 編譯完成後重新開機伺服器,并選擇啟動編譯後的核心,并檢視編譯後的核心是不是支援ipvsadm

#grep   ip_vs_init   /boot/System.map

第三.安裝ipvsadm 和heartbeat

      1 安裝ipvsadm

       # tar  -vfx    ipvsadm-1.24.tar.gz

       #cd   ipvsadm-1.24

       #./configure && make  &&make install

      2 安裝libnet

        #tar xvf  libnet-1.1.2.1.tar.gz 

       #cd  libnet

       #./configure  && make && make install

     3 安裝heartbeat

        #tar –xvf  heartbeat-2.0.7.tar.gz

        #cd  heartbeat-2.0.7.

        #./configure  && make && make install

        # cd  doc/

        #cp  authkeys   haresources   ha.cf  /etc/ha.d/

        #cd ../ldirectord/

        #cp  ldirectord.cf  /etc/ha.d

      4 修改 authkeys ,并修改權限

         #vim authkeys

            auth 1

1 crc 

          #chmod  0600 authkeys

      5 配置heartbeat主配置檔案

         #vim  ha.cf

          debugfile /var/log/ha-debug # heartbeat的調試資訊

logfile /var/log/ha-log    #hearbeat 的日志資訊

logfacility local7

keepalive 2  #指明心态時間為2秒,即是每個兩秒在eth1 放松一下廣播

deadtime 30  #指定在三十秒内沒有心跳資訊,就立即切換服務

warntime 10  # 指明心跳延遲的時間為十秒,當十秒鐘内備份機聯系不上,即目前活動的伺服器無心跳信号,就會在日志中寫一個警告日志,但不會切換服務

nitdead 120   #網絡啟動的時間

udpport 694   #廣播/單波通訊使用的udp端口

baud 19200    #使用序列槽的波特率,和serial以前使用

#mcast  eth1 192.168.20.10  如果采用多點傳播通訊,該處設定多點傳播通訊所使用的接口

ucast eth1 10.90.20.10 #master lvs ip   如果采用的是單波,該處設定其網絡接口叢集使用的IP位址  注意在該處的IP 位址為 Master 主配置檔案中為Back eth1 的IP位址 ,Back 在該處的位址為Master eth1 的位址

auto_failback on    # 在主節點回複正常情況下,主動接管資源

node ha10 #master lvs hostname  主節點 該處的節點名必須和uname –n 相比對

node ha20 #slave lvs hostname   輔助接點

respawn root /usr/lib/heartbeat/ipfail   #have to give a permission

apiauth ipfail gid=root uid=root

6 配置heartbeat的資源檔案

     #vim  haresources  在其尾端添加

          Ha10  IPaddr:: 192.168.10.100  lvs  ldirectord

對應的分别是: 主節點   IPaddr:: 192.168.10.100 是虛拟Ip位址  lvs 是用來啟動lvs 的腳本,ldirecord 是監聽主節點和這是伺服器的資源配置檔案

7 配置ldirectord.cf

     checktimeout=20   #ldirectord 等待健康檢查執行完畢的等待時間,如果在設定時間内沒有完成檢查,ldirectord 則會從ipvs 表中删除真實伺服器

    checkinterval=60  #ldirectord 在兩個檢查之間的時間間隔

fallback=127.0.0.1:80  #當所有的真實伺服器當機時,所有的通路都放松的本主機上的apache服務上

autoreload=yes   #自動讀取配置檔案

logfile="/var/log/ldirectord.log" #ldirectord 的日志檔案

logfile="local0"

quiescent=no  #當一個節點在checktimeout設定的時間周期内沒有響應是它是“靜止的”(它的權重為0),當你設定了這個選項後,ldirectord将會從IPVS表中移除真實伺服器而不是“停止”它,從IPVS表移除節點将中斷現有的用戶端連接配接,并使LVS丢掉所有的連接配接跟蹤記錄和持續連接配接模闆,如果你不将這個選項設定為no,當某個節點崩潰時,對某些用戶端計算機而言可能會顯示為叢集關閉了,因為在這個節點崩潰前這些用戶端計算機被配置設定給它了,而連接配接跟蹤記錄和程式連接配接模闆仍然保留在Director上。

# A sample virual with a fallback that will override the gobal setting

virtual=192.168.10.100:80  #虛拟Ip 即使對外提供服務的ip位址

real=192.168.10.1.:80 gate   #真實伺服器 當然gate 後面還可以指明權重

real=192.168.10.2:80 gate

# real=192.168.6.6:80 gate

fallback=127.0.0.1:80 gate

service=http  #服務類型

request=".ldirectord.html " #must be created on real server too  這是ldirectord 檢測真實伺服器是的伺服器是否存活的檔案

receive="OK" #this is .ldirectord.html content  #監測的檔案中必須包含OK 這樣的字元,ldirectord 才能識别該服務正常,否則為所失敗

# virtualhost=some.domain.com.au

scheduler=wrr  # 此處要和配置的lvs 的排程算法一緻

#persistent=600

#netmask=255.255.255.255

protocol=tcp

checktype=negotiate  # ldirectord 使用什麼的方法檢測這不是伺服器,如果真實服務在設定的時間内沒有傳回,自己指定的資訊,則該節點就被認為已經死掉了

8 配置友好頁面傳回資訊,即使當所有的RealServer 出現問題的時,并能為使用者提供一些友好的服務資訊的頁面

# cd /etc/ha.d/resource.d

  ln  -vs  /etc/init.d/httpd   ./

9 lvs 的啟動腳本 ,并把該腳本拷貝到/etc/init.d/lvs ,且修改權限

注: 該腳本是在排程器上執行的,即是heartbeat節點上執行的

   #vim lvs

   !/bin/bash

#chkconfig: 354 20 80

#description: start lvs

VIP=192.168.10.100

RIP1=192.168.10.1

RIP2=192.168.10.2

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

case "$1" in

                start)

                        echo "start lvs"

                        #set VIP

                        /sbin/ifconfig eth0:0 $VIP netmask 255.255.255.255

                        /sbin/route add -host $VIP dev eth0:0

                        #clean IPVS table

                        /sbin/ipvsadm -C

                        #set lvs

                                /sbin/ipvsadm -A -t $VIP:80 -s rr

                                /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g

                                /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g

                        #run lvs

                        /sbin/ipvsadm

                        #end

                        ;;

                stop)

                        echo "stop lvs"

                *)

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

                       ;;

                exit 1

esac

  #chmod  755 /etc/init.d/lvs

第四, 配置RealServer ,即使真實伺服器,并把下面的腳本拷貝到/etc/init.d/RealServer ,并修改權限

  注:該腳本是在真實伺服器上啟動的

     #vim RealServer

VIP=192.168.2.173

host=`/bin/hostname`

                        #start lvs

                        /sbin/ifconfig lo down

                        /sbin/ifconfig lo up

                        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore

                        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce

                        echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

                        echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

                        sysctl -p > /dev/null 2>&1

                        /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 up

                        /sbin/route add -host $VIP dev lo:0

                        #stop lvs

                        /sbin/ifconfig lo:0 down

                        echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore

                        echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce

                        echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore

                        echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce

                status)

                        #status of lvs

                        islothere=`/sbin/ifconfig lo:0 |grep $VIP`

                        isrothere=`/netstat -rn |grep "lo" |grep "$VIP"`

                        if [ ! "islothere" -o ! "isrothere" ];then

                                        echo "the realserver is stopped"

                                else

                                        echo "realserver is running"

                        fi

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

                  ;;

# chmod  755 /etc/init.d/RealServer

并啟動該腳本

  #/etc/init.d/lvs  start

第五,

1.在各個真實伺服器上的apache的家目錄中建立檔案

     #vim  .ldirectord.html

          OK

   并啟動apache

 2 .啟動真實伺服器上的RealServer 腳本

     #/etc/init.d/RealServer start

 3 啟動heartbeat

   #/etc/init.d/lvs  start

   #service heartbeat start

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

繼續閱讀