天天看點

IPVS-DR+heartbeat+ldirectord實作高可用負載均衡集

 IPVS-DR+heartbeat+ldirectord實作高可用負載均衡叢集

一、環境

節點類型      主機名    ip位址   

lvs-master    node0     eth0:192.168.32.30  

                        eth1:10.160.100.30  heart

vip:192.168.32.21

lvs-backup    node1     eth0:192.168.32.31  

                        eth1:10.160.100.31  heart

RealServer1   node2     eth0:192.168.32.32  

                        eth1:10.160.100.32   

RealServer2   node3     eth0:192.168.32.33  

                        eth1:10.160.100.33

二、安裝

1、安裝libnet

[root@node1 ~]# tar -zxvf libnet-1.1.4.tar.gz

[root@node1 ~]# cd libnet-1.1.4

[root@node1 libnet-1.1.4]# ./configure

[root@node1 libnet-1.1.4]# make;make install

#libnet是一個高層次API工具,使用heartbeat需要用到他

2、安裝heartbeat

[root@node1 ~]# tar -zxvf heartbeat-2.1.3.tar.gz 

[root@node1 ~]# cd heartbeat-2.1.3

[root@node1 heartbeat-2.1.3]# ./ConfigureMe configure --disable-swig --disable-snmp-subagent

[root@node1 heartbeat-2.1.3]# make ; make install

[root@node1 heartbeat-2.1.3]# cp doc/ha.cf doc/haresource doc/anthkeys /etc/ha.d/

#heartbeat複制樣本配置檔案(ha.cf、haresources、authkeys要到/etc/ha.d目錄下面

[root@node1 heartbeat-2.1.3]# cp ldirectord/ldiretord.cf /etc/ha.d/  

#複制ldirectord的配置檔案至/etc/ha.d目錄下

[root@node1 heartbeat-2.1.3]# grouadd -g 694 haclient  

#添加heartbeat運作需要的haclient組

[root@node1 heartbeat-2.1.3]# useradd -u 694 -g 694 hacluster  

#添加heartbeat運作需要的hacluster使用者

#heartbeat的安裝包中預設包含ldirectord插件,該插件主要用于管理負載均衡,為保證ldirectord可用還行安裝perl-Mailtools

[root@node1 ~]# yum install perl-TimeDate.noarch

[root@node1 ~]# rpm -ivh perl-MailTools-2.04-1.el5.rf.noarch.rpm

#安裝ldirectord正常運作所需依賴工具

3、安裝ipvsadm

[root@node1 ~]# yum install ipvsadm.i386

[root@node1 ~]# modprobe -l | grep ipvs

/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs.ko

/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_dh.ko

/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_ftp.ko

/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_lblc.ko

/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko

/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_lc.ko

/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_nq.ko

/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_rr.ko

/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_sed.ko

/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_sh.ko

/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_wlc.ko

/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_wrr.ko

#檢視核心是否加載ipvs子產品

三、配置ldirectord

[root@node1 ~]# vim /etc/ha.d/ldirectord.cf

checktimeout=3   #檢測逾時時間

checkinterval=1  #檢測時間

autoreload=yes   #配置檔案改動時是否自動加載

logfile="/var/log/ldirectord.log"    # ldirectord日志路徑

quiescent=yes    #檢測到real server異常後是否保留該real server的配置

virtual=192.168.32.21:80                 #VIP

        real=192.168.32.32:80 gate  #Real Server1

        real=192.168.32.33:80 gate  #Real Server2

        service=http

        request="test.html"     

        #要求httpd根下必須存在test.html檔案且内容為receive參數所定義

        receive="test"

        virtualhost=httpd       #随意定義

        scheduler=rr            #LVS負載算法,rr:輪詢

persistent=600          #連接配接會話保持時間

        protocol=tcp          

        checktype=negotiate     #通過互動來判斷服務是否正常

        checkport=80

[root@node1 ~]# scp /etc/ha.d/ldirectord node0:/etc/ha.d/ldirectord

#確定兩lvs主機(node0和node1)ldirectord.cf檔案内容完全一樣

四、heartbeat(兩台lvs伺服器node0和node1配置完全一樣)

1、heartbeat主配置檔案(/etc/ha.d/ha.cf)

[root@node1 ha.d]# vim /etc/ha.d/ha.cf

#debugfile /var/log/ha-debug  

logfile /var/log/ha-log   

#指名heartbeat的日志存放位置。

#crm yes     

#是否開啟Cluster Resource Manager(叢集資源管理)功能。  

bcast eth1   

#指明心跳使用以太網廣播方式,并且是在eth1接口上進行廣播。  

keepalive 2 

#指定心跳間隔時間為2秒(即每兩秒鐘在eth1上發送一次廣播)。  

