3-1 LVS-NAT集羣

---- (整理)By 小甘丶 php

什麼是集羣: html

集羣是一組相互獨立的、經過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。(Cluster就是一組計算機,它們做爲一個總體向用戶提供一組網絡資源。這些單個的計算機系統就是集羣的節點node)。 前端

LVS node

Linux Virtual Server的簡寫,意即Linux虛擬服務器 linux

是一個虛擬的服務器集羣系統,此項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。 web

集羣宗旨: 算法

可伸縮性(Scalability);可靠性(Reliability);可管理性(Manageability) vim

可伸縮性(Scalability):20臺計算機爲咱們提供服務,可縮可減,可增可拓 後端

可靠性(Reliability):萬一部分計算機出現問題,並不影響對用戶提供服務 瀏覽器

可管理性(Manageability):統一管理

集羣分類

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

當一臺服務器沒法知足需求的時候,兩臺或多臺服務器同時爲客戶端提供服務,以分擔需求,提供輪詢工做查詢

高可用集羣:High Availability集羣,簡稱HA

好比一臺服務器出現故障的時候,可是不影響客戶端體驗,另一臺服務器擔當這臺服務器的工做!

高性能集羣:High Perfermance Computing集羣,簡稱HPC

一臺計算機是4路,那麼100臺計算機同時來輔助計算處理,就是400顆CPU!

硬件集羣和軟件集羣

硬件:F5負載均衡器 https://f5.com/

軟件:LVS (工做在OSI第四層,傳輸層) Nginx(工做在OSI第七應用層)

LVS:

英文官方網站:http://www.linuxvirtualserver.org/

中文官方網站:http://zh.linuxvirtualserver.org/

http://www.linux-vs.org/zh/

ipvsadm/ipvs 相似:  iptables/netfilter

LVS集羣的三層結構

1:負載調度器/分發器 (load balancer) director

他是整個集羣對外的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認爲服務是來自一個IP地址上的,咱們稱這個IP爲虛擬IP,Virtual IP=VIP。

2:服務器池 (Server Pool)

也就是下圖中的RealServer Group,是一組真正執行客戶請求的服務器,執行程序能夠是一組WEB,FTP,MAIL和DNS等等。RIP

3:共享存儲(Shared Storage)

它是爲服務器池提供的一個共享存儲區,這樣很容易使得服務器擁有相同的內容,提供相同的服務!

image

LVS包轉發方式

