引領業界,打造優質生活空間
專業油漆粉刷,品質可靠,免費到府估價
隔音門窗專業工程團隊,配管整修,防水抓漏
裝潢拆除一次到位,免費到府估價,歡迎來電

首頁  •  j2h 論壇 • 程式設計討論     • 

利用集群技術實現Web伺服器的負載均衡

房東:黑玫瑰
發表時間:2007-02-26


集群和負載均衡的概念
  集群(Cluster)

  所謂集群是指一組獨立的計算機系統構成的一個松耦合的多處理器系統,它們之間透過網路實現進程間的通信。應用程式可以透過網路共享內存進行消息傳送,實現分佈式計算機。

  負載均衡(Load Balance)

  網路的負載均衡是一種動態均衡技術,透過一些工具實時地分析數據包,掌握網路中的數據流量狀況,把任務合理均衡地分發出去。這種技術基於現有網路架構,提供了一種擴展伺服器帶寬和增加伺服器吞吐量的廉價有效的方法,加強了網路數據處理能力,提升了網路的靈活性和可用性。

  特點

  (1)高可靠性(HA)。利用集群管理軟體,當主伺服器故障時,備份伺服器能夠自動接管主伺服器的工作,並及時切換過去,以實現對用戶的不間斷服務。

  (2)高性能計算(HP)。即充分利用集群中的每一台計算機的資源,實現複雜運算的並行處理,通常用於科學計算領域,比如基因分析、化學分析等。

  (3)負載平衡。即把負載壓力根據某種算法合理分發到集群中的每一台計算機上,以減輕主伺服器的壓力,降低對主伺服器的硬體和軟體要求。

  LVS系統架構與特點

  1. Linux Virtual Server︰簡稱LVS。是由中國一個Linux程式員章文嵩博士發起和領導的,基於Linux系統的伺服器集群解決方案,其實現目標是創建一個具有良好的擴展性、高可靠性、高性能和高可用性的體系。許多商業的集群產品,比如RedHat的Piranha、Turbo Linux公司的Turbo Cluster等,都是基於LVS的核心代碼的。

  2. 體系架構︰使用LVS架設的伺服器集群系統從體系架構上看是透明的,最終用戶只感覺到一個虛擬伺服器。物理伺服器之間可以透過高速的LAN或分佈在各地的 WAN相連。最前端是負載均衡器,它負責將各種服務請求分發給後面的物理伺服器,讓整個集群表現得像一個服務於同一IP位址的虛擬伺服器。

  3. LVS的三種模式工作原理和優缺點︰ Linux Virtual Server主要是在負載均衡器上實現的,負載均衡器是一台加了LVS Patch的2.2.x版內核的Linux系統。LVS Patch可以透過重新編譯內核的方法加入內核,也可以當作一個動態的模塊插入現下的內核中。

  負載均衡器可以營運在以下三種模式下︰

  (1)Virtual Server via NAT(VS-NAT)︰用位址翻譯實現虛擬伺服器。位址轉換器有能被外界訪問到的合法IP位址,它修改來自專有網路的流出包的位址。外界看起來包是來自位址轉換器本身,當外界包送到轉換器時,它能判斷出應該將包送到內部網的哪個節點。優點是節省IP位址,能對內部進行偽裝;缺點是效率低,因為返回給請求方的流量經過轉換器。

  (2)Virtual Server via IP Tunneling (VS-TUN)︰用IP隧道技術實現虛擬伺服器。這種模式是在集群的節點不在同一個網段時可用的轉發機製,是將IP包封裝在其他網路流量中的方法。為了安全的考慮,應該使用隧道技術中的VPN,也可使用租用專線。集群所能提供的服務是基於TCP/IP的Web服務、Mail服務、News服務、DNS服務、Proxy伺服器等等.

  (3)Virtual Server via Direct Routing(VS-DR)︰用直接路由技術實現虛擬伺服器。當參與集群的計算機和作為控制管理的計算機在同一個網段時可以用此法,控制管理的計算機接收到請求包時直接送到參與集群的節點。優點是返回給客戶的流量不經過控制主機,速度快開銷少。

  以四台伺服器為例實現負載均衡︰

  安裝配置LVS

  1. 安裝前準備︰

  (1)首先說明,LVS並不要求集群中的伺服器規格劃一,相反,可以根據伺服器的不同配置和負載狀況,調整負載分發策略,充分利用集群環境中的每一台伺服器。如下表︰

  Srv Eth0 Eth0︰0 Eth1 Eth1︰0

  vs1 10.0.0.1 10.0.0.2 192.168.10.1 192.168.10.254

  vsbak 10.0.0.3 192.168.10.102

  real1 192.168.10.100

  real2 192.168.10.101

  其中,10.0.0.2是允許用戶訪問的IP。

  (2)這4台伺服器中,vs1作為虛擬伺服器(即負載平衡伺服器),負責將用戶的訪問請求轉發到集群內部的real1,real2,然後由real1,real2分別處理。 Client為客戶端測試機器,可以為任意作業系統。

  (3)所有OS為redhat6.2,其中vs1 和vsbak 的核心是2.2.19, 而且patch過ipvs的包, 所有real server的Subnet mask 都是24位, vs1和vsbak 的10.0.0. 網段是24 位。

  2.理解LVS中的相關術語

  (1) ipvsadm ︰ipvsadm是LVS的一個用戶界面。在負載均衡器上編譯、安裝ipvsadm。

  (2) 調度算法︰ LVS的負載均衡器有以下幾種調度規則︰Round-robin,簡稱rr;weighted Round-robin,簡稱wrr;每個新的連接被輪流指派到每個物理伺服器。Least-connected,簡稱lc;weighted Least-connected,簡稱wlc,每個新的連接被分發到負擔最小的伺服器。

  (3) Persistent client connection,簡稱pcc,(持續的客戶端連接,內核2.2.10版以後才支援)。所有來自同一個IP的客戶端將一直連接到同一個物理伺服器。超時時間被設定為360秒。Pcc是為https和cookie服務設定的。在這處調度規則下,第一次連接後,所有以後來自相同客戶端的連接(包括來自其它端口)將會發送到相同的物理伺服器。但這也會帶來一個問題,因為大約有25%的Internet可能具有相同的IP位址。

  (4) Persistent port connection調度算法︰在內核2.2.12版以後,pcc功能已從一個調度算法(你可以選擇不同的調度算法︰rr、wrr、lc、wlc、 pcc)演變成為了一個開關選項(你可以讓rr、 wrr、lc、wlc具備pcc的屬性)。在設定時,如果你沒有選擇調度算法時,ipvsadm將預設為wlc算法。 在Persistent port connection(ppc)算法下,連接的指派是基於端口的,例如,來自相同終端的80端口與443端口的請求,將被分發到不同的物理伺服器上。不幸的是,如果你需要在的網站上採用cookies時將出問題,因為http是使用80端口,然而cookies需要使用443端口,這種方法下,很可能會出現cookies不正常的情況。

  (5)Load Node Feature of Linux Director︰讓Load balancer 也可以處理users 請求。

  (6)IPVS connection synchronization。

  (7)ARP Problem of LVS/TUN and LVS/DR︰這個問題只在LVS/DR,LVS/TUN 時存在。

  3. 配置實例

  (1) 需要的套裝軟件和包的安裝︰

  I. piranha-gui-0.4.12-2*.rpm (GUI界面cluster設定工具);

  II. piranha-0.4.12-2*.rpm;

  III. ipchains-1.3.9-6lp*.rpm (架設NAT)。

  取得套件或mount到光碟,進入RPMS目錄進行安裝:

  # rpm -Uvh piranha*

  # rpm -Uvh ipchains*

  (2) real server群︰

  真正提供服務的server(如web server),在NAT形式下是以內部虛擬網域的形式,設定如同一般虛擬網域中Client端使用網域︰192.168.10.0/24 架設模式同一般使用虛擬IP之局域網路。

  a. 設網卡IP

  real1 ︰192.168.10.100/24

  real2 ︰192.168.10.101/24

  b.每台server均將default gateway指向192.168.10.254。 192.168.10.254為該網域唯一對外之信道,設定在virtual server上,使該網域進出均需透過virtual server 。

  c.每台server均開啟httpd功能供web server服務,可以在各real server上放置不同內容之網頁,可由瀏覽器觀察其對各real server讀取網頁的情形。

  d.每台server都開啟rstatd、sshd、rwalld、ruser、rsh、rsync,並且從Vserver上面拿到相同的lvs.conf檔案。

  (3) virtual server︰

  作用在導引封包的對外主機,專職負責封包的轉送,不提供服務,但因為在NAT型式下必須對進出封包進行改寫,所以負擔亦重。

  a.IP設定︰

  對外eth0︰IP︰10.0.0.1 eth0︰0 ︰10.0.0.2 

  對內eth1︰192.168.10.1 eth1︰0 ︰192.168.10.254

  NAT形式下僅virtual server有真實IP,real server群則為透過virtual server.

  b.設定NAT功能

  # echo 1 > /proc/sys/net/ipv4/ip_forward

  # echo 1 > /proc/sys/net/ipv4/ip_always_defrag

  # ipchains -P forward MASQ

  c.設定piranha 進入X-window中 (也可以直接編輯/etc/lvs.cf )

  a).執行面板系統piranha

  b).設定“整體配置”(Global Settings) 主LVS伺服器主機IP︰10.0.0.2, 選定網路位址翻譯(預設) NAT路徑名稱︰ 192.168.10.254, NAT 路徑裝置︰ eth1︰0

  c).設定虛擬伺服器(Virtual Servers) 添加編輯虛擬伺服器部分︰(Virtual Server)名稱︰(任意取名);應用︰http;協議︰ tcp;連接︰80;位址︰10.0..0.2;裝置︰eth0︰0; 重入時間︰180 (預設);服務延時︰10 (預設);加載監控工具︰ruptime (預設);調度策略︰Weighted least-connections;持續性︰0 (預設); 持續性屏蔽︰255.255.255.255 (預設); 按下激活︰實時伺服器部分︰(Real Servers);添加編輯︰名字︰(任意取名); 位址︰192.168.10.100; 權重︰1 (預設) 按下激活

  另一架real server同上,位址︰192.168.10.101。

  d). 控制/監控(Controls/Monitoring) 控制︰piranha功能的激活與停止,上述內容設定完成後即可按開始鍵激活piranha.監控器︰顯示ipvsadm設定之routing table內容 可立即更新或定時更新。

  (4)備援主機的設定(HA)

  單一virtual server的cluster架構virtual server 負擔較大,提供另一主機擔任備援,可避免virtual server的故障而使對外服務工作終止;備份主機隨時處於預備狀態與virtual server相互偵測

  a.備份主機︰

  eth0︰ IP 10.0.0.3

  eth1︰ IP 192.168.10.102 同樣需安裝piranha,ipvsadm,ipchains等套件

  b.開啟NAT功能(同上面所述)。

  c.在virtual server(10.0.0.2)主機上設定。

  a).執行piranha冗餘度 ;

  b).按下“激活冗餘度”;

  冗餘LVS伺服器IP︰ 10.0.0.3;HEARTBEAT間隔(秒數)︰ 2 (預設)

  假定在…秒後進入DEAD狀態︰ 5 (預設); HEARTBEAT連接埠︰ 539 (預設)

  c).按下“套用”;

  d).至“控制/監控”頁,按下“在當前執行層添加PULSE DEAMON” ,按下“開始”;

  e).在監控器按下“自動更新”,這樣可由視窗中看到ipvsadm所設定的routing table,並且動態顯示real server線上情形,若real server故障,該主機亦會從監視視窗中消失。

  d.激活備份主機之pulse daemon (執行# /etc/rc.d/init.d/pulse start)。

  至此,HA功能已經激活,備份主機及virtual server由pulse daemon定時相互探詢,一但virtual server故障,備份主機立刻激活代替;至virtual server 正常上線後隨即將工作交還virtual server。

  LVS測試

  經過了上面的配置步驟,現下可以測試LVS了,步驟如下︰

  1. 分別在vs1,real1,real2上營運/etc/lvs/rc.lvs_dr。注意,real1,real2上面的/etc/lvs目錄是vs2輸出的。如果您的NFS配置沒有成功,也可以把vs1上/etc/lvs/rc.lvs_dr複製到real1,real2上,然後分別營運。確保 real1,real2上面的apache已經啟動並且允許telnet。

  2. 測試Telnet︰從client營運telnet 10.0.0.2, 如果登錄後看到如下輸出就說明集群已經開始工作了︰(假設以guest用戶身分登錄)

  [guest@real1 guest]$──說明已經登錄到伺服器real1上。

  再開啟一個telnet視窗,登錄後會發現系統提示變為︰

  [guest@real2 guest]$──說明已經登錄到伺服器real2上。

  3. 測試http︰從client營運iexplore http://10.0.0.2

  因為在real1 和real2 上面的測試頁不同,所以登錄幾次之後,顯示出的頁面也會有所不同,這樣說明real server 已經在正常工作了。




  • 贊助網站       

    廣利不動產-新板特區指名度最高、值得您信賴的好房仲
    您的托付,廣利用心為您服務
    廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲
    完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心!

  • 1 樓住戶:小優
    發表時間:2007-02-26

    低成本「網站負載平衡」技術備忘
    幾天前在 Linux Today 看到了這篇文章: Linux.com - How to configure a low-cost load-balanced LAMP cluster (LAMP, Linux & Apache & MySQL & PHP / Perl / Python)

    以下是基於該篇文章進行實作後的心得與備忘:

    Round Robin DNS 實作與測試
    利用 rsync 同步資料的方法
    Web Site 資料同步注意事項
    同一線路多個 IP 的建置方案
    兩條線路的建置方案
    環境: Fedora Linux with bind 9.2.x & rsync 2.5.x

    Round Robin DNS

    瞭解 Round Robin DNS

    Round Robin: 巡迴排班之意
    Round Robin DNS: 提供單一 Domain Name 多筆不同 IP 的查詢回應, 可說是簡易的 DNS Load-Balance
    Server 端的觀點: 在 zone file 中, 同一個主機名稱設定多個不同 IP
    Client 端的觀點: 查詢同一個網址, 每次所得到的 IP 都不一樣

    Zone File 設定範例

    $TTL 86400
    @ IN SOA dns.your.domain. root.your.domain. (
    2006042801
    3H
    15M
    1W
    1H)
    IN NS dns.your.domain.
    dns IN A 123.123.123.123
    www 0 IN A 123.123.123.123
    www 0 IN A 123.123.123.124
    www 0 IN A 123.123.123.125

    其中, www 的 A-Records 即為 Round Robin 設置, 0 為 TTL (Time to live), 單位為秒. 若 DNS Server 因此 Loading 過重, 可酌量提高 TTL 數值.

    Ping 測試

    ping www.domain.name → Ctrl + C 中斷 → ping www.domain.name 查看回應的 IP 是否不同

    Windows: 若 TTL 為 30 的情況下, 每次 ping 完經過 30 秒鐘才能 ping 出不同結果. 若要在 TTL 時間內 ping 出不同結果, 可執行: ipconfig /flushdns 強制清除 dns cache
    Linux: 不管 TTL 的值為何, 每次 ping 都會回應不同 ip

    網頁瀏覽測試

    直接連線: 一次只會連結某一站台
    透過 Squid Proxy: Proxy Server 會同時取用多個站台的資料
    參考資料

    微軟技術社群: 微軟專家線上對談 Q&A
    zytrax.com: HOWTO - Configure Load Balancing
    鳥哥的 Linux 私房菜: 簡易 DNS 伺服器設定

    利用 rsync 同步資料

    rsync server (receiver)

    vi /etc/xinetd.d/rsync

    disable = no

    vi /etc/rsyncd.conf

    [label]
    path = /path/to/save/data
    auth users = sender_name *註
    uid = root
    gid = root
    secrets file = /etc/rsyncd.secrets *註
    read only = no

    *註: 若要以 ssh 登入認證則免寫該行, 或不產生此檔亦可 (詳後述)

    vi /etc/rsyncd.secrets

    sender_name:password

    chmod 600 /etc/rsyncd.conf /etc/rsyncd.secrets

    chkconfig xinetd on

    service xinetd start

    netstat -ntulp | grep xinetd

    tcp 0.0.0.0:873

    rsync client (sender)

    建立對應 rsync server: rsyncd.secrets 的密碼檔

    vi /root/rsyncd.secrets

    password

    chmod 600 /root/rsyncd.secrets

    以密碼檔登入 rsync server, 對應 rsync server: rsyncd.conf 設定檔的方法:
    rsync -a --delete --password-file=/root/rsyncd.secrets /path/to/send [email protected]::label

    以 ssh 登入 rsync server, 對應 rsync server: rsyncd.conf 設定檔的方法:
    rsync -a --delete -e 'ssh -l root' /path/to/send rsync.server.ip::label

    以 ssh 登入 rsync server, 指向任意路徑的方法:
    rsync -a --delete -e 'ssh -l root' /path/to/send rsync.server.ip:/path/to/save/data

    以 ssh 認證金鑰進行連線 (登入時免輸入密碼)

    ssh-keygen -t rsa
    cd /root/.ssh
    mv id_rsa.pub authorized_keys
    scp authorized_keys id_rsa [email protected]:/root/.ssh

    產生金鑰之後, 將公鑰: authorized_keys 與私鑰: id_rsa 置於每台 Linux 電腦登入身份家目錄的 .ssh 路徑中, 就能互相以該身份登入對方的電腦, 而不需輸入密碼.

    參考資料

    使用 rsync (全自動網路備份法) by OLS3
    rsync 資料同步 by 藍色泡泡
    RSYNC INTRODUCTION (HTML Edition) by 帕胡德
    rsync 官方網頁

    Web Site 資料同步注意事項

    MySQL Replication 請參考本站: Replication in MySQL
    主 Web Server 資料更新後, 應立即執行 rsync 同步鏡射站台 (mirror site) 的資料
    以文字檔為儲存媒介的計數器、留言版應透過 NFS 共同寫入同一個檔案, 或併入 MySQL Database 中
    網路相簿所引用的多媒體檔案 (圖檔、影像檔) 可透過 NFS 共同存取, 或於資料更新後執行 rsync 同步資料
    HTTP Log 應透過 NFS 寫入同一個路徑, 才能讓 Log 統計分析程式 (如: AWStats) 計算確實的流量
    PHP Session 檔案應透過 NFS 寫入同一個路徑, 避免 User 切換頁面時, 因連入另一個 Server 而發生錯誤

    同一線路多個 IP 的建置方案

    目的: Server Loading 的 Load-Balancing

    以一台 Linux NAT 配置 Multi-DMZ, 將 public ip #2 & #3 分別指向 Web Server #1 & #2
    iptables -t nat -A PREROUTING -d public.ip.#2 -j DNAT --to-destination web.server.#1.lan_ip
    iptables -t nat -A PREROUTING -d public.ip.#3 -j DNAT --to-destination web.server.#2.lan_ip





     共 1 人回應  選擇頁數 【第1 頁】 

    姓名:
    佈告內容:
    其他選項: