在Linux下構造高性能、高可用、高可伸縮性的服務集群

發表于:2007-05-26來源:作者:點擊數: 標簽:
隨著Internet技術的迅猛發展,網絡技術、性能的不斷提高,高可伸縮性、高可用性、可管理性、價格有效性的網絡服務技術將成為網絡服務技術的主導。各種平臺下的技術方案應運而生。本文試圖以一篇完整的理論+實踐性的文字來介紹如何在優秀的 開源 操作系統Linu
隨著Internet技術的迅猛發展,網絡技術、性能的不斷提高,高可伸縮性、高可用性、可管理性、價格有效性的網絡服務技術將成為網絡服務技術的主導。各種平臺下的技術方案應運而生。本文試圖以一篇完整的理論+實踐性的文字來介紹如何在優秀的開源操作系統Linux下創建低成本、高性能、高可用的服務集群系統。文中所使用的系統和軟件包均為最新版本。希望通過對本文的閱讀能使你對如何創建Linux下的集群系統有所幫助。

隨著Internet技術的迅猛發展,網絡技術、性能的不斷提高,高可伸縮性、高可用性、可管理性、價格有效性的網絡服務技術將成為網絡服務技術的主導。各種平臺下的技術方案應運而生。本文試圖以一篇完整的理論+實踐性的文字來介紹如何在優秀的開源操作系統Linux下創建低成本、高性能、高可用的服務集群系統。文中所使用的系統和軟件包均為最新版本。希望通過對本文的閱讀能使你對如何創建Linux下的集群系統有所幫助。

1.Linux下的解決方案


Linux下的集群系統通??梢苑譃槿悾?br />


  1. HA容錯集群 (Fail-over Cluster)
    高可用性集群(High available)用于不可間斷服務的環境下。提供冗余的容錯備份,在主節點失效后,能夠立即接管相關資源及繼續提供相應服務。
  2. 負載均衡集群 (Load Balancing Cluster)
    在應用服務的高負載情況下運用該技術,由多臺節點提供高可伸縮的,高負載的服務器組。以保證對外提供良好的服務響應。
  3. HPC高性能計算機集群 (High Performance Computing)
    概念并不完全統一,有一定爭論,應該理解為并行系統,主要用于科學計算。


本文所要介紹的是前兩類集群的一個完美的組合。


1.1. Linux Virtual Server項目


在1998年5月,由章文嵩博士成立了Linux Virtual Server的自由軟件項目,進行Linux服務器集群的開發工作。同時,Linux Virtual Server項目也是國內最早出現的自由軟件項目之一。該項目針對高可伸縮、高可用網絡服務的需求,給出了基于IP層和基于內容請求分發的負載平衡調度解決方法,它通過前端一個負載調度器(Load Balancer)無縫地將網絡請求調度到真實服務器上,從而使得服務器集群的結構對客戶是透明的,客戶訪問集群系統提供的網絡服務就像訪問一臺高性能、高可用的服務器一樣??蛻舫绦虿皇芊掌骷旱挠绊懖恍枳魅魏涡薷?。系統的伸縮性通過在服務機群中透明地加入和刪除一個節點來達到,通過檢測節點或服務進程故障和正確地重置系統達到高可用性。并在Linux內核中實現了這些方法,將一組服務器構成一個實現可伸縮的、高可用網絡服務的虛擬服務器。


虛擬服務器的體系結構如圖2所示。



圖2:虛擬服務器的結構


1.1.1. LVS的核心軟件IPVS


在調度器的實現技術中,IP負載均衡技術是效率最高的。在已有的IP負載均衡技術中有通過網絡地址轉換(Network Address Translation)VS/NAT技術的基礎上,IPVS軟件實現了三種IP負載均衡技術:


1)Virtual Server via Network Address Translation(VS/NAT) 網絡地址轉換 (如圖1)
2)Virtual Server via IP Tunneling(VS/TUN) 隧道技術 (如圖2)
3)Virtual Server via Direct Routing(VS/DR) 直接路由 (如圖3)


針對不同的網絡服務需求和服務器配置,IPVS調度器實現了如下十種負載調度算法:


  1. 輪叫(Round Robin)
  2. 加權輪叫(Weighted Round Robin)
  3. 最少鏈接(Least Connections)
  4. 加權最少鏈接(Weighted Least Connections)
  5. 基于局部性的最少鏈接(Locality-Based Least Connections)
  6. 帶復制的基于局部性最少鏈接(Locality-Based Least Connections with Replication)
  7. 目標地址散列(Destination Hashing )
  8. 源地址散列(Source Hashing)
  9. 最短期望延遲(Shortest Expected Delay)(新增加調度算法)
  10. 無須隊列等待(Never Queue)(新增加調度算法)


其中9-10是最新1.09版IPVS軟件包中新增的調度算法,這十種調度算法將會在后面的ipvsadm配置文件中用到,通常用英文單詞的第一個字母的縮寫來表示。例如:輪叫(Round Robin)表示為rr。