LVS有四種轉發方式:NAT(網絡地址映射)IP TunnelingIP 隧道)、Direct Routing(直路由),Full-NAT(全NAT。不一樣的轉發模式決定了不一樣的Cluster的網絡結構

NAT

NAT方式支持任何操做系統,以及私有網絡,而且只須要一個Internet IP便可!缺點是整個系統的性能受到限制,由於執行NAT的過程每一次都須要重寫包,有必定的延遲。另外,大部分應用有80%的數據是從服務器流向客戶端,也就是用戶的請求很是短,而服務器的迴應很是大,對負載均衡器造成很是大的壓力,成爲新的瓶頸!大體數據上:真實服務器的數目在10臺和20臺之間時,負載調度器將成爲整個集羣系統的瓶頸!

IP Tunneling

Director(分發器)分配請求到不一樣的Real Server,Real Server處理請求後直接回應給客戶端,這樣director負載均衡器處理客戶端與服務器的一半連接。IP Tunneling技術極大的提升了director的調度處理能力 ,同時也極大的提升了系統能容納的最大節點數,能夠超過100個節點,Real Server能夠在任何LAN和WAN上運行,這就意味着容許地理上的分佈(因爲經過IP Tuneling封裝後,封裝後的IP包的目的地址爲Real Server的IP地址,那麼只要Real Server的地址路由可達,Real Server在什麼網絡裏均可以,這樣能夠減小對於公網IP地址的消耗,可是由於處理IP Tunneling封裝和解封裝的開銷,那麼效率就不如DR模式),這在災難恢復中有重要意義。服務器必須擁有正式的IP地址用於與客戶端直接通信(每一個Real Server必須綁定VIP),而且全部服務器必須支持IP隧道協議!

Direct Routing

與IP Tuneling相似,只不過IP Tuneling工做在第三層,而DR工做在第二層,數據鏈路層。負載均衡器(LB)僅處理了一半的連接,避免了新的瓶頸,同時增長了系統的可伸縮性。Direct Routing與IP Tuneling相比沒有IP封裝的開銷,可是因爲採用物理層修改MAC地址技術,因此全部服務器必須在一個物理網段!

LVS-NAT工做原理

原理:就是把客戶端發來的數據包的IP頭的目的地址,在負載均衡器上換成其中一臺RS的IP地址,併發至此RS來處理,RS處理完成後把數據交給負載均衡器,負載均衡器再把數據包的原IP地址改成本身的IP,將目的地址改成客戶端IP地址便可。期間,不管是進來的流量,仍是出去的流量,都必須通過負載均衡器。

image

優勢:集羣中的物理服務器可使用任何支持TCP/IP操做系統,只有負載均衡器須要一個合法的IP地址。

缺點:擴展性有限。當服務器節點增加過多時,負載均衡器將成爲整個系統的瓶頸,由於全部的請求包和應答包的流向都通過負載均衡器。當服務器節點過多時,大量的數據包都交匯在負載均衡器那,速度就會變慢!

關於集羣中的IP名稱縮寫

名稱

縮寫

說明

虛擬IP地址(Virtual IP address)

VIP

VIP爲Director用戶向客戶端提供服務的IP地址

真實IP地址(Real Server IP address)

RIP

在集羣下面節點上使用的IP地址

Director IP地址(Director IP Address)

DIP

Director用於鏈接內外網的IP地址,物理網卡上的IP地址

客戶端IP地址(Client Ip Address)

CIP

客戶端用戶請求集羣服務器的IP地址,改地址用做發送給集羣請求的源IP地址

圖解LVS-NAT工做原理-數據包流動過程文字描述:

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

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

發送的請求包是源地址是本身的IP地址CIP,目標地址直接訪問的是Director的VIP,請求顯示某一個頁面,是不去直接訪問RealServer裏面的IP地址(RealServer的IP地址是私有的IP地址,須要通過NAT的方式將內部IP地址轉化以後的VIP才能在公網上運做)

image

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

image

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

image

第四步: 通過了Director,Source IP:VIP1 DSTIP: CIP1

1: request: S: CIP D:VIP

2: director: S: CIP D:RIP

3: replay: S: RIP D:CIP

4: ditector:S: VIP D:CIP

實驗環境

image

image

配置分發器

配置網路環境,gan61.cn配置成分發器,gan62.cngan63.cn爲提供服務的真實服務器

gan61.cn添加一塊網卡,用於模擬內網,採用vmnet4模式

添加一張網卡 eth1 : 模式vmnet4 模擬內網

eth0 原網卡,模式bridge 模擬公網

配置新添加的網卡IP

[root@gan61 ~]# cd /etc/sysconfig/network-scripts/

[root@gan61 ~]# cp ifcfg-eth0 ifcfg-eth1

[root@gan61 ~]# vim ifcfg-eth1

1 DEVICE=eth1

2 TYPE=Ethernet

3 ONBOOT=yes

4 NM_CONTROLLED=yes

5 BOOTPROTO=static

6 IPADDR=192.168.1.111

7 PREFIX=24

[root@gan61 ~]# service network restart # 重啓網絡服務!使IP生效

[root@gan61 ~]# ip addr # 查看網卡IP信息

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:77:74:1a brd ff:ff:ff:ff:ff:ff

inet 192.168.31.61/24 brd 192.168.31.255 scope global eth0

inet6 fe80::20c:29ff:fe77:741a/64 scope link

valid_lft forever preferred_lft forever

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:77:74:24 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.111/24 brd 192.168.1.255 scope global eth1

inet6 fe80::20c:29ff:fe77:7424/64 scope link

valid_lft forever preferred_lft forever

[root@gan61 ~]# vim /etc/sysctl.conf # 打開路由轉發功能

#將

……

net.ipv4.ip_forward = 0

……

#改成

net.ipv4.ip_forward = 1

[root@gan61 ~]# sysctl -p # 加載配置,是指sysctl.conf裏面的配置生效

net.ipv4.ip_forward = 1

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

[root@gan61 ~]# yum -y install ipvsadm # 安裝LVS管理工具

[root@gan61 ~]# ipvsadm -A -t 192.168.31.61:80 -s rr # 配置ipv規則

# 添加虛擬服務器IP

# rr表示輪詢,round-robin

# -A,表示添加; -t,表示TCP的服務,後面書寫格式爲VIPPort -s設置調度算法

[root@gan61 ~]# ipvsadm -a -t 192.168.31.61:80 -r 192.168.1.62 -m

[root@gan61 ~]# ipvsadm -a -t 192.168.31.61:80 -r 192.168.31.63 -m

# 添加Real Server

# -a,表示添加real server的地址;

# -r表示realserver地址;

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

[root@gan61 ~]# ipvsadm -L # 查看當前ipvsadm規則

# 配置及查看內核IPVS表和算法的工具相似於iptables

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP gan61.cn:http rr

-> 192.168.1.62:http Masq 1 0 0

-> 192.168.31.63:http Masq 1 0 0

InActConn 指非活躍鏈接數, TCP ESTABLISH 狀態之外的鏈接都稱爲不活躍鏈接。例如處於 SYN_RECV 狀態的鏈接,處於 TIME_WAIT 狀態的鏈接等

[root@gan61 ~]# /etc/init.d/ipvsadm save #保存IPvsadm規則

# 保存ipvsadm規則,/etc/sysconfig/ipvsadm

ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]

