Linux學習總結(五十四)LVS nat 模式搭建

本篇主要參考文章爲 http://www.javashuo.com/article/p-ykiqmsbq-ck.html
還有微信公衆號 碼農翻身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)
    Linux學習總結(五十四)LVS nat 模式搭建
    對照上圖,咱們簡單說下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 模式以前,先來熟悉下幾個經常使用名稱
    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資源。
    總體架構圖以下
    Linux學習總結(五十四)LVS nat 模式搭建
    具體實現過程爲:linux

    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信息。

    四 lvs nat 模式搭建

    接下來咱們結合具體實例 理解整個過程
    結構框圖以下
    Linux學習總結(五十四)LVS nat 模式搭建nginx

LB有兩個IP,一個對外(192.168.199.200),一個對內(192.168.226.129)。用戶看到的是那個對外的IP。後面真正提供服務的服務器爲RS1,RS2,RS3,他們的網關都指向LB。咱們作實驗只用了兩臺RS。也就是說這裏只用到一個公網ip
192.168.199.200
數據包傳遞過程以下:
1)客戶發出請求到LB服務器
Linux學習總結(五十四)LVS nat 模式搭建
2) LB 收到用戶請求,要把請求轉發到RS1服務器,就修改目的地址爲RS1的ip,端口爲R1的端口
Linux學習總結(五十四)LVS nat 模式搭建
3)RS1 處理完請求,把http報文層層封裝,返回響應報文給客戶端
Linux學習總結(五十四)LVS nat 模式搭建
4) 因爲LB是網關,它在半路收到該數據包,作第二次修改,將源地址和源端口替換爲本身的,發給客戶端。
Linux學習總結(五十四)LVS nat 模式搭建
整個數據的流向爲
客戶端---> 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
三臺機器上都執行執行 web

systemctl stop firewalld; systemc disable firewalld
 systemctl start  iptables-services; iptables -F; service iptables save

在dir上安裝ipvsadm
yum install -y ipvsdam
在dir上編寫腳本,vim /usr/local/sbin/lvs_nat.sh//內容以下算法

#! /bin/bash
#director 服務器上開啓路由轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward
#關閉icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
#注意區分網卡名字,網卡分別爲ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
#director 設置nat防火牆
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.226.0/24  -j MASQUERADE
#director設置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.199.200:80 -s wrr
$IPVSADM -a -t 192.168.199.200:80 -r 192.168.226.130:80 -m -w 1
$IPVSADM -a -t 192.168.199.200:80 -r 192.168.226.131:80 -m -w 1

運行腳本後測試:
編輯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
Linux學習總結(五十四)LVS nat 模式搭建
再次刷新結果爲
Linux學習總結(五十四)LVS nat 模式搭建apache

相關文章
相關標籤/搜索