三種IP負載均衡技術的優缺點比較
































VS/NAT
服務器(OS)任意支持隧道多數(支持Non-arp )
服務器網絡私有網絡局域網局域網
服務器數目(100M網絡)10~20100多(100)
服務器網關負載均衡器自己的路由自己的路由
效率一般最高

三種IP負載均衡技術中特別是后兩種技術VS/TUN,VS/DR極大地提高系統的伸縮性,它們的相關技術原理不是本文討論的重點,若需了解詳細內容,請參看章文嵩博士的相關撰文。



圖1



圖2



圖3


1.2. High Availability of LVS


較為成熟的方案有mon+heartbeat+fake+coda 和ldirectord+heartbeat 方案,本文我們采用的是ldirectord+heartbeat 方案。


1.2.1. Heartbeat


Linux-HA 項目開始于 1998 年,是 Linux-HA HOWTO(Haranld Milz 著)的產物。該項目目前由 Alan Robertson 領導,許多其他代碼提供者也參與其中。1.0.3版本是2003年6月發布的最新穩定版本。


Heartbeat 通過通信介質(通常是串行設備和以太網)監控節點的"健康"狀況。最好有多個冗余介質,以便我們既可以使用串行線又可以使用以太網鏈接。每個節點運行一個守護程序進程(稱為"心跳")。主守護程序派生出讀和寫每個心跳介質的子進程,以及狀態進程。當檢測到某個節點發生故障時,Heartbeat 運行 shell 腳本來啟動(或停止)輔助節點上的服務。按照設計,這些腳本使用與系統 init 腳本(通常位于 /etc/init.d 中)相同的語法。缺省腳本是為文件系統、Web 服務器和虛擬 IP 故障轉移提供的。


1.2.2. Ldirectord


"ldirectord"(Linux Director Daemon)是Jacob Rief編程實現的一個獨立進程,以實現對服務和物理服務器的監測,廣泛地用于http和https等服務, Ldirectord與mon相比,優點如下:


  1. ldirectord是專門為LVS 監控而編寫的。
  2. ldirectored可以方便地被heartbeat管理啟動和停止。
  3. 它能從heartbeat的配置文件/etc/ha.d/xxx.cf中讀取所有有關IPVS路由表配置的信息。當 ldirectord 運行后,IPVS路由表將被適當地配置。你也可以將不同的虛擬服務器配置保存在不同的配置文件里, 所以你可以單獨修改某種服務的參數而不用停止其它的服務
  4. 另外,ldirectord安裝簡便,可以手工地啟動和停止。你可以在沒有備份負載均衡器的LVS集群上使用。


1.2.3. ldirectord+heartbeat的絕妙組合


ldirectord+heartbeat方案前端負載調度器采用雙機熱備份方式,雙機均安裝雙網卡,一個網卡用于連接集群系統,另一個作為冗余心跳線路連接雙機。采用串口線 + 以太網口做為冗余心跳線路,以確保雙機熱備份的可靠性,消除由于主負載調度器或心跳線故障帶來的集群單點故障。


在主負載調度器及備份負載調度器同時安裝ldirectord及heartbeat,并同時運行Heartbeat,相互監視"健康"狀況,一旦備份負載調度器監測到主負載調度器發生故障,備份服務器通過運行shell腳本來啟動備份調度器上服務來完成虛擬 IP 故障轉移,通過ipvsadm啟動LVS及ldirectord,完成負載調度器的整體接管。一旦主負載調度器恢復正常工作,備份負載將通過腳本停掉備份負載調度器上的LVS及ldirectord,同時完成虛擬 IP 故障轉移,主負載調度器重新恢復接管LVS及ldirectord監控服務。這樣負載調度器就完成了一個標準的接管及恢復過程。


該方案結構清晰明了,安裝簡便,并且ldirectord是專門為LVS所開發,針對性強,無縫銜接,配合默契,堪稱絕妙組合。


2. LVS在Red Hat 9.0上的具體實現


2.1. 實現目標:


實現以常用、效率最高的LVS-DR IP負載技術為基礎,以高可用性(HA)+ 高性能 + 高性能/價格比 + 高可伸縮性為最終目的。負載均衡器采用HA技術構架,采用Heartbeat軟件包,heartbeat采用串口、網絡口冗余線路,保證24X7不間斷運行。結構如圖:


Setup LVS using LVS-DR forwarding







________
| |
| client |
|________|
CIP= SGW =192.168.7.254/24 (eth0)
|
|
eth1 __________ |
192.168.0.1 | director | |
--------| primiary |---| DIP=192.168.7.9/24 (eth0)
| |__________| |
| ttyS0| |
|heartbeat | |
|backup | | VIP=192.168.7.110/32 (eth0:0)*
| ttyS0| |
| _____|____ |
| | director | |
--------| backup |---| DIP=192.168.7.10/24 (eth0)
eth1 |__________| |
192.168.0.2 |
|
|
|
|
-----------------------------------
| |
| |
RIP=192.168.7.11/24 (eth0) RIP=192.168.7.12/24 (eth0)
VIP=192.168.7.110/32 (lo:0) VIP=192.168.7.110/32 (lo:0)
____________ ____________
| | | |
| realserver | ………………………….. | realserver |
|____________| |____________|




