一、 集群概述
1、 什么是集群?
一組各自相互獨立且又相互依賴的,通過高速網絡互聯的計算機組成的一個計算機組, 以單一的系統模式加以管理, 為用戶提供服務, 對用戶來說, 用戶只會認為對方是一個服務. 這個里面, 一組計算機的一台計算機就是集群的一個節點
2、 集群的特性:
可伸縮性, 可靠性, 可管理性
3、 應用場景:
例:一台服務器 如果能夠響應10000個並發
如果現在有20000個並發 一台服務器就無法響應
說明,web服務已經達到瓶頸
解決這個問題的辦法:
加配置: 加CPU, 加內存, 加帶寬, 加SSD 這種解決方法稱為“向上擴展”, 能夠解決一時, 卻不能持久一世[單台服務器上做動作]
加服務器: 一台==>兩台, 兩台==>四台 四台==>8台 使用多台服務器同時為用戶提供服務 ,而這一種解決方法則稱為“橫向擴展”或“向外擴展”
向外擴展: 就是集群
4、 集群的種類:
集群系統主要分為
負載均衡(Load Balance)集群,簡稱 LB
高可用(High Availability)集群,簡稱 HA 集群
高性能計算(High Perfermance Computing)集群,簡稱 HPC 集群
5、 LB實現手段
硬件的實現: – F5 負載均衡器
軟件的實現: – LVS(4層,傳輸層) – Nginx(7層,應用層)
二、 LVS集群
1、LVS(Linux Virtual Server)
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一,是根據iptables的實現來開發的,所以使用時候會和iptables相當類似
官網:http://www.linuxvirtualserver.org/
中文站點: http://zh.linuxvirtualserver.org/
2、 LVS 集群工作結構圖:

負載調度器 (分發器Load Balancer, Director): 整個集群對外的最前端機, 負責接收用戶請求, 並且根據自己的調度算法, 將請求轉發到后端真實服務器上的動作,而客戶認為服務是來自一個IP地址(我們可稱之為VIP虛擬IP地址)上的。
服務器池(Server Pool): 真正為用戶提供服務的服務器, 每一台服務器就是一台RS[RealServer],執行的服務有WEB、MAIL、FTP和DNS等。
共享存儲(Shared Storaged): 為RS保持相同內容, 提供數據的一致性,也就是說,它為服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。
三、 LVS模式及工作原理
1 、 LVS(4層) 模式:
LVS/NAT
LVS/DR
LVS/TUN
2、 LVS負載均衡的三種包轉發方式
LVS提供了三種包轉發方式:NAT(網絡地址映射)、IP Tunneling(IP隧道)、Direct Routing(直接路由)。不同的轉發模式決定了不同的cluster的網絡結構
3、 NAT(網絡地址映射)
NAT: 網絡地址轉換
DNAT: 目標地址轉換 改變的是目標地址
SNAT: 原地址轉換 改變的是原地址
LVS-NAT: 就是使用的SNAT和DNAT完成報的轉發
NAT方式可支持任何的操作系統,以及私有網絡,並且只需一個Internet IP地址,但是整個系統的性能受到限制。因為執行NAT每次需要重寫包,有一定的延遲;另外,大部分應用有80%的數據是從服務器流向客戶機,也就是用戶的請求非常短,而服務器的回應非常大,對負載均衡器形成很大壓力,成為了新的瓶頸。
4、 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
四、 實戰:配置LVS-NAT
1 、 實例1: LVS NAT模式
實驗前期准備:
1、准備3台主機
2、iptables -F , 清除規則
3、/etc/selinux/config,關SELinux
#getenforce Disabled
2、 真實環境中的拓撲圖

3、 集群各節點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即可。
4、配置LVS:
xuegod63配置成分發器:
1、打開路由轉發功能
[root@xuegod63 ~]# vim /etc/sysctl.conf
改:net.ipv4.ip_forward = 0
為:net.ipv4.ip_forward = 1
讓配置生效:
[root@xuegod63 ~]# sysctl -p
2、配置網絡環境:
添加一個網卡(需要兩張網卡), 配置成以下網絡環境:
eth0 192.168.1.63 模式:br0 模擬公網
eth1 192.168.2.63 模式:vmnet4 模擬內網
Director分發器:需不需要開啟80(服務的)端口 ?
5、 安裝: 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上面配置:
准備:
1、配置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
2、配置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 #(實驗期間,各個服務器的頁面不同)
3、配置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秒
