LVS系列1、LVS集羣-NAT模式

1、 集羣概述

一、 什麼是集羣?

        一組各自相互獨立且又相互依賴的,經過高速網絡互聯的計算機組成的一個計算機組, 以單一的系統模式加以管理, 爲用戶提供服務, 對用戶來講, 用戶只會認爲對方是一個服務.  這個裏面, 一組計算機的一臺計算機就是集羣的一個節點html

二、  集羣的特性:

        可伸縮性, 可靠性,  可管理性前端

三、  應用場景:

例:一臺服務器    若是可以響應10000個併發  linux

        若是如今有20000個併發    一臺服務器就沒法響應web

         說明,web服務已經達到瓶頸算法

解決這個問題的辦法:vim

       加配置:   加CPU, 加內存, 加帶寬, 加SSD 這種解決方法稱爲「向上擴展」, 可以解決一時, 卻不能持久一世[單臺服務器上作動做]後端

       加服務器:  一臺==>兩臺, 兩臺==>四臺  四臺==>8臺  使用多臺服務器同時爲用戶提供服務  ,而這一種解決方法則稱爲「橫向擴展」或「向外擴展」瀏覽器

       向外擴展:  就是集羣服務器

四、  集羣的種類:

      集羣系統主要分爲網絡

             負載均衡(Load Balance)集羣,簡稱  LB

             高可用(High Availability)集羣,簡稱  HA 集羣

             高性能計算(High Perfermance Computing)集羣,簡稱  HPC 集羣

五、  LB實現手段

硬件的實現:  – F5 負載均衡器

軟件的實現:  – LVS(4層,傳輸層)  – Nginx(7層,應用層)

2、  LVS集羣

一、LVS(Linux Virtual Server)

        LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一,是根據iptables的實現來開發的,因此使用時候會和iptables至關相似

官網:http://www.linuxvirtualserver.org/

中文站點: http://zh.linuxvirtualserver.org/

 二、 LVS 集羣工做結構圖:

 

       負載調度器 (分發器Load Balancer, Director): 整個集羣對外的最前端機, 負責接收用戶請求, 而且根據本身的調度算法, 將請求轉發到後端真實服務器上的動做,而客戶認爲服務是來自一個IP地址(咱們可稱之爲VIP虛擬IP地址)上的。

       服務器池(Server Pool):  真正爲用戶提供服務的服務器, 每一臺服務器就是一臺RS[RealServer],執行的服務有WEB、MAIL、FTP和DNS等。

       共享存儲(Shared Storaged): 爲RS保持相同內容, 提供數據的一致性,也就是說,它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。

3、  LVS模式及工做原理

1 、 LVS(4層)  模式:

 LVS/NAT

 LVS/DR

 LVS/TUN

二、  LVS負載均衡的三種包轉發方式

         LVS提供了三種包轉發方式:NAT(網絡地址映射)IP Tunneling(IP隧道)Direct Routing(直接路由)。不一樣的轉發模式決定了不一樣的cluster的網絡結構

三、  NAT(網絡地址映射)

           NAT: 網絡地址轉換

           DNAT: 目標地址轉換  改變的是目標地址

           SNAT: 原地址轉換  改變的是原地址

           LVS-NAT: 就是使用的SNAT和DNAT完成報的轉發

        NAT方式可支持任何的操做系統,以及私有網絡,而且只需一個Internet IP地址,可是整個系統的性能受到限制。由於執行NAT每次須要重寫包,有必定的延遲;另外,大部分應用有80%的數據是從服務器流向客戶機,也就是用戶的請求很是短,而服務器的迴應很是大,對負載均衡器造成很大壓力,成爲了新的瓶頸。

四、  IP Tunneling(IP隧道)

       Director(分發器)分配請求到不一樣的real server。real server處理請求後直接回應給用戶,這樣director負載均衡器僅處理客戶機與服務器的一半鏈接。IP Tunneling技術極大地提升了director的調度處理能力,同時也極大地提升了系統能容納的最大節點數,能夠超過100個節點。real server能夠在任何LAN或WAN上運行,這意味着容許地理上的分佈,這在災難恢復中有重要意義。服務器必須擁有正式的IP地址用於與客戶機直接通訊,而且全部服務器必須支持IP隧道協議。

5 、 Direct Routing(直接路由)

       與IP Tunneling相似,負載均衡器僅處理一半的鏈接,避免了新的性能瓶頸,一樣增長了系統的可伸縮性。Direct Routing與IP Tunneling相比,沒有IP封裝的開銷,但因爲採用物理層(修改MAC地址)技術,全部服務器都必須在一個物理網段。

6 、 LVS-NAT 模式工做原理:

       客戶端訪問調度器時,調度器經過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器;真實服務器的響應報文經過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。

如圖:

步驟1:客戶端訪問VIP1的網站

 

圖上各IP註解:

CIP  客戶端的IP

       VIP  是域名解析的IP, 是集羣對外的公網IP

       DIP  用來和後端服務器進行數據交互的IP, 請求報文轉發給後端服務器今後口出去

       RIP  真實服務器的IP