2.2. 設備要求:


因為負載均衡器和真實服務器節點均有軟硬件冗余保障,所以硬件設備可以根據具體資金情況及提供服務規模而定。當然最好采用支持RAID,SCSI,內存ECC校驗,熱插拔等技術的專用服務器,以提供穩定高效的服務。對于非關鍵業務服務,也可以考慮采用最新支持IDE RAID(0,1,0+1,1.5,5)的服務器,可以獲得一個良好的性能/價格比。當然,如果你是一個對硬件技術細節非常熟悉,說話又有分量,對自己非常有信心,敢冒風險,崇尚節約、實用性的人,那么DIY一組高性價比的服務器集群,也是一件非常有意義而且充滿樂趣的工作。


2.3.原始軟件環境:


Red Hat 9.0 完全安裝
Red Hat 9.0 (kernel-2.4.20-8 ) gcc -3.2.2-5


如果你使用的是Red Hat 8 ,那么你很幸運。Red Hat 8 (kernel-2.4.18-14)已經預先打了ipvs的補丁,在預安裝的內核中已將ipvs編譯成模塊,可以通過檢查 /lib/modules/2.4.18-14/kernel/net/ipv4/ipvs 是否存在來判斷??梢灾苯影惭bipvsadm。從Red Hat 9 (kernel-2.4.20-8),Red Hat 取消了ipvs的補丁及預編譯ipvs為模塊的內核,且Red Hat 9 自帶的kernel-2.4.20-8的內核無法通過ipvs補丁linux-2.4.20-ipvs-1.0.9 .patch.gz的編譯,至少在我的兩臺P4的機器上都沒有通過編譯。標準內核linux-2.4.20.tar.gz則可以通過編譯。所以我們將采用www.kernel.org上的標準內核kernel-2.4.20.tar.gz來構造我們的集群系統。


2.4.需下載軟件包:


# Linux kernel
http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.gz


# ipvs patch
http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-1.0.9.patch.gz


# ipvs tar ball
http://www.linuxvirtualserver.org/software/kernel-2.4/ipvs-1.0.9.tar.gz


# hidden patch(已經包括在ipvs-1.0.9.tar.gz,可不用下載)
http://www.ssi.bg/~ja/hidden-2.4.20pre10-1.diff (解決arp 問題 for LVS-DR/LVS-Tun)


# ipvsadm (已包含在ipvs-1.0.9.tar.gz包中, 可不用下載)


# Ldirectord
http://www.linux-ha.org/download/heartbeat-ldirectord-1.0.3-1.i386.rpm


# heartbeat
http://www.linux-ha.org/download/heartbeat-1.0.3.tar.gz
http://www.linux-ha.org/download/heartbeat-1.0.3-1.src.rpm
http://www.linux-ha.org/download/heartbeat-1.0.3-1.i386.rpm
http://www.linux-ha.org/download/heartbeat-pils-1.0.3-1.i386.rpm
http://www.linux-ha.org/download/heartbeat-stonith-1.0.3-1.i386.rpm


2.5. 安裝要求:


2.5.1 Director:



  • 內核打non-arp的補丁hidden-2.4.20pre10-1.diff (解決arp problem for LVS-DR/LVS-Tun,雖然在Directors上運行時并不需要,但硬件環境如果和Realserver類似,內核可以直接放到RealServer上運行,不用再為realServer重新編譯內核,當然也可不打該補丁。)
  • 內核打ipvs的補丁linux-2.4.20-ipvs-1.0.9.patch.gz,重新編譯新內核。
  • 運行新內核后編譯安裝ipvsadm。(LVS-NAT (network address translation); LVS-DR (direct routing) and LVS-Tun (tunneling). 真實服務器 realserver/service 的轉發方式由ipvsadm來設置。)