[root@gan61 ~]# chkconfig ipvsadm on

配置Real Server

配置 Real Server web服務

[root@gan62 ~]# yum -y install httpd # 安裝Httpd服務

[root@gan62 ~]# echo "<h1><em>This is Gan62.cn</em></h1>" > /var/www/html/index.html # 建立測試頁面

[root@gan62 ~]# chkconfig httpd on # 設置開機自啓動

[root@gan62 ~]# service httpd start # 啓動服務

Starting httpd: [ OK ]

[root@gan63 ~]# yum -y install httpd # 安裝Httpd服務

[root@gan63 ~]# echo "<h1><em>This is Gan62.cn</em></h1>" > /var/www/html/index.html # 建立測試頁面

[root@gan63 ~]# chkconfig httpd on # 設置開機自啓動

[root@gan63 ~]# service httpd start # 啓動服務

Starting httpd: [ OK ]

****************************************************************

拓展:TCP三次握手:

image

              ESTABLISH                                          ESTABLISH

TCP四次揮手

image

****************************************************************

Real Server配置IP

Gan62.cn:

IP地址:192.168.1.62,網關192.168.1.62,DNS 192.168.1.111

Gan63.cn:

IP地址:192.168.31.63,網關192.168.31.63,DNS 192.168.1.111

調整gan62.cn gan63.cn 的網卡模式爲 vmnet4

[root@gan62 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

1 DEVICE=eth0

2 TYPE=Ethernet

3 ONBOOT=yes

4 NM_CONTROLLED=yes

5 BOOTPROTO=static

6 IPADDR=192.168.1.62

7 PREFIX=24

8 GATEWAY=192.168.1.111

[root@gan62 ~]# service network restart && service httpd restart

[root@gan63 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

1 DEVICE=eth0

2 TYPE=Ethernet

3 ONBOOT=yes

4 NM_CONTROLLED=yes

5 BOOTPROTO=static

6 IPADDR=192.168.31.63

7 PREFIX=24

8 GATEWAY=192.168.1.111

[root@gan63 ~]# service network restart && service httpd restart

真實環境應該使用由對應的存儲池,而後和咱們的REAL SERVER共享,來使得咱們所訪問的資源是同步的

測試集羣

物理機模擬客戶端,瀏覽器訪問http://192.168.31.63,使用F5鍵刷新

F5刷新,測試結果是會在兩個頁面之間切換

image

ipvsadm:USAGE:

Usage:

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine]

ipvsadm -D -t|u|f service-address

ipvsadm -C

ipvsadm -R

ipvsadm -S [-n]

ipvsadm -a|e -t|u|f service-address -r server-address [options]

ipvsadm -d -t|u|f service-address -r server-address

ipvsadm -L|l [options]

ipvsadm -Z [-t|u|f service-address]

ipvsadm --set tcp tcpfin udp

ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]

ipvsadm --stop-daemon state

ipvsadm -h

ipvsadm其餘參數

--add-service -A # add virtual service with option

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

--edit-service -E # edit virtual service with options

#編輯內核虛擬服務器表中的一條虛擬服務器記錄

