LVS軟件實現Linux集羣

本文介紹了Linux下的cluster軟件LVS,並舉例介紹一個Linux下的cluster(集羣)的安裝和實現的詳細過程。
  在各種網絡服務普遍應用的今天,隨網絡速度的提高以及用戶的增加,在一些繁忙的場合,單憑一臺機器已經無法就能應付所有的網絡請求了。爲了解決這個問題,許多用戶就採用一組cluster(集羣)來代替單一的機器。cluster可以將多臺計算機連接起來協同運作以對外提供各種服務,比如Apache、FTP、 Mail等。
     用LVS來架設一組cluster
  在Linux上最常見的、也可能是運用最廣泛的cluster方案就是LVS(Linux VirtualServer),很高興LVS也是一箇中國人創建和開發的開放源碼項目。LVS自1998年開始,發展到現在已經是一個比較成熟的技術項目了。有許多比較著名網站和組織都在使用LVS架設的cluster,比如:linux.com">[url]www.linux[/url].com、sourceforge.net、[url]www.real.com[/url]等。
  下面就開始介紹一下,筆者是如何利用LVS來架設一組cluster來對外提供Apache和FTP服務的。
  安裝操作系統
  筆者選用的是Red Hat 9.0作爲些cluster的director機器和所有real server機器的操作系統。RH的安裝過程從略,筆者根據實際需要,只安裝了少數的包。對於成批安裝Linux,建議試試Kickstart來進入批理安裝。
  編譯支持LVS的內核
  LVS對Linux的kernel進行了修改和增加,所以要重新編譯 linux kernel。我們先從[url]http://www.linuxvirtualserver.org[/url]下載到LVS的內核補丁,對原有內核源代碼進行更新,然後重新編譯Linux的kernel。
  下載LVS的內核補丁時要注意補丁版本要和kernel版本相一致,對於RH9.0,它的Linux核心版本是2.4.20,所以對應內核補丁應該是[url]http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-1.0.9.patch.gz[/url]
  另外還有一個補丁是用來解決某些情況下ARP協議不能正常工作問題的,從[url]http://www.ssi.bg/~ja/hidden-2.4.20pre10-1.diff[/url]下載
  把上面下載的兩個補丁複製到/usr/src目錄下,然後執行以下命令:
  cd /usr/src
  gzip -cd linux-2.4.20-ipvs-1.0.9.patch.gz
  cd /usr/src/linux
  patch -p1 < ../linux-2.4.20-ipvs-1.0.9.patch
  patch -p1 < ../hidden-2.4.20pre10-1.diff
  make mrproper
  make menuconfig
  執行make menuconfig時,我們將進入一個圖形化的界面,在其中可以對Linux Kernel進行詳細設置。與LVS相關的kernel選項都在“Networking options”中,進入“Networking options”,可以查看到“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
  <M> shortest expected delay scheduling
  <M> never queue scheduling
  --- IPVS application helper
  <M> FTP protocol helper
  另外,“Networking options”中的“IP: Netfilter Configuration"中的選項的所有子項,除了以下兩項不要選之外,其它全可以選:
  < > ipchains (2.2-style) support
  < > ipfwadm (2.0-style) support
  還有,“Networking options”中還有一些關於網絡的選項,要注意按自己的需要去選擇:
  <*> Packet socket
  [ ] Packet socket: mmapped IO
  <*> Netlink device emulation

  Network packet filtering (replaces ipchains)

  Network packet filtering debugging

  Socket Filtering
  <*> Unix domain sockets

  TCP/IP networking

  IP: multicasting

  IP: advanced router

  IP: policy routing
  [ ] IP: use netfilter MARK value as routing key
  [ ] IP: fast network address translation
  <M> IP: tunneling