步驟2:客戶端訪問調度器時,調度器經過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器;

 

步驟3:真實服務器的響應報文經過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。

 

步驟總結及過程地址變化:

             1: 客戶端請求訪問www.example.com[www.example.com  ===>  VIP]

                     源地址: CIP   目標地址: VIP                    

              2: 請求報文到達負載均衡器

                     源地址: CIP   目標地址: RIP                    

              3: RealServer收到報文處理, 響應

                     源地址: RIP   目標地址: CIP                    

              4: 負載調度器收到報文, 根據自身以前的轉發修改記錄, 還原報文

                     源地址: VIP    目標地址: CIP

 

4、  實戰:配置LVS-NAT

1 、 實例1:  LVS NAT模式

實驗前期準備:

一、準備3臺主機

二、iptables -F , 清除規則

三、/etc/selinux/config,關SELinux

     #getenforce   Disabled

二、  真實環境中的拓撲圖

三、  集羣各節點IP註解:

客戶端計算機的IP(CIP):多是一個本地的、與VIP在同一網絡的私有ip地址,或者是一個因特網上的公共ip地址。用做向集羣發送請求的源ip地址

虛擬IP(VIP):Director用於向客戶端提供服務的ip地址

Director的IP(DIP):在Director的VIP上接收訪問集羣服務的請求,這些請求經過DIP轉發出去抵達各個集羣節點

真實real server IP(RIP):在LVS術語中,向外部世界提供服務的節點叫作真實服務器,所以在真實服務器上使用的ip地址叫作真實ip地址(RIP)。

 

精簡版,實驗拓撲圖:

 

說明:客戶端只要求可以訪問到VIP便可。

四、配置LVS:

xuegod63配置成分發器:

一、打開路由轉發功能

[root@xuegod63 ~]# vim /etc/sysctl.conf  

改:net.ipv4.ip_forward = 0

爲:net.ipv4.ip_forward = 1

讓配置生效:

[root@xuegod63 ~]# sysctl -p

 

二、配置網絡環境:

添加一個網卡(須要兩張網卡), 配置成如下網絡環境:

eth0  192.168.1.63  模式:br0    模擬公網

eth1  192.168.2.63  模式:vmnet4    模擬內網

Director分發器:需不須要開啓80(服務的)端口  ?

五、 安裝: LVS管理工具: ipvsadmin

 [root@xuegod63 Packages]# pwd

  /mnt/Packages

[root@xuegod63 Packages]# rpm -ivh ipvsadm-1.25-9.el6.x86_64.rpm

 或:yum install ipvsadm 

6 、 使用ipvsadm命令設置規則:

[root@xuegod63 ~]# ipvsadm -A -t 192.168.1.63:80 -s rr       rr表明輪循 

選項:

-A  添加虛擬服務器

-t   表示TCP的服務  VIP:PORT

-s  指定調度算法  rr表示round-robin 輪循

 

[root@xuegod63 ~]#  ipvsadm -a -t 192.168.1.63:80 -r 192.168.2.64 -m

[root@xuegod63 ~]#  ipvsadm -a -t 192.168.1.63:80 -r 192.168.2.62 -m

選項:

 -a   表示添加real server的地址

 -r    指定real server的IP地址

 -m  表示masquerade 也就是NAT方式的LVS

 

7 、查看:

Ipvsadm命令,用於配置及查看內核IPVS表和算法的工具,相似於iptables

[root@xuegod63 ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.1.63:80 rr

  -> 192.168.2.62:80              Masq    1      0          0        

  -> 192.168.2.64:80              Masq    1      0          0       

 

8 、 保存配置或規則

[root@xuegod63 ~]# ipvsadm --save > /etc/sysconfig/ipvsadm

或ipvsadm -S    保存以上的配置

Saving IPVS table to /etc/sysconfig/ipvsadm:           [肯定]

 

9 、 配置真實服務器

RealServer:在xuegod62和xuegod64上面配置:

準備:

一、配置IP:REAL SERVER本身的網絡相關信息配置成以下:

xuegod62: eth0: vmnet4 : 192.168.2.62  網關: 192.168.2.63

xuegod64: eth0: vmnet4 : 192.168.2.64  網關: 192.168.2.63

 

二、配置xuegod64爲realserver, 並啓web服務

[root@xuegod64 ~]# yum install -y httpd

[root@xuegod64 ~]# systemctl restart httpd

[root@xuegod64 ~]# echo "192.168.2.64" > /var/www/html/index.html    #(實驗期間,各個服務器的頁面不一樣)

 

三、配置xuegod62爲realserver, 並啓web服務

[root@xuegod62 ~]# yum install -y httpd

[root@xuegod62 ~]# systemctl restart httpd

[root@xuegod62 ~]# echo "192.168.2.62" > /var/www/html/index.html    #(實驗期間,各個服務器的頁面不一樣)

 

10 、 測試:

在xuegod63上測試:

[root@xuegod63 ~]# yum install elinks  

 

測試realserver :

[root@xuegod63 ~]# elinks 192.168.2.64

[root@xuegod63 ~]# elinks 192.168.2.64 --dump

   192.168.2.64

[root@xuegod63 ~]# elinks 192.168.2.62 --dump

   192.168.2.62

 

11 、 測試VIP:

[root@xuegod63 ~]# elinks 192.168.1.63 --dump

   192.168.2.62

訪問: 在物理上打開瀏覽器訪問: 每按F5刷新一次,就會變換一個頁面。

 

分發器須要監聽80 嗎?不須要

 

12  擴展ipvsadm 更多參數說明

 -L -n  ==>  查看規則,顯示內核虛擬服務器表

 -L -n -c ==> 查看客戶端鏈接分發器和real server 的狀況

 

例1:

[root@xuegod63 ~]# ipvsadm -L -n -c

IPVS connection entries

pro expire state       source             virtual            destination

TCP 01:33  TIME_WAIT   192.168.1.100:49698 192.168.1.70:80    192.168.2.62:80

TCP 01:26  TIME_WAIT   192.168.1.100:49690 192.168.1.70:80    192.168.2.64:80

TCP 01:57  TIME_WAIT   192.168.1.100:49739 192.168.1.70:80    192.168.2.62:80

選項:

-L -n --stats  ==>  查看分發狀況

-L -n --rate  ==> 查看速率

-Z --zero 虛擬服務表計數器清零(清空當前的鏈接數量等)

例2:

[root@xuegod63 ~]# ipvsadm -Z

[root@xuegod63 ~]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=4096)