--delete-service -D # delete virtual service

#刪除內核虛擬服務器表中的一條虛擬服務器記錄

--clear -C # clear the whole table

#清除內核虛擬服務器表中的全部記錄

--restore -R # restore rules from stdin

#恢復虛擬服務器規則

--save -S # save rules to stdout

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

--add-server -a # add real server with options

#在內核虛擬服務器表的一條記錄裏添加一條新的真實服務器

--edit-server -e # edit real server with options

#編輯一條虛擬服務器記錄中的某條真實服務器記錄

--delete-server -d # delete real server

#刪除一條虛擬服務器記錄中的某條真實服務器記錄

--list -L|-l # list the table

#顯示內核虛擬服務器表

--zero -Z # zero counters in a service or all services

#虛擬服務表計數器清零

--set tcp tcpfin udp # set connection timeout values

#設置鏈接超時值

--start-daemon # start connection sync daemon

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

--stop-daemon # stop connection sync daemon

#中止同步守護進程

--help -h # display this help message

#顯示幫助信息

ipvsadm其餘選項

--tcp-service -t service-address # service-address is host[:port]

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

--udp-service -u service-address # service-address is host[:port]

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

--fwmark-service -f fwmark # fwmark is an integer greater than zero

#說明是通過iptables 標記過的服務類型。

--scheduler -s scheduler

# one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,the default scheduler is wlc.

#使用的調度算法,有這樣幾個選項,默認的調度算法是: wlc.

--persistent -p [timeout] # persistent service

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

--netmask -M netmask # persistent granularity mask

--real-server -r server-address # server-address is host (and port)

#真實的服務器[Real-Server:port]

--gatewaying -g gatewaying (direct routing) (default)

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

--ipip -i ipip encapsulation (tunneling)

#指定LVS 的工做模式爲隧道模式

--masquerading -m masquerading (NAT)

#指定LVS 的工做模式爲NAT 模式

- -weight -w weight # capacity of real server

#真實服務器的權值

--u-threshold -x uthreshold # upper threshold of connections

--l-threshold -y lthreshold # lower threshold of connections

--mcast-interface interface # multicast interface for connection sync

#指定組播的同步接口

--syncid sid # syncid for connection sync (default=255)

--connection -c # output of current IPVS connections

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

--timeout # output of timeout (tcp tcpfin udp)

#顯示tcp tcpfin udp timeout 如:ipvsadm -L --timeout

--daemon # output of daemon information

#顯示同步守護進程狀態

--stats # output of statistics information

#顯示統計信息

--rate # output of rate information

#顯示速率信息

--thresholds # output of thresholds information

--persistent-conn # output of persistent connection info

--sort # sorting output of service/server entries

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

--ops -O # one-packet scheduling

--numeric -n # numeric output of addresses and ports

#輸出IP 地址和端口的數字形式

Ipvsadm命令實例

[root@gan61 ~]# ipvsadm -L -n –c # 查看客戶端鏈接分發器和Real Server的狀況

IPVS connection entries

pro expire state source virtual destination

TCP 01:57 TIME_WAIT 192.168.31.228:52955 192.168.31.63:80 192.168.1.63:80

TCP 01:57 TIME_WAIT 192.168.31.228:52953 192.168.31.63:80 192.168.1.63:80

TCP 01:58 TIME_WAIT 192.168.31.228:52959 192.168.31.63:80 192.168.1.63:80

TCP 01:57 TIME_WAIT 192.168.31.228:52952 192.168.31.63:80 192.168.1.62:80

TCP 01:57 TIME_WAIT 192.168.31.228:52956 192.168.31.63:80 192.168.1.62:80

TCP 01:57 TIME_WAIT 192.168.31.228:52954 192.168.31.63:80 192.168.1.62:80

TCP 01:55 TIME_WAIT 192.168.31.228:52951 192.168.31.63:80 192.168.1.63:80

TCP 01:58 TIME_WAIT 192.168.31.228:52958 192.168.31.63:80 192.168.1.62:80

TCP 01:57 TIME_WAIT 192.168.31.228:52957 192.168.31.63:80 192.168.1.63:80

[root@gan61 ~]# ipvsadm -Z # 清空當前虛擬服務表的計數器

[root@gan61 ~]# ipvsadm -L –n --stats # 查看分發狀況

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes

-> RemoteAddress:Port

TCP 192.168.31.63:80 13 73 58 7729 5222

-> 192.168.1.62:80 7 36 28 4023 2564

-> 192.168.1.63:80 6 37 30 3706 2658

Conns (connections scheduled) 已經轉發過的鏈接數

InPkts (incoming packets) 入包個數

OutPkts (outgoing packets) 出包個數

InBytes (incoming bytes) 入流量(字節)

OutBytes (outgoing bytes) 出流量(字節)

[root@gan61 ~]# ipvsadm -L -n --rate # 查看速率

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS

-> RemoteAddress:Port

TCP 192.168.31.63:80 1 9 7 897 712

-> 192.168.1.62:80 1 4 3 419 333

-> 192.168.1.63:80 1 5 4 478 379

CPS (current connection rate) 每秒鏈接數

InPPS (current in packet rate) 每秒的入包個數

OutPPS (current out packet rate) 每秒的出包個數

InBPS (current in byte rate) 每秒入流量(字節)

OutBPS (current out byte rate) 每秒入流量(字節)

[root@gan61 ~]# ipvsadm -d -t 192.168.31.63:80 -r 192.168.1.62 # 刪除一臺RS

[root@gan61 ~]# ipvsadm -C # 清空規則

總結:

1:一組計算機爲咱們的用戶提供同一類服務

1000臺:統一管理

node:節點

2:集羣特性

可伸縮性(Scalability);可靠性(Reliability);可管理性(Manageability)

可伸縮性(Scalability):20臺計算機爲咱們提供服務,可縮可減,可增可拓

可靠性(Reliability):萬一部分計算機出現問題,並不影響對用戶提供服務

可管理性(Manageability):統一管理

3:層次化

能夠經過IP(來源IP),由那些服務器爲用戶提供服務

經過不一樣的程序,爲用戶提供服務

html

jsp

php

png

jeg

mp4

avi

asp

net

數據層,爲用戶提供服務

網絡層(傳輸層)-->應用層--->數據層[分割]

4:集羣的類型

負載均衡集羣:Load Balance 集羣,簡稱 LB,當一臺服務器沒法知足需求的時候,兩臺或多臺服務器同時爲客戶端提供服務,以分擔需求,提供輪詢(RR)工做查詢

拓展伸縮

高可用集羣:High Availability 集羣,簡稱 HA,好比一臺服務器出現故障的時候,可是不影響客戶端體驗,另一臺服務器擔當這臺服務器的工做! realserver 前段代理的高可用 做用:避免單點故障

高性能集羣:High Perfermance Computing 集羣,簡稱 HPC,一臺計算機是 4路,那麼 100 臺計算機同時來輔助計算處理,就是 400 顆 CPU! hadoop

5:分佈式

分散佈局合一

分佈式計算

分佈式應用

分佈式存儲

6:集羣的類型

軟件集羣

lvs(傳輸層)

Nginx(應用層)

haproxy(應用層)

硬件集羣

F5

A10

Array

Redware

Netscaler

HA

heartbeat

keepalived

corosync+pacemaker

RHCS

HPC

hadoop

6:國內比較知名開源軟件

tengine(Nginx的二次開發)

TFS

LVS (full-nat)

都和淘寶逃不了關係 章文鬆

7LVS介紹

物理層-->數據鏈路層-->網絡--->傳輸層-->會話層--->表示層--->應用層

BIT MAC IP application

L4:四層路由,四層交換

根據目標地址和目標端口是先求轉發

LVS:Linux Virtual Server

iptables/netfilter

ipvsadm/ipvs

tcp/udp

IP:PORT

8:三層結構

load balancer :負載調度器

Server Pool: 服務器池,web,FTP,mail,DNS

Shared Storage: 共享存儲

9:相關術語

director:分發器,負載調度器,也就是load balancer

real server:真正爲用戶提供服務器服務器

IP

VIP:Virtual IP,真正對外提供服務的IP,也就是DNS解析的地址IP

DIP:Director IP,面對咱們後端真實服務器的IP

RIP:Realserver IP

CIP:Client IP

ipvs:ip virtual server

10LVS的類型

LVS包的轉發方式

lvs-nat[network Address translation]

lvs-dr [direct Routing]

lvs-tun [tunneling]

相關文章
相關標籤/搜索