本文主要講述vs/dr方式
實驗環境:
主Load Balancer服務器:192.168.2.40
備Load Balancer服務器:192.168.2.19
Real server 192.168.2.31,192.168.2.41
Vip 192.168.2.233(無人佔用)
ipatbles off,selinux disabled
注意:在主備Load Balancer服務器上,heartbeat的配置內容完全一樣。hearbeat不管服務狀態,只管服務主機狀態
一.部署heartbeat,即配置主備負載均衡服務器
HeartBeat 是 Linux-HA 的高可用性集羣軟件,它的主要作用是:
安裝在 Load Balancer 和 Backup 上,運行於 active/standby 模式。當 Load Balancer 失效時,Backup 自動激活,成爲實際的 Load Balancer。切換到 active 模式時,按順序啓動 Virtual IP、IPVS 和 Ldirectord。切換到 standby 模式時,按順序關閉 Ldirectord、IPVS 和 Virtual IP。
下載軟件包:
heartbeat-3.0.4-2.el6.x86_64.rpm heartbeat-libs-3.0.4-2.el6.x86_64.rpm
heartbeat-devel-3.0.4-2.el6.x86_64.rpm
安裝軟件包:
heartbeat-3.0.4-2.el6.x86_64.rpm heartbeat-libs-3.0.4-2.el6.x86_64.rpm
heartbeat-devel-3.0.4-2.el6.x86_64.rpm
[root@server40 ~]# yum localinstall * -y
更改配置文件:
將ha.cf,haresource, sauthkeys文件拷貝至系統啓動會加載的目錄/etc/ha.d/下。
[root@server40 heartbeat-3.0.4]# cp /usr/share/doc/heartbeat-3.0.4/ha.cf haresource sauthkeys /etc/ha.d/
打開或者編輯以下:
[root@server40 ha.d]# vim ha.cf
debugfile /var/log/ha-debug打開調試日誌文件文件
logfile /var/log/ha-log打開系統運行日誌文件
logfacility local0打開日誌等級
keepalive 2心跳頻率,自己設定。1:表示 1 秒;200ms:表示 200 毫秒
deadtime 30節點死亡時間閥值,就是從節點在過了 30秒 後還沒有收到心跳就認爲主節點死亡,自己設定
warntime 10發出警告時間,自己設定
initdead 120守護進程首次啓動後應該等待 120 秒後再啓動主服務器上的資源
udpport 694(做實驗時,此端口必須是別人沒用的)心跳信息傳遞的 udp 端口,使用端口 694 進行 bcast和 ucast 通信,取默認值
#baud 19200串口波特率,與 serial 一起使用。
#serial /dev/ttyS0採用串口來傳遞心跳信息。
bcast eth0採用 eth0網卡廣播播來通知心跳
#ucast eth1 10.0.0.3採用網卡 eth1 的 udp 單播來通知心跳,eth1 的 IP
#mcast eth0 225.0.0.1 694 1 0採用 udp 多播來通知心跳
auto_failback on當主節點恢復後,是否自動切回
#stonith baytech /etc/ha.d/conf/stonith.baytechstonith 用來保證共享存儲環境中的數據完整性
打開:watchdog /dev/watchdog
watchdog 能讓系統在出現故障 1 分鐘後重啓該機器,這個功能可以幫助服務器在確實停止心
跳後能夠重新恢復心跳。 如果使用該特性,修改系統中/etc/modprobe.d/softdog.conf 添加如下行
options softdog
這樣在系統啓動的時候,在內核中裝入"softdog"內核模塊,用來生成實際的設備文件/dev/watchdog
node server40.example.com
主節點名稱,與 uname –n 保持一致。排在第一的默認爲主節點,所以不要搞措順序
node server19.example.com
副節點名稱,與 uname –n 保持一致
ping 192.168.2.251此處爲網關
respawn hacluster /usr/lib64/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
默認 heartbeat 並不檢測除本身之外的其他任何服務,也不檢測網絡狀況。
所以當網絡中斷時,並不會進行 Load Balancer 和 Backup 之間的切換。
可以通過 ipfail 插件,設置'ping nodes'來解決這一問題,但不能使用一個集羣節點作爲
ping 的節點。
#######################################################
heartbeat自帶的斷網切換的工具-ipfail
ipfail斷網切換的原理
關於ipfail這個斷網切換的原理很簡單,首先heartbeat要判斷自己的網絡是否正常其實就是通過ping某個ip,如果可以ping的通,說明網絡是通的,如果ping不通了,說明是網絡斷了,或者是主服務器的網卡壞了,然後執行切換的動作。但是如果是被ping的那個ip的網卡出問題了怎麼辦呢,那豈不是也造成了誤切換?所幸heartbeat想到了這種情況,而提供了ping group的功能,就是讓heartbeat同時ping兩個或者兩個以上的ip,如果所有的都ping不通了,ipfail才認爲是主服務器的網絡斷了,或是網卡壞了。然而在大多數的一般情況下我們ping一個ip也是可以的,因爲我們可以把這個ip設置成我們這個網絡中default gateway(默認網關)的ip,因爲如果是默認網關的網卡壞了,即便是誤切換也無所謂了,默認網關壞了那麼我們的服務是怎麼也不可能被訪問到了。
下邊我會對 ping 一個ip和ping group的功能及配置方法一一介紹。
ipfail的配置與使用
我們要使用ipfail這個斷網切換的功能,只要在ha.cf這個配置文件中配置即可:
1.配置文件中有很多英文的解釋以及示例被#號註釋,供參考,我們使用ipfail時只要去掉相應的#號即可,下面寫出ping一個ip的ipfail配置:
ping 192.168.2.251
respawn hacluster /usr/lib64/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
只有這3行,非常簡單,只要寫在ha.cf重啓動heartbeat服務就可以生效了,我來解釋一下這3行配置文件的意思:
ping 192.168.2.251
一般是ping網關,告訴ipfail網絡是否暢通。
respawn hacluster /usr/lib64/heartbeat/ipfail
這句就是指定斷網切換的程序文件路徑,我們一定要給出正確的路徑,一般情況下,這個ipfail文件會在heartbeat安裝目錄下的lib/heartbeat/子文件夾下,確認好以後我們給出正確的路徑, 其中hacluster是一個uid,是以hacluster這個用戶身份運行ipfail。即,當斷網後,以hacluster用戶的身份運行ipfail文件
apiauth ipfail gid=haclient uid=hacluster
是指定對ipfail有權限的用戶和組
2.ping一個group的ipfail配置:
ping_group group1 172.16.103.254 172.16.103.212
respawn hacluster /usr/local/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
ping_group group1 172.16.103.254 172.16.103.212
這個就是同時ping多個ip,只有所有的ip都無法ping通時,ipfail纔會執行切換的動作,保證了不會是因爲被ping的ip出了問題而產生誤切換。後邊兩句前面說過了,不再解釋了。
最後需要注意的是不要把ping 和ping group 這兩行同時寫出來,寫ping的內容時,要保證ping group是註釋的,寫ping group時,要保證ping那行是註釋着的,否則會出問題的, 切換運行不正常。
#######################################################
資源文件上更改啓動哪些資源(必須填寫主節點)
[root@server40 ha.d]# vim haresources
server40.example.com IPaddr::192.168.2.233/24/eth0:0 httpd
#######################################################
haresources這個文件中定義了實現集羣所需的各個軟件的啓動腳本,這些腳本必須放在/etc/init.d 或者/etc/ha.d/resource.d 目錄裏 IPaddr 的作用是啓動 Virutal IP,它是 HeartBeart 自帶的一個腳本;ldirectord 的作用是啓動 ldirectord 監控程序,它會使 ldirectord.cf 中定義的 lvs 生效,並監聽其健康狀;httpd 是 apache 服務的啓動腳本。
配置好ha.cf文件之後,便是haresources文件。該文件列出集羣所提供的服務以及服務的默認所有者。 注意:兩個集羣節點上的該文件必須相同。集羣的IP地址是該選項是必須配置的,不能在haresources文件以外配置該地址, haresources文件用於指定雙機系統的主節點、集羣IP、子網掩碼、廣播地址以及啓動的服務等。其配置語句格式如下:
node-name network-config resource-group
其中node-name指定雙機系統的主節點,取值必須匹配ha.cf文件中node選項設置的主節點。network-config用於網絡設置,包括指定集羣IP、子網掩碼、廣播地址等。resource-group用於設置heartbeat啓動的服務,該服務最終由雙機系統通過集羣IP對外提供。在本文中我們假設要配置的HA服務爲Apache。
在haresources文件中需要如下內容:
server40.example.com IPaddr::192.168.2.233/24/eth0:0 httpd
該行指定在啓動時,節點server40.example.com得到IP地址192.168.2.233,並啓動Apache。在停止時,Heartbeat停止Apache,最後釋放IP地址192.168.2.233。這裏假設命令“uname –n”的輸出爲“server40.example.com”-如果輸出爲“server40”,便應使用“server40”。
正確配置好haresources文件之後,將ha.cf和haresource拷貝到/etc/ha.d目錄。
注意:資源文件中能執行的命令必須在/etc/ha.d/resource.d/ 中可見
#######################################################
認證文件(/etc/ha.d/authkeys),文件的權限必須是 600:
[root@server40 ha.d]# vim authkeys
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
######################################################
注:安全級別由高到低:sha1->md5->crc
需要配置的第三個文件authkeys決定了您的認證密鑰。共有三種認證方式:crc,md5,和sha1。您可能會問:“我應該用哪個方法呢?”簡而言之: 如果您的Heartbeat運行於安全網絡之上,如本例中的交叉線,可以使用crc,從資源的角度來看,這是代價最低的方法。如果網絡並不安全,但您也希望降低CPU使用,則使用md5。最後,如果您想得到最好的認證,而不考慮CPU使用情況,則使用sha1,它在三者之中最難破解。
因此,對於sha1,示例的/etc/ha.d/authkeys可能是
auth 1
1 sha1 key-for-sha1-any-text-you-want
對於md5,只要將上面內容中的sha1換成md5就可以了。 對於crc,可作如下配置:
auth 2
2 crc
不論您在關鍵字auth後面指定的是什麼索引值,在後面必須要作爲鍵值再次出現。如果您指定“auth 4”,則在後面一定要有一行的內容爲“4 ”。
確保該文件的訪問權限是安全的,如600。
######################################################
[root@server40 ha.d]# chmod 600 authkeys
[root@server40 modprobe.d]# modprobe softdog
[root@server19 modprobe.d]# modprobe softdog
[root@server40 modprobe.d]# vim softdog.conf
options softdog
~
[root@server40 ha.d]# yum install httpd -y
[root@server19 ha.d]# yum install httpd -y
[root@server40 ha.d]# scp ha.cf haresources authkeys 192.168.2.19:/etc/ha.d/
編輯測試頁面:
[root@server40 html]# echo `hostname`>index.html
[root@server19 html]# echo `hostname`>index.html
啓動heartbeat:
[root@server40 html]# /etc/init.d/heartbeat start
在主節點上出現以下信息則成功:
[root@server40 html]# ifconfig
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:D8:7C:90
inet addr:192.168.2.233 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
apache被自動啓動
[root@server40 html]# /etc/init.d/httpd status
httpd (pid 4226) is running...
而在備節點上,apache沒有被自動啓動:
[root@server19 html]# /etc/init.d/httpd status
httpd is stopped
瀏覽器中輸入:192.168.2.233
出現以下信息則正確,表明主節點在工作
server40.example.com
噹噹掉主節點的heartbeat時,備節點會主動接管,虛擬ip會主動飄到備節點:
[root@server40 html]# /etc/init.d/heartbeat stop
Stopping High-Availability services: Done.
[root@server40 html]# /etc/init.d/httpd status
httpd is stopped
[root@server19 html]# /etc/init.d/httpd status
httpd (pid 25037) is running...
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:5D:75:96
inet addr:192.168.2.233 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
瀏覽器中輸入:192.168.2.233
出現以下信息則正確,表明備節點在工作
server19.example.com
當主節點的heartbeat再次被啓動時,會將運行在備節點上的資源服務接過去。
二.部署LB
安裝lvs管理工具ipvsadm:
[root@server40 ~]# yum install ipvsadm -y
[root@server19 ~]# yum install ipvsadm -y
向ipvsadm表中添加規則:
[root@server40 ~]# ipvsadm -A -t 192.168.2.233:80 -s rr
[root@server40 ~]# ipvsadm -a -t 192.168.2.233:80 -r 192.168.2.31:80 -g
[root@server40 ~]# ipvsadm -a -t 192.168.2.233:80 -r 192.168.2.41:80 -g
[root@server19 ~]# ipvsadm -A -t 192.168.2.233:80 -s rr
[root@server19 ~]# ipvsadm -a -t 192.168.2.233:80 -r 192.168.2.31:80 -g
[root@server19 ~]# ipvsadm -a -t 192.168.2.233:80 -r 192.168.2.41:80 -g
用命令可查看所添加的規則:
[root@server40 ~]# ipvsadm -l
停掉本HA節點的httpd服務:
[root@server40 ~]# /etc/init.d/httpd stop
給real server安裝httpd服務:
[root@server31 ~]# yum install httpd -y
[root@server41 ~]# yum install httpd -y
編輯測試頁面並啓動httpd服務:
[root@server31 html]# echo `hostname`
[root@server41 html]# echo `hostname`
[root@server31 html]# /etc/init.d/httpd start
[root@server41 html]# /etc/init.d/httpd start
在real server上安裝MAC與IP地址的解析協議即arp:
[root@server31 html]# yum install arptables_jf -y
[root@server41 html]# yum install arptables_jf -y
添加規則:
[root@server31 ~]# ifconfig eht0:0 191.68.2.233 netmask 255.255.255.255
[root@server31 ~]# arptables -A IN -d 192.168.2.233 -j DROP
[root@server31 ~]# arptables -A OUT -s 192.168.2.233 -j mangle --mangle-ip-s 192.168.2.31
[root@server31 ~]# /etc/init.d/arptables_jf save
[root@server41 ~]# ifconfig eht0:0 191.68.2.233 netmask 255.255.255.255
[root@server41 ~]# arptables -A IN -d 192.168.2.233 -j DROP
[root@server41 ~]# arptables -A OUT -s 192.168.2.233 -j mangle --mangle-ip-s 192.168.2.41
[root@server31 ~]# /etc/init.d/arptables_jf save
測試:
http://192.168.2.233
反覆刷新網頁,每次出現的網頁不同則表示成功。
三.用ldirectord實現調度
#################################################################
HA只有一臺工作,real server兩臺都得工作
lvs三種工作模式(nat,tun,DR)
VS/NAT
在一組服務器前有一個調度器,它們是通過 Switch/HUB 相連接的。這些服務器提供相同的網絡服務、相同的內容,即不管請求被髮送到哪一臺服務器,執 行結果是一樣的。服務的內容可以複製到每臺服務器的本地硬盤上,可以通過網絡文件系統(如 NFS)共享,也可以通過一個分佈式文件系統來提供。VS/NAT 的優點是服務器可以運行任何支持 TCP/IP 的操作系統,它只需要一個 IP 地址配置在調度器上,服務器組可以用私有的 IP 地址。缺點是它的伸縮能力有限, 當服務器結點數目升到 20 時,調度器本身有可能成爲系統的新瓶頸,因爲在 VS/NAT 中請求和響應報文都需要通過負載調度器。
VS/TUN
它的連接調度和管理與 VS/NAT 中的一樣,只是它的報文轉發方法不同。調度器根據各個服務器的負載情況,動態地選擇一臺服務器,將請求報文封裝在另一個 IP 報文中,再將封裝後的 IP 報文轉發給選出的服務器;服務器收到報文後,先將報文解封獲得原來目標地址爲 VIP 的報文,服務器發現 VIP地址被配置在本 地的 IP 隧道設備上,所以就處理這個請求,然後根據路由表將響應報文直接返回給客戶。在 VS/TUN 的集羣系統中,負載調度器只將請求調度到不同的後端服務器,後端服務器將應答的數據直接返回給用戶。這樣,負載調度器就可以處理大量的請求,它甚至可以調 度百臺以上的服務器(同等規模的服務器),而它不會成爲系統的瓶頸。即使負載調度器只有100Mbps 的全雙工網卡,整個系統的最大吞吐量可超過 1Gbps。所以,VS/TUN 可以極大地增加負載調度器調度的服務器數量。VS/TUN 調度器可以調度上百臺服務器,而它本身不會成爲系統的瓶頸,可以 用來構建高性能的超級服務器。
VS/DR
跟 VS/TUN 方法相同,VS/DR 利用大多數 Internet 服務的非對稱特點,負載調度器中只負責調度請求,而服務器直接將響應返回給客戶,可以極大地提高整個集羣系統的吞吐量調度器和服務器組都必須在物理上有一個網卡通過不分斷的局域網相連,如通過交換機或者高速的HUB 相連。VIP 地址爲調度器和服務器組共享,調度器配置的 VIP 地址是對外可見的,用於接收虛擬服務的請求報文;所有的服務器把 VIP 地址配置在各自的 Non-ARP 網絡設備上,它對外面是不可見的,只是用於處 理目標地址爲 VIP 的網絡請求。
以下是LVS-DR的工作原理,包括數據包、數據幀的走向和轉換過程:官方的原理說明:Director接收用戶的請求,然後根據負載均衡算法選取一臺realserver,將包轉發過去,最後由realserver直接回復給用戶。
實例場景設備清單:
說明:我這裏爲了方便,client是與vip同一網段的機器。如果是外部的用戶訪問,將client替換成gateway即可,因爲IP包頭是不變的,變的只是源mac地址。
① client向目標vip發出請求,Director接收。此時IP包頭及數據幀頭信息如下:
② VS根據負載均衡算法選擇一臺active的realserver(假設是192.168.57.122),將此RIP所在網卡的mac地址作爲目標mac地址,發送到局域網裏。此時IP包頭及數據幀頭信息如下:
③ realserver(192.168.57.122)在局域網中收到這個幀,拆開後發現目標IP(VIP)與本地匹配,於是處理這個報文。隨後重新封裝報文,發送到局域網。此時IP包頭及數據幀頭信息如下:
④ 如果client與VS同一網段,那麼client(192.168.57.135)將收到這個回覆報文。如果跨了網段,那麼報文通過gateway/路由器經由Internet返回給用戶。
DR模式的工作過程:
當一個client發送一個WEB請求到VIP,LVS服務器根據VIP選擇對應的real-server的Pool,根據算法,在Pool中選擇一臺Real-server,LVS在hash表中記錄該次連接,然後將client的請求包發給選擇的Real-server,最後選擇的Real-server把應答包直接傳給client;當client繼續發包過來時,LVS根據更才記錄的hash表的信息,將屬於此次連接的請求直接發到剛纔選擇的Real-server上;當連接中止或者超時,hash表中的記錄將被刪除。
LVS的DR模式不需要開啓路由轉發功能,就可以正常的工作,出於安全考慮,如果不需要轉發功能,最好關閉。
Ldirectord功能說明:
checktimeout=3
這個值就是 ldirectord 等待健康檢查執行完畢的等待時間,單位秒。如果因爲某些原因檢查失敗或在設置的時間週期內沒有完成檢查,ldirectord 將會從 IPVS 表中移除真實服務器
ARP問題:
通常,DR模式需要在Real-server上配置VIP,配置的方式爲:
/sbin/ifconfig lo:0 inet VIP netmask 255.255.255.255
原因在於,當LVS把client的包轉發給Real-server時,因爲包的目的IP地址是VIP,那麼如果Real-server收到這個包後,發現包的目的IP不是自己的系統IP,那麼就會認爲這個包不是發給自己的,就會丟棄這個包,所以需要將這個IP地址綁到網卡上;當發送應答包給client時,Real-server就會把包的源和目的地址調換,直接回復給client。
關於ARP廣播:
上面綁定VIP的掩碼是”255.255.255.255″,說明廣播地址是其本身,那麼他就不會將ARP發送到實際的自己該屬於的廣播域了,這樣防止與LVS上VIP衝突,而導致IP衝突。
另外在Linux的Real-server上,需要設置ARP的sysctl選項:(下面是舉例說明設置項的)
checkinterval=1
這個值指定 ldirectord 在兩個檢查之間的間隔時間。
autoreload=yes
如果啓用這個選項,它使 ldirectord 按時計算這個配置文件的 md5 校驗和值,看其是否有改動,當發現有改動時自動應用那些改動,這個方便的 特性運行你容易地改變集羣的配置,你對配置文件改動後幾秒,ldirectord 將察覺到有改動,調用 ipvsadm 命令實現改動,從有效服務器池中移除 真實服務器或按需要將它們添加到池中[17]。
quiescent=no
當一個節點在 checktimeout 設置的時間週期內沒有響應時它是“靜止的”(它的權重爲0),當你設置了這個選項後,ldirectord 將 會從 IPVS 表中移除真實服務器而不是“停止”它,從 IPVS 表移除節點將中斷現有的客戶端連接,並使 LVS 丟掉所有的連接跟蹤記錄和持續連接模板,如果 你不將這個選項設置爲 no,當某個節點崩潰時,對某些客戶端計算機而言可能會顯示爲集羣關閉了,因爲在這個節點崩潰前這些客戶端計算機被分配給它了,而連 接跟蹤記錄和程序連接模板仍然保留在 Director 上。
Ldirectord將會每秒連接一次real server並請求/index.html。如果real server返回的數據沒有包含 "Test Message" 信息,則檢測失敗,並且real server將會被踢出集羣,當real server被檢測成功時,纔會被恢復到集羣。如果所有的real server都被剔除了,則本地的服務則會被當做real server而工作。
中文網站:zh.linuxvirtualserver.org
###########################################################################
在real server上必須屏蔽掉vip,採用設置arp即在底層換掉mac地址
屏蔽方法:1內核上屏蔽
2arptable(紅帽推薦的方法)
實驗環境:
Load Balancer:192.168.2.40(主)
192.168.2.19(備)
Real Server:192.168.2.31
192.168.2.41
Vip 192.168.2.233
[root@server40 ha.d]# /etc/init.d/heartbeat stop
[root@server19 ha.d]# /etc/init.d/heartbeat stop
下載安裝調度器的軟件包:
ldirectord-3.9.2-1.2.x86_64.rpm
[root@server40 ~]# yum localinstall ldirectord-3.9.2-1.2.x86_64.rpm -y
由以下命令查看ldirectord的配置文件位置:
[root@server40 ~]# rpm -ql ldirectord
/usr/share/doc/packages/ldirectord/ldirectord.cf
將其配置文件拷貝至ha目錄下:
[root@server40 ~]# cp /usr/share/doc/packages/ldirectord/ldirectord.cf /etc/ha.d/
修改配置文件:
Load Balancer 通過 Ldirectord 監測各 Real Server 的健康狀況。在 Real Server 不可用時把它從羣中剔除,恢復時重新加入。
[root@server40 ha.d]# vim ldirectord.cf
# Sample for an http virtual service
virtual=192.168.2.233:80 ##這一行指定我們想要在 Director 上設置的 VIP 地址和端口號,這就是你要添加到 DNS 向客戶端廣播的 ip 地址,任何情況下,這就是客戶端計算機用來連接到你配置的集羣資源的 ip 地址。
real=192.168.2.31:80 gate ##服務器
real=192.168.2.41:80 gate ##服務器
fallback=127.0.0.1:80 gate ##當real server均不可用時,調用自己的服務
service=http ##定義服務
scheduler=rr ##調度策略,輪詢
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80 ##檢測端口
request="index.html" ##ldirectord默認到real server找index.html文件,若找不到,則認爲real server不可用
# receive="Test Page" ##ldirectord默認到real server找index.html文件的"Test Page"內容,若找不到,則認爲real server不可用
# virtualhost=www.x.y.z
拷貝ldirectord.cf到HA的備節點上:
[root@server40 ha.d]# scp ldirectord.cf 192.168.2.19:/etc/ha.d/
刷掉之前實驗時的IPVS表:
[root@server40 ha.d]# ipvsadm -C
[root@server40 ha.d]# vim haresources
server40.example.com IPaddr::192.168.2.233/24/eth0:0 httpd ldirectord
[root@server40 ha.d]# scp haresources 192.168.2.19:/etc/ha.d/
基本的配置工作已經完成,可以嘗試啓動ldirectord,但當啓動ldirectord時會報如下錯:
[root@server40 ha.d]# /etc/init.d/ldirectord start
Starting ldirectord... Can't locate IO/Socket/INET6.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/sbin/ldirectord line 3061.
BEGIN failed--compilation aborted at /usr/sbin/ldirectord line 3061.
failure
[root@server40 ha.d]# yum install perl-IO-Socket-INET6 -y
[root@server31 ~]# ifconfig eth0:0 192.168.2.233 netmask 255.255.255.255
[root@server31 ~]# arptables -A IN -d 192.168.2.233 -j DROP
[root@server31 ~]# arptables -A OUT -s 192.168.2.233 -j mangle --mangle-ip-s 192.168.2.31
[root@server31 ~]# /etc/init.d/arptables_jf save
[root@server41 ~]# ifconfig eth0:0 192.168.2.232 netmask 255.255.255.255
[root@server41 ~]# arptables -A IN -d 192.168.2.233 -j DROP
[root@server41 ~]# arptables -A OUT -s 192.168.2.233 -j mangle --mangle-ip-s 192.168.2.41
[root@server41 ~]# /etc/init.d/arptables_jf save
停掉以下所有的服務,因爲以下所有的服務均會有heartbeat啓動
[root@server40 ha.d]# /etc/init.d/ldirectord stop
Stopping ldirectord... success
[root@server41 ~]# /etc/init.d/httpd stop
[root@server19 ha.d]# /etc/init.d/ldirectord stop
Stopping ldirectord... success
[root@server19 ~]# /etc/init.d/heartbeat stop
Stopping High-Availability services: Done.
開啓如下服務:
[root@server41 ~]# /etc/init.d/httpd stop
[root@server41 ~]# chkconfig httpd on
[root@server41 ~]# chkconfig arptables_jf on
[root@server31 ~]# /etc/init.d/httpd stop
[root@server31 ~]# chkconfig httpd on
[root@server31 ~]# chkconfig arptables_jf on
[root@server40 ha.d]# /etc/init.d/heartbeat start
[root@server19 ha.d]# /etc/init.d/heartbeat start
測試檢查:
1.瀏覽器輸入192.168.2.233
看到頁面在兩個realserver上切換表示成功!你也可以通過 ipvsadm -l 查看詳細連接情況!
[root@server40 ha.d]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.233:http rr
-> 192.168.2.31:http Route 1 0 3
-> 192.168.2.41:http Route 1 0 2
2.先後關掉兩臺real server的httpd服務,刷瀏覽器測試
3.將主節點的心跳關閉,心跳自動切換到備節點
[root@server40 ha.d]# /etc/init.d/heartbeat stop
刷新瀏覽器依舊出現real server提供的服務的界面