2.5.2 RealServes: (在LVS-NAT方式下,不需要打任何補?。?/b>


內核打arp的補丁hidden-2.4.20pre10-1.diff (arp problem for LVS-DR/LVS-Tun)編譯新內核。



  • 解決Non-arp problem
  • 設置缺省網關(gw)

    • LVS-NAT: director(DIP)
    • LVS-DR, LVS-Tun: 對外路由 (不是director的IP).

如果你不知道你的內核源代碼是否已經預打過ipvs的補丁, 可以詢問你的Linux發行版的制造商或查看相關ipvs 文件,文件名類似于 /usr/src/linux-2.4/net/ipv4/ip_vs_*.c。


2.6. 安裝步驟:


2.6.1 Director或RealServer上內核的安裝:






export D=/tmp/download
mkdir $D
cd $D
wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.gz
wget http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-1.0.9 .patch.gz
wget http://www.linuxvirtualserver.org/software/kernel-2.4/ipvs-1.0.9.tar.gz

tar zxvf linux-2.4.20.tar.gz
tar zxvf ipvs-1.0.9.tar.gz
gunzip linux-2.4.20-ipvs-1.0.9.patch.gz
mv linux-2.4.20 /usr/src/linux-2.4.20
cd /usr/src
rm -f linux-2.4
ln -s linux-2.4.20 linux-2.4
cd linux-2.4
patch -p1 < $D/ipvs-1.0.9/contrib/patches/hidden-2.4.20pre10-1.diff (arp for LVS-DR/LVS-Tun)
patch -p1 < $D/linux-2.4.20-ipvs-1.0.9.patch (僅在編譯Director內核時打補?。?br />make mrproper
cp /boot/config-2.4.20-8 .config (使用Red Hat 9自帶的config內核配置文件或使用/usr/src/linux-2.4.7-10/configs下的配置文件)

make menuconfig(參照相關ipvs及內核配置)
或在圖形界面運行: make xconfig



相關網絡內核選項:



相關LVS內核選項:








make dep
make clean
make bzImage
make modules
make modules_install
cp arch/i386/boot/bzImage /boot/ vmlinuz-2.4.20-lvs (rs)
cp System.map /boot/System.map.2.4.20-lvs (rs)
cp vmlinux /boot/vmlinux-2.4.20-lvs (rs)
cd /boot
rm -f System map
ln -s System.map.2.4.20-lvs (rs) System.map

vi /boot/grub/grub.conf:
title 2.4.20-lvs
root (hd0,0)
kernel /boot/vmlinuz-2.4.20-lvs (rs) ro root=/dev/xxx





如果要安裝該內核在其它機器上:






tar czf linux-2.4.20-dir.tgz /usr/src/linux-2.4.20/

在其它機器上解壓tar zxvf linux-2.4.20-dir.tgz 放置到/usr/src
rm -f linux-2.4
ln -s linux-2.4.20 linux-2.4
cd linux-2.4
make modules_install
cp arch/i386/boot/bzImage /boot/ vmlinuz-2.4.20-lvs (rs)
cp System.map /boot/System.map.2.4.20-lvs (rs)
cd /boot
rm -f System map
ln -s System.map.2.4.20-lvs (rs) System.map

vi /boot/grub/grub.conf:
title 2.4.20-lvs
root (hd0,0)
kernel /boot/vmlinuz-2.4.20-lvs (rs) ro root=/dev/xxx

2.6.2 Director上ipvsadm 的安裝:


用打過ipvs和hidden(for LVS-DR/LVS-Tun)補丁的新內核啟動linux






cd / tmp/download/ipvs-1.0.9/ipvs/ipvsadm
make install

檢查ipvsadm 探測到內核的ipvs的補丁可以運行






ipvsadm


如果成功你會看到類似于如下內容:






director: /usr/src# ipvsadm
IP Virtual Server version 0.2.7 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn



說明安裝成功


運行lsmod | grep ip_vs 可以看到ip_vs模塊已經被插入內核運行。


2.6.3. 運行腳本( Run Scripts )


以下以最常用的LVS-DR模式來介紹相關的腳本設置


( 以Telnet服務, 輪叫(rr)策略為例 )


2.6.3.1 Director上:






#!/bin/bash
#---------------mini-rc.lvs_dr-director------------------------
#set ip_forward OFF for vs-dr director (1 on, 0 off)
cat /proc/sys/net/ipv4/ip_forward
echo 0 >/proc/sys/net/ipv4/ip_forward

#director is not gw for realservers: leave icmp redirects on
echo 'setting icmp redirects (1 on, 0 off) '
echo 1 >/proc/sys/net/ipv4/conf/all/send_redirects
cat /proc/sys/net/ipv4/conf/all/send_redirects
echo 1 >/proc/sys/net/ipv4/conf/default/send_redirects
cat /proc/sys/net/ipv4/conf/default/send_redirects
echo 1 >/proc/sys/net/ipv4/conf/eth0/send_redirects
cat /proc/sys/net/ipv4/conf/eth0/send_redirects

#add ethernet device and routing for VIP 192.168.7.110
#if use backup director ,pay any attention about bellow
/sbin/ifconfig eth0:0 192.168.7.110 broadcast 192.168.7.110 netmask 255.255.255.255 up
/sbin/route add -host 192.168.7.110 dev eth0:0
#listing ifconfig info for VIP 192.168.7.110
/sbin/ifconfig eth0:0

#check VIP 192.168.7.110 is reachable from self (director)
/bin/ping -c 1 192.168.7.110
#listing routing info for VIP 192.168.7.110
/bin/netstat -rn

#setup_ipvsadm_table
#clear ipvsadm table
/sbin/ipvsadm -C
#installing LVS services with ipvsadm
#add telnet to VIP with round robin scheduling
/sbin/ipvsadm -A -t 192.168.7.110:telnet -s rr

#forward telnet to realserver using direct routing with weight 1
/sbin/ipvsadm -a -t 192.168.7.110:telnet -r 192.168.7.11 -g -w 1
#check realserver reachable from director
ping -c 1 192.168.7.11

#forward telnet to realserver using direct routing with weight 1
/sbin/ipvsadm -a -t 192.168.7.110:telnet -r 192.168.7.12 -g -w 1
#check realserver reachable from director
ping -c 1 192.168.7.12

#displaying ipvsadm settings
/sbin/ipvsadm

#not installing a default gw for LVS_TYPE vs-dr
#---------------mini-rc.lvs_dr-director------------------------

該段運行腳本對于熟悉Linux網絡配置的讀者來說應該很容易理解。由于LVS是通過對標準內核打補丁,在內核級提供支持,所以在LVS-DR模式下,首先是進行內核的相關設置。要關閉標準內核下的ip_forward轉發方式,即置為0。同時因為LVS-DR模式下,集群的網關是外部網關,而不是負載均衡器。所以要打開icmp包的重定向設置send_redirects 置為1。接著就是綁定集群的虛擬服務器的IP地址,并添加一條到該IP地址的主機路由。然后對該虛擬IP做一些必要的自我檢測,同時列出路由表。最后是有關ipvasdm的設置,首先清空ipvasdm表,然后添加需要提供負載均衡的服務及調度策略,這里例舉的是telnet服務,也可以直接使用端口號,調度策略為輪叫(rr)策略。最后添加轉發到真實服務器的直接路由,如果有多臺RealServer或需要提供多種服務的負載均衡,依次添加。再做一些到RealServer的網絡測試(也可不要),最后顯示ipvasdm所有的設置信息。


注意:


ipvs-1.0.9.tar.gz中包含的ipvsadm是1.21版,安裝后在/etc/rc.d/init.d/目錄下自動生成了標準的init服務腳本,如果你的Director沒有安裝備份服務器,你可以通過服務管理工具讓它在相應的運行級里自動運行,如果Director是HA系統,則由heartbeat控制運行。


另外該服務腳本提供了配置保存功能。配置文件為:/etc/sysconfig/ipvsadm 你必須手工建立。然后在其中輸入規則和策略:


例如:






-A -t 192.168.7.110:telnet -s rr
-A -t 192.168.7.110:http -s rr
-a -t 192.168.7.110:telnet -r 192.168.7.11 -g -w 1
-a -t 192.168.7.110:http -r 192.168.7.11 -g -w 1


然后存盤。


或直接運行:






/sbin/ipvsadm -A -t 192.168.7.110:telnet -s rr
/sbin/ipvsadm -A -t 192.168.7.110:http - rr
/sbin/ipvsadm -a -t 192.168.7.110:telnet -r 192.168.7.11 -g -w 1
/sbin/ipvsadm -a -t 192.168.7.110:http -r 192.168.7.11 -g -w 1



然后運行:/etc/rc.d/init.d/ipvsadm save


就可以保存當前配置到/etc/sysconfig/ipvsadm文件中。


在具有HA系統的Director上,ipvsadm可以方便地被Heartbeat管理-啟動、停止。Director上的VIP(虛擬)服務器地址由Heartbeat負責設置和切換。


做法如下:


在Heartbeat的配置文件haresources中加類似入如下一行:


linuxha1 IPaddr::192.168.7.110/24/192.168.7.255 ipvsadm ldirectord::www ldirectord::mail


2.6.3.2. RealServers上:






#!/bin/bash
#----------mini-rc.lvs_dr-realserver------------------
#installing default gw 192.168.7.254 for vs-dr
/sbin/route add default gw 192.168.7.254
#showing routing table
/bin/netstat -rn
#checking if DEFAULT_GW 192.168.1.254 is reachable
ping -c 1 192.168.7.254

#set_realserver_ip_forwarding to OFF (1 on, 0 off).
echo 0 >/proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward

#looking for DIP 192.168.7.9
ping -c 1 192.168.7.9

#looking for VIP (will be on director)
ping -c 1 192.168.7.110

#install_realserver_vip
/sbin/ifconfig lo:0 192.168.7.110 broadcast 192.168.7.110 netmask 255.255.255.255 up
#ifconfig output
/sbin/ifconfig lo:0
#installing route for VIP 192.168.1.110 on device lo:0
/sbin/route add -host 192.168.7.110 dev lo:0
#listing routing info for VIP 192.168.7.110
/bin/netstat -rn

#hiding interface lo:110, will not arp
echo 1 >/proc/sys/net/ipv4/conf/all/hidden
cat /proc/sys/net/ipv4/conf/all/hidden
echo 1 >/proc/sys/net/ipv4/conf/lo/hidden
cat /proc/sys/net/ipv4/conf/lo/hidden

#----------mini-rc.lvs_dr-realserver------------------



該段腳本和上面的腳本比較類似,相信不用再多做介紹了。需要注意的是:LVS-DR模式下,缺省網關的設置。集群的網關是外部網關,而不是負載均衡器。還有就是RealServer上綁定的VIP地址的設備lo:0。另外不要忘了開啟not arp補丁的設置開關。相信你已經很清楚了。


你也可以把以上腳本改寫成符合init語法的標準腳本,放到/etc/rc.d/init.d/下面運行,或直接加到/etc/init.d/rc.local下運行。


改寫為標準init語法腳本如下:







#!/bin/bash
#
# hidden This shell script takes care of starting and stopping
# the ipvs-hidden subsystem (hiddend).
#
# chkconfig: 2345 78 12
# description: ipvs-hidden
# processname: hiddend

prog="hidden"

start(){

echo 0 >/proc/sys/net/ipv4/ip_forward
/sbin/ifconfig lo:0 192.168.7.110 broadcast 192.168.7.110 netmask 255.255.255.255 up
# installing route for VIP 192.168.1.110 on device lo:0
/sbin/route add -host 192.168.7.110 dev lo:0
# listing routing info for VIP 192.168.7.110
/bin/netstat -rn
# hiding interface lo:0, will not arp
# echo 1 >/proc/sys/net/ipv4/conf/all/hidden
echo 1 >/proc/sys/net/ipv4/conf/lo/hidden

}

stop(){

echo 1 >/proc/sys/net/ipv4/ip_forward
/sbin/ifconfig lo:0 192.168.7.110 broadcast 192.168.7.110 netmask 255.255.255.255 down
/sbin/route del -host 192.168.7.110 dev lo:0
# echo 0 >/proc/sys/net/ipv4/conf/all/hidden
echo 0 >/proc/sys/net/ipv4/conf/lo/hidden
}

restart(){
stop
start
}

condrestart(){
[ -e /var/lock/subsys/hiddend ] && restart || :
}

# See how we were called.
case "" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $"Usage: "
exit 1
esac

exit $?

然后:





cp rc.lvs /etc/rc.d/init.d/hiddend
chmod 755 /etc/rc.d/init/d/hiddend
chkconfig - -add hiddend


2.6.4. Ldirectord的安裝:


一些文章介紹在ipvs-x.x.x.tar.gz中已包含了Ldirectord,估計該作者并沒有進入到相關目錄中去仔細查看,該目錄中只有一個README文件,告訴你在哪里可以找到Ldirecrtord的代碼??傊以趇pvs-1.0.9.tar.gz中是沒有看到Ldirectord源代碼。其實它的源代碼是包含在heartbeat-1.0.3.tar.gz中的。所以請到這里下載相關代碼:http://www.linux-ha.org/download/


在安裝時可能會遇到依賴性的錯誤,可以用--nodeps參數進行安裝??傊阉崾舅枰膔pm包(在dependancies目錄下)全部裝上。在dependancies目錄下其它一些其它rpm包,如果不用相關功能可以不裝。


源代碼安裝:






cd heartbeat-1.0.3
./ConfigureMe configure
make
make install.


rpm安裝:






rpm -ivh --nodeps heartbeat-1.0.3.i386.rpm
可以通過命令:rpm -q heartbeat-ldirecrord -d 來檢查安裝的路徑。


為了簡化安裝步驟,我安裝的是Ldirectord for Red Hat 9的rpm包,RedHat和Debian版本的從這里下載:http://www.ultramonkey.org/download/heartbeat/


注意:


/usr/share/doc/heartbeat-ldirectord-1.0.3/ldirectord.cf文件是Ldirectord的配置文件的范例。拷貝該文件到/etc/ha.d/目錄下,修改其內容,并另存為xxx.cf(例如:www.cf,mail.cf),以便在Heartbeat的配置文件haresources中使用。


范例:www.cf(http服務)






#
# Sample ldirectord configuration file to configure various virtual services.
#
# Ldirectord will connect to each real server once per second and request
# /index.html. If the data returned by the server does not contain the
# string "Test Message" then the test fails and the real server will be
# taken out of the available pool. The real server will be added back into
# the pool once the test succeeds. If all real servers are removed from the
# pool then localhost:80 is added to the pool as a fallback measure.

# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
#logfile="/var/log/ldirectord.log"
#logfile="local0"
quiescent=yes

# A sample virual with a fallback that will override the gobal setting
virtual=192.168.7.110:80
real=192.168.7.11:80 gate
real=192.168.7.12:80 gate
real=192.168.7.13:80 gate
fallback=127.0.0.1:80 gate
service=http
request="/.testpage"
receive="Test Page"
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp


然后你必須在每臺真實服務器節點的www的根目錄上生成以Test Page為內容的.testpage文件。在每臺真實服務器節點的www的根目錄上執行命令:echo "Test Page" > .testpage


2.6.5. 配置 Heartbeat


需要配置的有三個文件:ha.cf haresources(在每個節點必須相同) Authkeys,應該將它們放置在/etc/ha.d目錄下。范例配置在/usr/shared/doc/heartbeat-1.0.3目錄下,你可以修改后拷貝到/etc/ha.d目錄下。


2.6.5.1. 配置ha.cf


這個配置文件告訴heartbeat 使用的是什么介質和如何配置它們。ha.cf 包含你將到的所有的選項,內容如下:


serial /dev/ttyS0


使用串口heartbeat - 如果你不使用串口heartbeat, 你必須選擇其它的介質,比如以太網bcast (ethernet) heartbeat。如果你使用其它串口heartbeat,修改/dev/ttyS0 為其它的串口設備。


watchdog /dev/watchdog


可選項:watchdog功能提供了一種方法能讓系統在出現故障無法提供"heartbeat"時,仍然具有最小的功能,能在出現故障1分鐘后重啟該機器。這個功能可以幫助服務器在確實停止心跳后能夠重新恢復心跳。如果你想使用該特性,你必須在內核中裝入"softdog" 內核模塊用來生成實際的設備文件。想要達到這個目的, 首先輸入 "insmod softdog" 加載模塊。然后,輸入"grep misc /proc/devices" 注意顯示的數字 (should be 10). 然后, 輸入"cat /proc/misc | grep watchdog" 注意輸出顯示出的數字(should be 130)?,F在你可以生成設備文件使用如下命令:"mknod /dev/watchdog c 10 130" 。


bcast eth1


指定使用的廣播heartbeat 的網絡接口eth1(修改為eth0, eth2, 或你所使用的接口)


keepalive 2


設置心跳間隔時間為2兩秒。


warntime 10


在日志中發出最后心跳"late heartbeat" 前的警告時間設定。


deadtime 30


在30秒后明確該節點的死亡。


initdead 120


在一些配置中,節點重啟后需要花一些時間啟動網絡。這個時間與"deadtime"不同,要單獨對待。 至少是標準死亡時間的兩倍。


hopfudge 1


可選項: 用于環狀拓撲結構,在集群中總共跳躍節點的數量。


baud 19200


串口波特率的設定(bps).


udpport 694


bcast和ucast通訊使用的端口號694 。這是缺省值,官方IANA 使用標準端口號。


nice_failback on


可選項:對那些熟悉Tru64 Unix, 心跳活動就像是"favored member"模式。主節點獲取所有資源直到它宕機,同時備份節點啟用。一旦主節點重新開始工作, 它將從備份節點重新獲取所有資源。這個選項用來防止主節點失效后重新又獲得集群資源。


node linuxha1.linux-ha.org


強制選項:通過`uname -n`命令顯示出的集群中的機器名。


node linuxha2.linux-ha.org


強制選項:通過`uname -n`命令顯示出的集群中的機器名。


respawn userid cmd


可選項:列出可以被spawned 和監控的命令。例如:To spawn ccm 后臺進程,可以增加如下內容:
respawn hacluster /usr/lib/heartbeat/ccm
通知heartbeat 重新以可信任userid身份運行(在我們的例子中是hacluster) 同時監視該進程的"健康"狀況,如果進程死掉,重啟它。例如ipfail, 內容如下:
respawn hacluster /usr/lib/heartbeat/ipfail
NOTE: 如果進程以退出代碼100死掉, 這個進程將不會respawned。

ping ping1.linux-ha.org ping2.linux-ha.org ....


可選項:指定ping 的節點。 這些節點不是集群中的節點。它們用來檢測網絡的連接性,以便運行一些像ipfail的模塊。


2.6.5.2. 配置 haresources


一旦你配置好了ha.cf文件,下面就需要設置haresources文件,這個文件指定集群所提供的服務以及誰是缺省的主節點。注意,該配置文件在所有節點應該是相同的。


在我們的例子中,我們的HA集群提供的是負載均衡服務(LVS)和服務監控服務(Ldirectord)。這里集群的IP(虛擬)地址是必須配置的,不要在haresources文件以外的地方配置該IP地址。所以我們應該添加如下一行:


linuxha1 IPaddr::192.168.7.110/24/192.168.7.255 ipvsadm ldirectord::www ldirectord::mail


::前的表示服務腳本名稱(IPaddr),你可以在目錄/etc/ha.d/resource.d下找到一個腳本名叫 Ipaddr,后面的表示輸入的參數。


Heartbeat 會在下面的路徑搜索同名的啟動腳本:
/etc/ha.d/resource.d
/etc/rc.d/init.d


這里的服務腳本的使用是符合Init標準語法,所以你可以在這里通過Heartbeat方便地運行、停止/etc/rc.d/init.d下標準的服務后臺進程。


2.6.5.3. 配置 Authkeys


配置加密認證算法,有三種算法:CRC, md5,sha1。你會問我們應該用哪種呢?


如果你的heartbeat運行在一個安全的網絡,例如CAT5交叉線,你可以用CRC,從資源開銷上來說,這是最節省開銷的。如果網絡是不可靠的,而且你也不是一個網絡安全癡狂者或者你十分關心CPU資源的最小開銷,就用md5,最后如果你關心的是安全而不是CPU資源的開銷,那么建議你使用sha1,你將會得到最佳的安全度,很難被黑客所破解。


格式如下:auth <number> <number> <authmethod> [<authkey>]


例: /etc/ha.d/authkeys


使用sha1
auth 1
1 sha1 key-for-sha1-any-text-you-want


使用md5
auth 1
1 sha1 key-for-md5-any-text-you-want


使用CRC
auth 2
2 crc


chmod 600 Authkeys


3.WindowsNT/2K做RealServer


在本文介紹的方案中,正如前面所提到的,集群中的真實節點可以是Linux系統,也可以是WindowsNT/2K或其它支持的系統,在本文例舉的VS/DR方式下,支持WindowsNT/2K做為RealServer,提是你必須安裝了MS Lookback Adapter。如果你沒有在NT/2K上安裝MS Lookback Adapter Driver,你可以選擇添加新硬件,添加網絡適配器,選擇Microsoft,選擇Lookback Adapter. 你可能會需要NT的安裝盤。然后添加VIP (Virtual IP) 地址在 MS Loopback Adapter上, 不要輸入網關gateway IP地址。子網掩碼 255.255.255.255 在MS NT/2K會被認為是無效的。你有兩種解決方法:




  1. 你先接受缺省的netmask, 然后進入MS-DOS 提示符,刪除外部路由


    c: route delete <VIP's network> <VIP's netmask>


    這將改變包的發送方向到其它的網絡界面,而不是MS Loopback interface. 因此在這里設置網絡掩碼為255.0.0.0 同樣可以工作。



  2. 可以通過修改注冊表設置子網掩碼為255.255.255.255, 這在我的DR系統中工作良好。而且這比每次啟動時刪除外部路由的方法要方便的多。


    在Windows 2000,中 網絡界面(interfaces)在:


    HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTcpipParametersInterfaces


    找到適當的網絡界面IP地址,修改它的子網掩碼,(注意修改方式)不需要重啟,只需重新激活該網絡界面即可。


本人強烈建議您使用第二種方法,這將帶來極大的方便。


4.啟動和測試


4.1. 啟動:






cd /etc/rc.d/rc0.d ; ln -s ../init.d/heartbeat K05heartbeat
cd /etc/rc.d/rc3.d ; ln -s ../init.d/heartbeat S75heartbeat
cd /etc/rc.d/rc5.d ; ln -s ../init.d/heartbeat S75heartbeat
cd /etc/rc.d/rc6.d ; ln -s ../init.d/heartbeat K05heartbeat


如果你安裝的是rpm的版本,該連接已經被建立,就不需要手工建立以上連接了。


注意:


如果你使用watchdog 功能,你必須在啟動的時候裝入該模塊。你可以在 /etc/rc.d/rc.sysinit 文件中加如一句:


/sbin/insmod softdog


4.2. 測試:


測試分為三部分測試


1)HA負載調度器測試


可以用telnet服務來驗證HA負載調度器是否正常工作,方法:


修改haresources為:linuxha1.linux-ha.org IPaddr::192.168.7.110/24/192.168.7.255 telnet


在客戶機上telnet到192.168.7.110上,你將會看到linuxha1,然后宕掉linuxha1, 再telnet到192.168.7.110上,你將會看到linuxha2,說明HA工作正常。中間間隔時間10秒左右。如果超過30秒仍無法正常工作,說明有問題存在。在測試中要保證至少有一條心跳線連接良好,否則重新連上心跳線后會引起資源上的混亂。


2)HA+LVS測試