選項:   -Z --clear 清空IPVS的數據、等信息

 

例3:

[root@xuegod63 ~]# ipvsadm -C

 選項:   -C    清空全部規則

 LVS的規則配置文件:/etc/sysconfig/ipvsadm

 

 

 

 

附錄:ipvsadm命令選項解釋:  

-A --add-service      在內核的虛擬服務器表中添加一條新的虛擬服務器記錄。也就是增長一臺新的虛擬服務器。  

-E --edit-service      編輯內核虛擬服務器表中的一條虛擬服務器記錄。  

-D --delete-service  刪除內核虛擬服務器表中的一條虛擬服務器記錄。  

-C --clear                 清除內核虛擬服務器表中的全部記錄。  

-R --restore             恢復虛擬服務器規則  

-S --save                 保存虛擬服務器規則,輸出爲-R 選項可讀的格式  

-a --add-server        在內核虛擬服務器表的一條記錄裏添加一條新的真實服務器記錄。也就是在一個虛擬服務器中增長一臺新的真實服務器  

-e --edit-server        編輯一條虛擬服務器記錄中的某條真實服務器記錄  

-d --delete-server    刪除一條虛擬服務器記錄中的某條真實服務器記錄  

-L|-l --list                  顯示內核虛擬服務器表  

-Z --zero                  虛擬服務表計數器清零(清空當前的鏈接數量等)  

--set tcp tcpfin udp  設置鏈接超時值  

--start-daemon        啓動同步守護進程。他後面能夠是master 或backup,用來講明LVS Router 是master 或是backup。在這個功能上也能夠採用keepalived的VRRP 功能。  

--stop-daemon        中止同步守護進程  

-h --help                  顯示幫助信息  

其餘的選項:  

-t --tcp-service service-address        說明虛擬服務器提供的是tcp 的服務[vip:port] or [real-server-ip:port]  

-u --udp-service service-address      說明虛擬服務器提供的是udp 的服務[vip:port] or [real-server-ip:port]  

-f --fwmark-service fwmark               說明是通過iptables 標記過的服務類型。  

-s --scheduler scheduler                   使用的調度算法,有這樣幾個選項rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默認的調度算法是: wlc.  

-p --persistent [timeout]                    持久穩固的服務。這個選項的意思是來自同一個客戶的屢次請求,將被同一臺真實的服務器處理。timeout 的默認值爲300 秒。  

-M --netmask                                    netmask persistent granularity mask  

-r --real-server server-address         真實的服務器[Real-Server:port]  

-g --gatewaying                                指定LVS 的工做模式爲直接路由模式(也是LVS 默認的模式)  

-i --ipip                                              指定LVS 的工做模式爲隧道模式  

-m --masquerading                           指定LVS 的工做模式爲NAT 模式  

-w --weight weight                            真實服務器的權值  

--mcast-interface interface               指定組播的同步接口  

-c --connection                                 顯示LVS 目前的鏈接 如:ipvsadm -L -c  

--timeout                                           顯示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout  

--daemon                                          顯示同步守護進程狀態  

--stats                                               顯示統計信息  

--rate                                                顯示速率信息  

--sort                                                 對虛擬服務器和真實服務器排序輸出  

--numeric -n                                      輸出IP 地址和端口的數字形式

 

超時時間用ipvsadm --set tcp tcpfin udp設置,好比

#ipvsadm --set 120 20 100

表示tcp空閒等待時間爲120 秒

客戶端關閉連接等待時間爲20秒

udp空閒等待爲100秒

相關文章
相關標籤/搜索