kernel的配置
  對於kernel的其它選項,你可以根據需要進行選擇。kernel的配置是一項很需要經驗、細心和耐心的工作,不當的配置可能會導致編譯過程中出現錯誤或者是新的kernel不能驅動原有的設備等問題。
  退出保存,然後繼續執行以下命令:
  make dep
  make clean
  make bzImage
  make modules
  make modules_install
  以上各步可能需要一點時間,如果出錯請重新檢查你的kernel配置,如果沒有出現任何錯誤就繼續執行以下命令:
  depmod -a
  cp arch/i386/boot/bzImage /boot/vmlinuz-lvs
  cp System.map /boot/System.map-lvs
  cd /boot
  rm System.map
  ln -s System.map-lvs System.map
  然後修改你的lilo.conf使用新的kernel啓動,比如在lilo.conf中以增加下幾行以增加關於新的支持LVS的kernel的啓動項:
  p_w_picpath=/boot/vmlinuz-lvs
  label=lvs
  read-only
  root=/dev/sda1
  注:如果使用Grub做啓動引導程序的,請自行做對應的修改,以增加關於新的支持LVS的kernel的啓動項。
  重新啓動Linux,選擇lvs項進入Linux。
  安裝ipvsadm
  如果正常啓動了,就開始安裝IP虛擬服務器軟件ipvsadm。因爲我們用的是RH,所以我們直接下載RPM包進行安裝。RPM包從以下地址下載:
  [url]http://www.linuxvirtualserver.org/software/kernel-2.4/ipvsadm-1.21-7.src.rpm[/url]
  用以下命令來安裝ipvsadm:
  rpmbuild --rebuild ipvsadm-1.21-7.src.rpm
  rpm -ivh /usr/src/redhat/RPMS/i386/ipvsadm-1.21-7.i386.rpm
  至此,LVS的安裝算是完成了一半。就是說,現在的Linux已經具備了實現LVS的能力了,接下來的問題就是如果使用LVS來構建一組 cluster了。要想實現一組cluster,我們就要使用ipvsadm工具進行配置,而在我們開始使用ipvsadm進行配置之前,我們需要了解一些基本的LVS的知識,特別是以下三個要點:LVS的結構、LVS的三種包轉發方式、LVS的八種調度算法。只有瞭解了這些知識以後,我們才能理該如何使用ipvsadm來進行配置。
介紹:LVS三個要點
    下面簡單介紹LVS的這三個要點:
  1. LVS的結構
  LVS方式的cluster從結構上可分爲兩部分:前端的負載均衡器(稱之爲director)和後端的真實
服務器(稱之爲real server)。cluster前端的director將來自外界的請求調度到cluster後端不同的real server去執行。real server負責真正的提供各種應用服務,比如:Web、FTP、Mail等服務。real server的數量可以根據實際需求進行增加、減少。
  2. LVS的三種包轉發方式
  LVS提供了三種包轉發方式:NAT(網絡地址映射)、IP Tunneling(IP隧道)、Direct Routing(直接路由)。不同的轉發模式決定了不同的cluster的網絡結構,下面對三種轉發方式分別介始:
  NAT(網絡地址映射)
  NAT方式可支持任何的操作系統,以及私有網絡,並且只需一個Internet IP地址,但是整個系統的性能受到限制。因爲執行NAT每次需要重寫包,有一定的延遲;另外,大部分應用有80%的數據是從服務器流向客戶機,也就是用戶的請求非常短,而服務器的迴應非常大,對負載均衡器形成很大壓力,成爲了新的瓶頸。
  IP Tunneling(IP隧道)
  director分配請求到不同的real server。real server處理請求後直接回應給用戶,這樣director負載均衡器僅處理客戶機與服務器的一半連接。IP Tunneling技術極大地提高了director的調度處理能力,同時也極大地提高了系統能容納的最大節點數,可以超過100個節點。real server可以在任何LAN或WAN上運行,這意味着允許地理上的分佈,這在災難恢復中有重要意義。服務器必須擁有正式的IP地址用於與客戶機直接通信,並且所有服務器必須支持IP隧道
