負載均衡原理與實踐詳解 第三篇 服務器負載均衡的基本概念-網絡基礎
系列文章:
負載均衡詳解第三篇:服務器負載均衡的基本概念-使用負載均衡器的服務器群
負載均衡詳解第四篇:服務器負載均衡的基本概念-負載均衡時數據包流程
負載均衡詳解第六篇:服務器負載均衡的基本概念-網絡地址轉換(NAT)
負載均衡詳解第七篇:服務器負載均衡的基本概念-服務器直接返回
服務器負載均衡在服務器世界中並不是一個新的概念。我們已經發明了許多集群技術來實現聯合計算,但是只在少數專有系統上得到應用。雖然如此,負載均衡已經成為許多領域的主流應用強有力的解決方案,包括服務器群的擴展能力,高可用性能力,安全性和可管理性。
首先,負載均衡通過在多台服務器之間分發負載的方式顯著地提高了應用和服務器群的可擴展能力。
其次,負載均衡提高了應用系統的可用性因為它能夠在一台服務器或者應用出現故障的時候把流量導向備用的服務器。
第三,負載均衡可以通過多種方式提高可管理性。它可以讓網絡或系統管理員將應用輕松地從一台服務器遷移到另外一台服務器或增加更多的服務器來運行應用程序。最后,也是相當重要的,負載均衡通過保護服務器群免受多種類型的DOS攻擊從而提高了應用和服務器系統的安全性。
互聯網絡的到來帶來了很多新的應用和服務:Web,DNS,FTP,SMTP等等。幸運的是,區分並處理互聯網絡的流量是非常容易的。因為互聯網絡有大量的客戶端請求特定的服務,而且每個客戶端可以通過IP地址來識別,這樣一來,就使分發負載到多台運行同樣軟件、提供同樣服務的服務器的工作具備了可行性。
本篇介紹服務器負載均衡的基本概念,並涵蓋了便於讀者理解負載均衡工作原理的基礎知識。很多不同的應用系統都可以做負載均衡,通常采用負載均衡產品來管理Web服務器群。因此,我們就以Web服務器為例來討論和理解負載均衡,所有這些概念也適用於其他的應用。
網絡基礎
首先,我們來討論一下二三層交換、TCP和Web服務器等負載均衡的基礎知識。然后在介紹負載均衡之前我們先了解一下從Web服務器獲取一個頁面的請求和回應的過程。
1 交換技術入門
現在簡單介紹一下二層和三層交換的工作原理,為理解負載均衡概念提供必要的基礎知識。
MAC (介質訪問控制)地址在以太網中定義了唯一一個網絡硬件的實體,IP (互聯網絡協議)地址定義了互聯網絡中唯一一個主機。交換機接收數據包的端口稱為入口,而交換機發送數據包的端口叫出口。交換機在其入口接收數據包,選擇出口並轉發數據包。不同的交換機的區別在於使用的用於選擇出口的信息不同,並且有的交換機在數據包被發送出去之前會修改一些信息。 二層交換機接收到數據包之后,根據數據包的二層包頭信息決定其目的地址,例如MAC地址,並轉發數據包。相對的,三層交換基於第三層的包頭信息,例如數據包中的IP地址。三層交換機在轉發數據包之前根據數據包的目的IP地址,把目地MAC地址修改為下一跳或者目的IP地址的MAC地址。三層交換機也被稱為路由器,三層交換也通常被稱為路由。負載均衡器檢查數據包第四層的信息甚至五至七層的信息來做交換決策,因此被稱為四到七層交換機。作為負載均衡功能的一部分,負載均衡器也處理二三層交換的工作,所以有時也被稱為二到七層交換機。
為了使網絡更加易於管理,網絡被細分為許多子網。子網通常是指在一棟樓或者一層樓內連接許多計算機或者是數據中心內連接一群服務器的網絡。所有在一個子網內的通訊均可以由二層交換來實現。ARP協議(地址解析解析),在RFC 826中定義,是一個非常重要的二層交換協議。所有的以太網絡設備都是采用ARP協議來學習MAC地址與IP地址的對應關系。網絡設備可以通過ARP協議廣播它的MAC地址和IP地址,讓同一個子網中的其他設備知道它的存在。廣播消息會到達同一個子網內的所有設備,因此也被稱為廣播域。采用ARP協議,所有的設備都能夠了解這一子網中其他設備的存在。至於子網之間的通訊,需要三層交換機或者路由器之類的網關(gateway)設備。任何一台計算機必須連接到一個子網並設置缺省的網關,才能與其他子網的計算機互相通訊。
2 TCP概述
傳輸控制協議(TCP),在RFC 793中定義,是目前兩個主機之間可靠地交換數據最常用的一種協議。TCP協議是一個有狀態協議,也就是說必須經過建立TCP連接,交換數據和終止連接的過程。TCP保證了數據的有序發送,並且通過校驗值保證數據的完整接收,運行在TCP協議之上的高層應用就不需要再考慮數據完整性的問題了。如圖1.1中的OSI模型所示,TCP是四層協議。
TCP的工作方式如下圖所示,建立TCP連接需要三次握手,在這一例子中,客戶端想與服務器交換數據,客戶端發送一個SYN數據包到服務器。SYN包中的重要信息包括源IP地址、源端口、目的IP地址、目的端口。源IP地址是客戶端的IP地址,而源端口是由客戶端隨機生成的。目的IP地址是服務器的IP地址,而目的端口地址是服務器上應用的監聽端口。標准應用如Web服務和文件傳輸協議(FTP)分別采用端口80和21。其他應用可能采用其他的端口,但是客戶端必須知道應用的端口號碼以便訪問這一應用。SYN數據包還包含有一個起始的序列號。客戶端到服務器每一個新的連接的起始序列號是逐次遞增的。當服務器接收到SYN數據包時,它回應一個SYN ACK數據包,數據包中包含服務器自己的起始序列號碼。客戶端於是回應一個ACK數據包表示連接建立,之后客戶端和服務器就可以在這個連接上交換數據了。每個TCP連接都由四個值唯一表示:源IP地址、源端口號碼、目的IP地址和目的端口號碼。每個給定TCP連接的數據包中這四個值是相同的。注意從客戶端到服務器的數據包的源IP地址和客戶端的源端口號碼變成從服務器到客戶端的數據包的目的IP地址和目的端口號碼,源通常指的是發送數據包的主機。一旦客戶端和服務器完成數據交換的工作,客戶端就發送一個FIN數據包,而服務器發送一個FIN ACK數據包,這樣就結束了一個TCP連接。當會話正在進行中的時候,客戶端或者服務器發送一個TCP RESET給對方將中止一個TCP連接。在這種情況下,如果還需要交換數據則必須重新建立連接。
UDP協議是另外一個非常流行的四層協議,經常被流媒體之類的應用所采用。跟TCP不同,UDP是無狀態協議,使用UDP交換數據時不需要建立或者結束一個會話,UDP不象TCP那樣提供可靠的傳輸保證。在UDP上運行的應用必須自己保證數據的可靠傳輸。我們仍然認為兩個主機間使用UDP交換數據是一個會話,但是我們無法確定UDP會話的起始和結束。一個UDP會話同樣可以通過源IP地址,源端口號碼,目的IP地址,目的端口號碼來唯一標記。