Linux学习总结(五十四)LVS nat 模式搭建
本篇主要參考文章為 https://www.cnblogs.com/kevingrace/p/5574486.html
還有微信公眾號 碼農翻身
一 負載均衡介紹
- 主流開源軟件LVS、keepalived、haproxy、nginx等
- 其中LVS屬于4層(網絡OSI 7層模型),nginx屬于7層,haproxy既可以認為是4層,也可以當做7層使用
- keepalived的負載均衡功能其實就是lvs
- lvs這種4層的負載均衡是可以分發除80外的其他端口通信的,比如MySQL的,而nginx僅僅支持http,https,mail,haproxy也支持MySQL這種
- 相比較來說,LVS這種4層的更穩定,能承受更多的請求,而nginx這種7層的更加靈活,能實現更多的個性化需求
二 LVS 介紹
- LVS是由國人章文嵩開發的,linux virtual server的縮寫,是一個虛擬的服務器集群系統,可以在unix/linux平臺下實現負載均衡集群功能。流行度不亞于apache的httpd,基于TCP/IP做的路由和轉發,穩定性和效率很高。
- LVS最新版本基于Linux內核2.6,有好多年不更新了
- LVS有三種常見的模式:NAT、DR、IP Tunnel
- LVS架構中有一個核心角色叫做分發器(Load balance),它用來分發用戶的請求,還有諸多處理用戶請求的服務器(Real Server,簡稱rs)
對照上圖,我們簡單說下lvs 的基本原理
客戶端通過網絡向負載均衡服務器發送訪問請求。負載均衡器接受客戶的請求,然后先是根據LVS的調度算法(8種)來決定要將這個請求發送給哪個節點服務器。然后依據自己的工作模式來看應該如何把這些客戶的請求發送給節點服務器,節點服務器又應該如何來把響應數據包發回給客戶端。
我們再介紹下8種調度算法 輪詢 Round-Robin rr 加權輪詢 Weight Round-Robin wrr 最小連接 Least-Connection lc 加權最小連接 Weight Least-Connection wlc 基于局部性的最小連接 Locality-Based Least Connections lblc 帶復制的基于局部性最小連接 Locality-Based Least Connections with Replication lblcr 目標地址散列調度 Destination Hashing dh 源地址散列調度 Source Hashing sh三 lvs nat 原理
在介紹lvs nat 模式之前,先來熟悉下幾個常用名稱
1)客戶端請求數據,目標IP為VIP 2)請求數據到達LB服務器,LB根據調度算法將目的地址修改為RIP地址及對應端口(此RIP地址是根據調度算法得出的。)并在連接HASH表中記錄下這個連接。 3)數據包從LB服務器到達RS服務器webserver,然后webserver進行響應。Webserver的網關必須是LB,然后將數據返回給LB服務器。 4)收到RS的返回后的數據,根據連接HASH表修改源地址VIP&目標地址CIP,及對應端口80.然后數據就從LB出發到達客戶端。 5)客戶端收到的就只能看到VIP\DIP信息。
DS : directory server 調度器,分發器, LB load banlancer 負載均衡器就屬于一種調度器
RS : real server 后端提供訪問內容的真實服務器,也叫節點服務器
VIP: 虛擬ip,向外部直接面向用戶請求,作為用戶請求的目標地址
DIP: dicrectory server ip 調度器上用于和內部主機通信的ip
RIP: real server ip 節點服務器ip
CIP: client ip 客戶端的ip地址
這種模式借助iptables的nat表來實現。用戶的請求到分發器后,通過預設的iptables規則,把請求的數據包轉發到后端的rs上去。rs需要設定網關為分發器的內網ip。用戶請求的數據包和返回給用戶的數據包全部經過分發器,所以分發器會成為瓶頸。 在nat模式中,只需要分發器有公網ip即可,所以比較節省公網ip資源。
整體架構圖如下
具體實現過程為:四 lvs nat 模式搭建
接下來我們結合具體實例 理解整個過程
結構框圖如下
LB有兩個IP,一個對外(192.168.199.200),一個對內(192.168.226.129)。用戶看到的是那個對外的IP。后面真正提供服務的服務器為RS1,RS2,RS3,他們的網關都指向LB。我們做實驗只用了兩臺RS。也就是說這里只用到一個公網ip
192.168.199.200
數據包傳遞過程如下:
1)客戶發出請求到LB服務器
2) LB 收到用戶請求,要把請求轉發到RS1服務器,就修改目的地址為RS1的ip,端口為R1的端口
3)RS1 處理完請求,把http報文層層封裝,返回響應報文給客戶端
4) 由于LB是網關,它在半路收到該數據包,做第二次修改,將源地址和源端口替換為自己的,發給客戶端。
整個數據的流向為
客戶端---> LB ---> RS --->LB ---> 客戶端
三臺機器具體實驗
分發器,也叫調度器(簡寫為dir)
內網:ens33 192.168.226.129,外網ens37:192.168.199.200(vmware僅主機模式)
rs1
內網:ens33 192.168.226.130,設置網關為192.168.226.129
rs2
內網:ens33 192.168.226.131,設置網關為192.168.226.129
三臺機器上都執行執行
在dir上安裝ipvsadm
yum install -y ipvsdam
在dir上編寫腳本,vim /usr/local/sbin/lvs_nat.sh//內容如下
運行腳本后測試:
編輯rs1 nginx 默認頁 內容為hello, i am from 192.168.226.130
rs2 nginx 默認頁內容為hello world ,I'am from 192.168.226.131
用瀏覽器訪問 192.168.199.200
再次刷新結果為
轉載于:https://blog.51cto.com/12606610/2119761
總結
以上是生活随笔為你收集整理的Linux学习总结(五十四)LVS nat 模式搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (转)Linux I/O 调度方法
- 下一篇: 大话后端开发的奇淫技巧大集合