deadtime 30 

#指定備用節點在30秒内沒有收到主節點的心跳信号後,則立即接管主節點的服務資源。  

warntime 10 

#指定心跳延遲的時間為十秒。當10秒鐘内備份節點不能接收到主節點的心跳信号時,就會往日志中寫入一個警告日志,但此時不會切換服務。  

initdead 120  

#在某些系統上,系統啟動或重新開機之後需要經過一段時間網絡才能正常工作,該選項用于解決這種情況産生的時間間隔。取值至少為deadtime的兩

倍。   

udpport 694   #設定廣播通信使用的端口,694為預設使用的端口号。  

#baud 19200    #設定串行通信的波特率。  

#serial /dev/ttyS0   #選擇串行通信裝置,用于雙機使用序列槽線連接配接的情況。如果雙機使用以太網。  

#ucast eth0 192.168.1.2 #采用網卡eth1的udp單點傳播來組織心跳,後面跟的IP位址應為雙機對方的IP位址。 

#mcast eth0 225.0.0.1 694 1 0 #采用網卡eth0的Udp多點傳播來組織心跳,一般在備用節點不止一台時使用。Bcast、ucast和mcast分别代表廣播、單點傳播和多點傳播,是組織心跳的三種方式,任選其一即可。

auto_failback on 

#用來定義當主節點恢複後,是否将服務自動切回,heartbeat的兩台主機分别為主節點和備份節點。主節點在正常情況下占用資源并運作所有的服務,遇到故障時把資源交給備份節點并由備份節點運作服務。在該選項設為on的情況下,一旦主節點恢複運作,則自動擷取資源并取代備份節點,如果該選項設定為off,那麼當主節點恢複後,将變為備份節點,而原來的備份節點成為主節點。  

#stonith baytech /etc/ha.d/conf/stonith.baytech   

# stonith的主要作用是使出現問題的節點從叢集環境中脫離,進而釋放叢集資源,避免兩個節點争用一個資源的情形發生。保證共享資料的安全性和完整性。  

#watchdog /dev/watchdog 

#該選項是可選配置,是通過Heartbeat來監控系統的運作狀态。使用該特性,需要在核心中載入"softdog"核心子產品,用來生成實際的裝置檔案,如果系統中沒有這個核心子產品,就需要指定此子產品,重新編譯核心。編譯完成輸入"insmod softdog"加載該子產品。然後輸入"grep misc /proc/devices"(應為10),輸入"cat /proc/misc |grep watchdog"(應為130)。最後,生成裝置檔案:"mknod /dev/watchdog c 10 130" 。即可使用此功能。

node node0   #主節點主機名,可以通過指令“uanme –n”檢視。  

node node1   #備用節點主機名。  

ping 192.168.32.254

#選擇ping的節點,ping 節點選擇的越好,HA叢集就越強壯,可以選擇固定的路由器作為ping節點,但是最好不要選擇叢集中的成員作為ping節點

,ping節點僅僅用來測試網絡連接配接。  

#ping_group group1 192.168.12.251 192.168.12.239   #類似于ping。  

#respawn hacluster /usr/local/ha/lib/heartbeat/ipfail  

#apiauth pingd gid=haclient uid=hacluster 

apiauth pingd gid=root uid=root

respawn hacluster /usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s 

#該選項是可選配置,列出與heartbeat一起啟動和關閉的程序,該程序一般是和heartbeat內建的插件,這些程序遇到故障可以自動重新啟動。最常用的程序是pingd,此程序用于檢測和監控網卡狀态,需要配合ping語句指定的ping node來檢測網絡的連通性。其中hacluster表示啟動pingd程序的身份。  

#下面的配置是關鍵,也就是激活crm管理,開始使用v2 style格式  

crm respawn   

#注意,還可以使用crm yes的寫法,但這樣寫的話,如果後面的cib.xml配置有問題  

#會導緻heartbeat直接重新開機該伺服器,是以,測試時建議使用respawn的寫法  

#下面是對傳輸的資料進行壓縮,是可選項  

compression     bz2  

compression_threshold 2  

#注意,v2 style不支援ipfail功能,須使用pingd代替  

[root@node1 ~]# scp /etc/ha.d/ha.cf node0:/etc/ha.d/ha.cf

#拷貝主配置檔案到node0上

2、認證檔案(/etc/ha.d/authkeys)

[root@node1 resource.d]# vim /etc/ha.d/authkeys

auth 1

1 crc

#2 sha1 HI!

#3 md5 Hello!