協議
  Direct Routing(直接路由)
  與IP Tunneling類似,負載均衡器僅處理一半的連接,避免了新的性能瓶頸,同樣增加了系統的可伸縮性。Direct Routing與IP Tunneling相比,沒有IP封裝的開銷,但由於採用物理層(修改MAC地址)技術,所有服務器都必須在一個物理網段。
  3. LVS的八種調度算法
  LVS已實現了以下八種調度算法:
  1.輪叫調度(Round-Robin Scheduling)
  2.加權輪叫調度(Weighted Round-Robin Scheduling)
  3.最小連接調度(Least-Connection Scheduling)
  4.加權最小連接調度(Weighted Least-Connection Scheduling)
  5.基於局部性的最少鏈接(Locality-Based Least Connections Scheduling)
  6.帶複製的基於局部性最少鏈接(Locality-Based Least Connections with Replication Scheduling)
  7.目標地址散列調度(Destination Hashing Scheduling)
  8.源地址散列調度(Source Hashing Scheduling)
  注:如果想了解關於以上幾點的技術細節,LVS的主頁查詢。LVS的主頁是:
  
[url]http://www.LinuxVirtualServer.org/[/url]
  [url]http://www.linux-vs.org/[/url]
  瞭解了LVS的三個要點之後,接下來我們來配置一個採用Direct Routing包轉發方式、加權最小連接調度算法的cluster。

  我們知道Direct Routing包轉發方式是通過改寫請求報文的MAC地址,將請求發送到real server。前臺的director機器只需要接收和調度外界的請求,而不需要負責返回這些請求的反饋結果。director機器和real server都有一塊網卡連在同一物理網段上。
  director機器上需要進行如下配置:
  設置好本機的IP:192.168.2.1
  然後執行以下命令:
  ifconfig lo:0 192.168.2.254 netmask 255.255.255.255 broadcast
  192.168.2.254 up
  route add -host 192.168.2.254 dev lo:0
  echo 1 > /proc/sys/net/ipv4/ip_forward
  echo 1 >/proc/sys/net/ipv4/conf/all/hidden
  ipvsadm -C
  ipvsadm -A -t 192.168.2.254:80 -s wlc
  ipvsadm -a -t 192.168.2.254:80 -r 192.168.2.2 -g
  ipvsadm -a -t 192.168.2.254:80 -r 192.168.2.3 -g
  ......
  ipvsadm -A -t 192.168.2.254:21 -s wlc
  ipvsadm -a -t 192.168.2.254:21 -r 192.168.2.2 -g
  ipvsadm -a -t 192.168.2.254:21 -r 192.168.2.3 -g
  ......
  real server機器上需要進行如下配置:
  對於第一臺real server(RS1),設置好本機的IP:192.168.2.2 然後執行以下命令:
  ifconfig lo:0 192.168.2.254 netmask 255.255.255.255 broadcast
  192.168.2.254 up
  route add -host 192.168.2.254 dev lo:0
  對於其它real server:RS2、RS3、RS4......,做相類的設定。
  完成以上設置後,所有對192.168.2.254的80端口的訪問都會通過director機器分配到後面的real server上去,而real server的處理後結果將直接反饋給客戶。至此,我們完成了一個cluster的例子。通過這個例子,相信您也可以輕鬆地利用Linux架設起一組 cluster來。其實在cluster架設到這裏之後,還並不能達到正式應用的要求,實際應用中還有一些問題需要解決,比如要安裝監視軟件,監視集羣的運作,要能及時發現real server的故障並對應調整real server的列表。還有後臺real server節點的數據一致性等問題。這些在一些商用的cluster軟件產品中就得到了很好的解決,而網絡也有一些非商用的軟件,比如mon就是這樣的系統資源監控程序,可以監控網絡服務可用性、服務器問題等,最重要的是mon提供了一個框架,用戶可以自行定義和擴展。這些內容請參閱其它文章。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章