如果HA負載調度器可以正常工作,那么就可以進行HA+LVS測試,方法類似:


修改haresources為:


linuxha1.linux-ha.org IPaddr::192.168.7.110/24/192.168.7.255 ipvsadm


設置ipvsadm中相關http的規則。


在RealServers上打開httpd服務。然后在不同的RealServer www首頁上以內容區分開來。然后在客戶機上進行測試,客戶機上的瀏覽器由于緩沖的緣故,你可能需要刷新幾次。


再做宕機測試??磦浞軩irector能否正常接管,并且使RealServers繼續提供服務。


3)HA+LVS+Ldirectord測試


方法類似。修改haresources為:


linuxha1 IPaddr::192.168.7.110/24/192.168.7.255 ipvsadm ldirectord::www


加入ldirectord服務監控進程。宕掉部分RealServers上的服務,進行測試。你可以通過運行ipvsadm查看ipvs的路由表來確定宕掉服務的RealServer的相關該服務路由信息是否被更改。


如果以上測試都能正常通過,恭喜你,你的心血沒有白費。你將會得到一個高可用、高性能、高可伸縮性的服務集群。


結束語


到此,本文已接近尾聲,希望通過對本文的閱讀,能夠讓你了解什么是Linux下的集群技術,更重要的是讓你知道如何一步步地親自去構建Linux下的集群。鍛煉你理論與實際相結合工作的能力,能給你帶來工作中的樂趣與收獲。同時希望能與大家一起交流Linux下的相關技術,互相促進,相互提高。


參考文獻



原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97