一組各自相互獨立且又相互依賴的,經過高速網絡互聯的計算機組成的一個計算機組, 以單一的系統模式加以管理, 爲用戶提供服務, 對用戶來講, 用戶只會認爲對方是一個服務. 這個裏面, 一組計算機的一臺計算機就是集羣的一個節點html
可伸縮性, 可靠性, 可管理性前端
例:一臺服務器 若是可以響應10000個併發 linux
若是如今有20000個併發 一臺服務器就沒法響應web
說明,web服務已經達到瓶頸算法
解決這個問題的辦法:vim
加配置: 加CPU, 加內存, 加帶寬, 加SSD 這種解決方法稱爲「向上擴展」, 可以解決一時, 卻不能持久一世[單臺服務器上作動做]後端
加服務器: 一臺==>兩臺, 兩臺==>四臺 四臺==>8臺 使用多臺服務器同時爲用戶提供服務 ,而這一種解決方法則稱爲「橫向擴展」或「向外擴展」瀏覽器
向外擴展: 就是集羣服務器
集羣系統主要分爲網絡
負載均衡(Load Balance)集羣,簡稱 LB
高可用(High Availability)集羣,簡稱 HA 集羣
高性能計算(High Perfermance Computing)集羣,簡稱 HPC 集羣
硬件的實現: – F5 負載均衡器
軟件的實現: – LVS(4層,傳輸層) – Nginx(7層,應用層)
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一,是根據iptables的實現來開發的,因此使用時候會和iptables至關相似
官網:http://www.linuxvirtualserver.org/
中文站點: http://zh.linuxvirtualserver.org/
負載調度器 (分發器Load Balancer, Director): 整個集羣對外的最前端機, 負責接收用戶請求, 而且根據本身的調度算法, 將請求轉發到後端真實服務器上的動做,而客戶認爲服務是來自一個IP地址(咱們可稱之爲VIP虛擬IP地址)上的。
服務器池(Server Pool): 真正爲用戶提供服務的服務器, 每一臺服務器就是一臺RS[RealServer],執行的服務有WEB、MAIL、FTP和DNS等。
共享存儲(Shared Storaged): 爲RS保持相同內容, 提供數據的一致性,也就是說,它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。
LVS/NAT
LVS/DR
LVS/TUN
LVS提供了三種包轉發方式:NAT(網絡地址映射)、IP Tunneling(IP隧道)、Direct Routing(直接路由)。不一樣的轉發模式決定了不一樣的cluster的網絡結構
NAT: 網絡地址轉換
DNAT: 目標地址轉換 改變的是目標地址
SNAT: 原地址轉換 改變的是原地址
LVS-NAT: 就是使用的SNAT和DNAT完成報的轉發
NAT方式可支持任何的操做系統,以及私有網絡,而且只需一個Internet IP地址,可是整個系統的性能受到限制。由於執行NAT每次須要重寫包,有必定的延遲;另外,大部分應用有80%的數據是從服務器流向客戶機,也就是用戶的請求很是短,而服務器的迴應很是大,對負載均衡器造成很大壓力,成爲了新的瓶頸。
Director(分發器)分配請求到不一樣的real server。real server處理請求後直接回應給用戶,這樣director負載均衡器僅處理客戶機與服務器的一半鏈接。IP Tunneling技術極大地提升了director的調度處理能力,同時也極大地提升了系統能容納的最大節點數,能夠超過100個節點。real server能夠在任何LAN或WAN上運行,這意味着容許地理上的分佈,這在災難恢復中有重要意義。服務器必須擁有正式的IP地址用於與客戶機直接通訊,而且全部服務器必須支持IP隧道協議。
與IP Tunneling相似,負載均衡器僅處理一半的鏈接,避免了新的性能瓶頸,一樣增長了系統的可伸縮性。Direct Routing與IP Tunneling相比,沒有IP封裝的開銷,但因爲採用物理層(修改MAC地址)技術,全部服務器都必須在一個物理網段。
客戶端訪問調度器時,調度器經過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器;真實服務器的響應報文經過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。
如圖:
步驟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
實驗前期準備:
一、準備3臺主機
二、iptables -F , 清除規則
三、/etc/selinux/config,關SELinux
#getenforce Disabled
客戶端計算機的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便可。
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(服務的)端口 ?
[root@xuegod63 Packages]# pwd
/mnt/Packages
[root@xuegod63 Packages]# rpm -ivh ipvsadm-1.25-9.el6.x86_64.rpm
或:yum install 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
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
[root@xuegod63 ~]# ipvsadm --save > /etc/sysconfig/ipvsadm
或ipvsadm -S 保存以上的配置
Saving IPVS table to /etc/sysconfig/ipvsadm: [肯定]
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 #(實驗期間,各個服務器的頁面不一樣)
在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
[root@xuegod63 ~]# elinks 192.168.1.63 --dump
192.168.2.62
訪問: 在物理上打開瀏覽器訪問: 每按F5刷新一次,就會變換一個頁面。
分發器須要監聽80 嗎?不須要
-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
-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秒