#authkeys檔案用于設定heartbeat的認證方式,共有三種可用的認證方式:crc、md5和sha1,三種認證方式的安全性依次提高,但是占用的系統資源也依次增加。如果heartbeat叢集運作在安全的網絡上,可以使用crc方式,如果HA每個節點的硬體配置很高,建議使用sha1,這種認證方式安全級别最高,如果是處于網絡安全和系統資源之間,可以使用md5認證方式。無論auth後面指定的是什麼數字,在下一行必須作為關鍵字再次出現,例如指定了“auth 6”,下面一定要有一行“6 認證類型”。最後確定這個檔案的權限是600(即-rw-------)。

[root@node1 ~]# scp /etc/ha.d/authkeys node0:/etc/ha.d/authkeys

#拷貝認證檔案到node0上

3、資源檔案

[root@node1 ~]# vim /etc/ha.d/haresources

node0 IPaddr2::192.168.32.21/24/eth0 ldirectord::ldirectord.cf LVSSyncDaemonSwap::master

#添加VIP,通過ldirectord啟動lvs配置

#haresources檔案用于指定雙機系統的主節點、叢集IP、子網路遮罩、廣播位址以及啟動的服務等叢集資源,檔案每一行可以包含一個或多個資源腳本名,資源之間使用空格隔開,參數之間使用兩個冒号隔開,在兩個HA節點上該檔案必須完全一緻,此檔案的一般格式為:

node-name network  <resource-group> 

#node-name表示主節點的主機名,必須和ha.cf檔案中指定的節點名一緻,network用于設定叢集的IP位址、子網路遮罩、網絡裝置辨別等,需要注意的是,這裡指定的IP位址就是叢集對外服務的IP位址,resource-group用來指定需要heartbeat托管的服務,也就是這些服務可以由heartbeat來啟動和關閉,如果要托管這些服務,必須将服務寫成可以通過start/stop來啟動和關閉的腳步,然後放到/etc/init.d/或者/etc/ha.d/resource.d/目錄下,heartbeat會根據腳本的名稱自動去/etc/init.d或者/etc/ha.d/resource.d/目錄下找到相應腳步進行啟動或關閉操作。

[root@node1 ~]# scp /etc/ha.d/haresources node0:/etc/ha.d/haresources

#拷貝資源檔案到node0上

五、RealServer(node2和node3)配置

1、生成負載均衡VIP腳本(node2和node3一樣)

[root@node2~] # vim /etc/rc.d/init.d/lvsrs   #

#!/bin/bash

#discription : Start Real Server

VIP=192.168.32.21

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

case "$1" in

  start)

  echo "Start LVS of Real Server"

/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 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

  ;;

  stop)

/sbin/ifconfig lo:0 down

  echo "Close LVS of Director Server" 

  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

  *)

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

  exit 1

esac

[root@node2~] # chmod a+x /etc/rc.d/init.d/lvsrs   #給腳本增加可執行權限,然後啟動并設定為開機啟動:

2、生成測試檔案

[root@node2~] # echo "test"> /var/www/html/test.html  #ldirectord測試頁,檔案名和内容與ldirectord.cf中定義一樣

[root@node2~] # echo "I am node2; My Ip:10.160.100.32"> /var/www/html/index.html

[root@node3~] # echo "test"> /var/www/html/test.html  #ldirectord測試頁,檔案名和内容與ldirectord.cf中定義一樣

[root@node3~] # echo "I am node3; My Ip:10.160.100.33"> /var/www/html/index.html

六、啟動測試

1、啟動服務

[root@node0 ~]# service heartbeat start

[root@node0 ~]# chkconfig heartbeat on

[root@node1 ~]# service heartbeat start

[root@node1 ~]# chkconfig heartbeat on

[root@node2 ~]# service lvsrs start

[root@node2 ~]# chkconfig lvsrs on

[root@node2 ~]# service httpd start

[root@node2 ~]# chkconfig httpd on

[root@node3 ~]# service lvsrs start

[root@node3 ~]# chkconfig lvsrs on

[root@node3 ~]# service httpd start

[root@node3 ~]# chkconfig httpd on

2、測試

[root@node0 ~]# ip addr show | grep 192.168.32.21

    inet 192.168.32.21/24 brd 192.168.32.255 scope global secondary eth0

#node0的eth0網口已經添加vip

[root@node0 ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.32.21:80 rr

  -> 192.168.32.32:80             Route   1      0          1         

  -> 192.168.32.33:80             Route   1      0          1       

#node0的lvs配置生效

[root@node0 ~]# iptables -A OUTPUT -d 192.168.32.254 -p icmp -j REJECT  #人為斷開網絡

[root@node1 ~]# ipvsadm -ln

  -> 192.168.32.32:80             Route   1      0          0         

  -> 192.168.32.33:80             Route   1      0          0         

#lvs自動切換到node1上,說明heartbeat雙機機制成功

realserver配置測試略,通過ie通路可得到web内容再2s輪詢方式切換

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