LVS (Linux Virtual Server)
什么是LVS铣耘?它是一種集群(Cluster)技術,采用IP負載均衡技術和基于內容請求分發(fā)技術躏啰。調度器具有很好的吞吐率雹拄,將請求均衡地轉移到不同的服務器上執(zhí)行,且調度器自動屏蔽掉服務器的故障荧飞,從而將一組服務器構成一個高性能的凡人、高可用的虛擬服務器名党。整個服務器集群的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序挠轴。(另外传睹,LVS 項目是章文嵩博士的成名作[1])
LVS 主要組成部分
- 負載調度器(load balancer / Director),它是整個集群對外面的前端機岸晦,負責將客戶的請求發(fā)送到一組服務器上執(zhí)行欧啤,而客戶認為服務是來自一個IP地址(我們可稱之為虛擬IP地址)上的。
- 服務器池(server pool / Realserver)启上,是一組真正執(zhí)行客戶請求的服務器邢隧,執(zhí)行的服務一般有 WEB, MAIL, FTP 和 DNS 等。
- 共享存儲(shared storage)冈在,它為服務器池提供一個共享的存儲區(qū)倒慧,這樣很容易使得服務器池擁有相同的內容,提供相同的服務讥邻。
LVS 負載均衡方式[2]
LVS 有三種負載均衡方式:
- Virtual Server via Network Address Translation NAT (VS/NAT)
- Virtual Server via IP Tunneling (VS/TUN)
- Virtual Server via Direct Routing (VS/DR)
VS/DR 方式是目前大型網站使用最廣泛的一種負載均衡手段迫靖。對這三種方式,我談下自己的理解:
1 中的 LB 工作在 http 層兴使,可看做一個 http 服務器系宜,它接收到客戶端請求后向 real server 發(fā)出請求,接收到返回后再返回給客戶端发魄。為什么 real server 不能直接返回給客戶端呢盹牧?因為根據 TCP/IP 協(xié)議,real server 返回的包的目標 IP 地址是請求包的源 IP励幼,即 LB 的 IP汰寓。
2 中的 LB 用到了 IP 封裝協(xié)議,大概可以這樣理解(是我揣測的苹粟,沒有求證)有滑。LB 向 real server 發(fā)送請求時,源 IP 還是 LB 的 IP嵌削,但是包體里面包含了客戶端的 IP毛好,根據協(xié)議 real server 返回的時候會把包的目標 IP 設為包體里的客戶端 IP。如果真是這樣的話苛秕,協(xié)議數據走在應用層肌访,但是又對傳輸層的數據做了修改,比較 hack艇劫,沒有遵守分層的設計規(guī)范吼驶。
3 中的 LB 工作在數據鏈路層,LB 直接把 frame 的 mac 地址修改為 某臺 real server 的 mac 地址,轉發(fā)給 real server蟹演。real server 拿到包里的源 IP 是客戶端的 IP风钻,返回包的目標 IP 自然為客戶端的 IP。
基于它們工作的網絡協(xié)議轨帜,有下面的特點魄咕。(注:子網的出口的路由器叫做網關)
指標 | VS/NAT | VS/TUN | VS/DR |
---|---|---|---|
服務器操作系統(tǒng) | 任意 | 支持隧道 | 多數(支持Non-arp) |
服務器網絡 | 私有網絡 | 局域網/廣域網 | 局域網 |
服務器數目(100M網絡) | 10~20 | 100 | 大于100 |
服務器網關 | 負載均衡器 | 自己的路由 | 自己的路由 |
效率 | 一般 | 高 | 最高 |
其他負載均衡方法
HTTP 重定向負載均衡
當用戶發(fā)來請求的時候,Web 服務器通過修改 HTTP 響應頭中的 Location 標記來返回一個新的 url蚌父,然后瀏覽器再繼續(xù)請求這個新 url哮兰,實際上就是頁面重定向。通過重定向苟弛,來達到“負載均衡”的目標喝滞。例如,我們在下載 PHP 源碼包的時候膏秫,點擊下載鏈接時右遭,為了解決不同國家和地域下載速度的問題,它會返回一個離我們近的下載地址缤削。重定向的 HTTP 返回碼是 302窘哈。
優(yōu)點:比較簡單。
缺點:瀏覽器需要兩次請求服務器才能完成一次訪問亭敢,性能較差滚婉。重定向服務自身的處理能力有可能成為瓶頸,整個集群的伸縮性國模有限帅刀;使用 HTTP 302 響應碼重定向让腹,有可能使搜索引擎判斷為 SEO 作弊,降低搜索排名扣溺。
DNS 域名解析負載均衡
DNS(Domain Name System)負責域名解析的服務骇窍,域名url實際上是服務器的別名,實際映射是一個IP地址锥余,解析過程腹纳,就是DNS完成域名到IP的映射。而一個域名是可以配置成對應多個 IP的驱犹。因此嘲恍,DNS也就可以作為負載均衡服務。
事實上着绷,大型網站總是部分使用DNS域名解析蛔钙,利用域名解析作為第一級負載均衡手段锌云,即域名解析得到的一組服務器并不是實際提供Web服務的物理服務器荠医,而是同樣提供負載均衡服務的內部服務器,這組內部負載均衡服務器再進行負載均衡,將請求分發(fā)到真是的 Web 服務器上彬向。
優(yōu)點:將負載均衡的工作轉交給 DNS兼贡,省掉了網站管理維護負載均衡服務器的麻煩,同時許多 DNS 還支持基于地理位置的域名解析娃胆,即會將域名解析成舉例用戶地理最近的一個服務器地址遍希,這樣可以加快用戶訪問速度,改善性能里烦。
缺點:不能自由定義規(guī)則凿蒜,而且變更被映射的IP或者機器故障時很麻煩,還存在 DNS 生效延遲的問題胁黑。而且DNS負載均衡的控制權在域名服務商那里废封,網站無法對其做更多改善和更強大的管理。
反向代理負載均衡
反向代理服務可以緩存資源以改善網站性能丧蘸。實際上漂洋,在部署位置上,反向代理服務器處于Web服務器前面(這樣才可能緩存 Web 相應力喷,加速訪問)刽漂,這個位置也正好是負載均衡服務器的位置,所以大多數反向代理服務器同時提供負載均衡的功能,管理一組 Web 服務器很魂,將請求根據負載均衡算法轉發(fā)到不同的 Web 服務器上鸳慈。Web服務器處理完成的響應也需要通過反向代理服務器返回給用戶。由于 Web 服務器不直接對外提供訪問颈畸,因此 Web 服務器不需要使用外部ip地址,而反向代理服務器則需要配置雙網卡和內部外部兩套 IP 地址没讲。
優(yōu)點:和反向代理服務器功能集成在一起眯娱,部署簡單。
缺點:反向代理服務器是所有請求和響應的中轉站爬凑,其性能可能會成為瓶頸徙缴。
反向代理負載均衡跟 VS/NAT 的原理一樣。
參考資料