集羣分類:
HAC(高可用集羣)
儘量的保障網絡通信的正常狀態
實現方案:
心跳檢測
故障:
腦分裂
出現的問題:
網絡訪問的中斷
實現方案:
keepalived VRRP技術
heartbeat Linux-HA 腳本監測切換
HPC(高性能集羣)
提供單臺服務器不能提供的計算能力
結構:
任務拆分
文件共享
LBC(負載均衡集羣)
構成:
負載調度器
真實服務器
共享存儲
負載調度器實現方案:
LVS、Nginx
工做原理:
四層:LVS ,一次TCP鏈接完成,由Client與RS(實際服務器)之間完成。D(負載調度器)只起到中間轉發左右,不參與實際流量。
七層:nginx ,兩次TCP鏈接,一次由client和D(調度器)完成,一次由D與RS(實際服務器)完成。
使用場景:
四層:TCP/UDP的C/S架構,壓力小,併發大。可是識別不精確。
七層:由域名結構統領的網絡服務器,支持調度多個集羣。
安全性:
四層:不會攔截SYN(tcp鏈接請求包)攻擊
七層:能夠攔截SYN攻擊
HPC與LBC區別:
LBC:提高的是單位時間內處理的任務數量提高系統效率
HPC:經過下降處理單個任務的時間提高系統效率
Nginx:
調度多個集羣操做
vim nginx.conf
http{ #http 內配置
upstream qixiao.com{ #集羣配置區
server 10.244.16.21:8080; #集羣主機(默認是輪詢,能夠支持多端口)
server 10.244.16.22:80; #集羣主機
}
upstream lingshu.com{ #第二個集羣配置區
server 10.244.16.23:80;
server 10.244.16.24:80;
}
server { #server區域
listen 80;
server_name www.qixiao.com; #域名
location / {
proxy_pass http://qixiao.com; #當訪問www.qixiao.com時反向代理到qixiao.com集羣
}
}
server { #第二個server區域
listen 80; #監聽端口
server_name www.lingshu.com; #域名
location / {
proxy_pass http://lingshu.com; #當訪問www.lingshu.com時反向代理到lingshu.com集羣
}
}
}
LVS:Linux虛擬服務
數據報文經過網卡層層解析到達內核,內核根據報文的類型交給上層用戶空間的應用執行。在數據包從內核空間傳送到用戶空間過程當中,鉤子函數強行獲取報文的使用權限。查看報文的五元組是否符合LVS規則,若是符合,更改目的地址和端口,進行轉發,不符合就還給上層用戶空間由上層應用解析。
構成:
ipvs:核心程序,內核內置
ipvsadm:用戶空間的命令行管理工具
工做模式:
LVS-NAT
SNAT:主要用於局域網使用一個外網IP進行外網訪問
DNAT:端口映射
負載調度器位於client和真實RS之間
負載調度器必須是Linux,真實提供服務的RS能夠是任何操做系統
負載調度器一塊網卡負責提供VIP能力,另外一塊網卡與內網RS通信
負載調度器與真實RS位於同一個二層環境。
負載調度器只負責處理入棧以及出棧請求。
LVS-DR(直接路由模式)
負載調度器與真實服務器位於同一網絡環境
負載調度器與真實服務器必須是Linux操做系統,不支持端口映射
負載調度器只負責處理入棧請求,出棧請求由真實服務器完成。
VIP地址配置在各個節點之上,可是隻有負載調度器擁有通信權,RS上的lo網卡解析數據報文
LVS-TUN(隧道模式)
負載調度器與真實服務器必須是Linux操做系統
負載調度器與真實服務器必須擁有公網IP或者能被路由
負載調度器與真實服務器必須支持數據包二次封裝
負載調度器處理入棧請求,出棧請求由真實服務器完成
難度: NAT < DR < TUN
併發量:RD > TUN > NAT
使用量:NAT > DR > TUN
調度算法:
固定算法(靜態調度算法):只根據算法自己調度,不考慮服務器自己
動態算法(動態調度算法):處理考慮算法自己,還要考慮服務器狀態。【消耗CPU資源,可是更加智能】
靜態:
RR:輪詢,將每次用戶的請求分配給後端的服務器,從第一臺服務器開始到第N臺結束,而後循環
WRR:加權輪詢,按照權重的比例實如今多臺主機之間進行調度
SH:源地址散列,將同一個IP的用戶請求,發送給同一個服務器。
DH:目標地址散列,將同一個目標地址的用戶請求發送給同一個真實服務器(提升緩存的命中率)
動態:
LC:最少鏈接,將新的鏈接請求,分配給鏈接數最少的服務器。活動鏈接*256+非活動鏈接
WLC:加權最少鏈接:特殊的最少鏈接法,權重越大承擔的請求數越多(活動鏈接*256+非活動鏈接)/權重
SED:最短時間延遲,特殊的WLC算法,(活動鏈接+1)*256/權重
NQ:永不排隊,特殊的SED算法。若是發現有鏈接數爲0直接分配。若是所有不爲0。則按SED算法分配
LBLC:特殊的DH算法,既能提升緩存命中率,又要考慮服務器性能。緩存壓力達到必定閥值,就將流量分發給其餘服務器。
LBLCR:LBLC+緩存,儘量提升負載均衡和緩存命中率的折中方案
持久鏈接:
一、優先於任何算法最早匹配
二、能夠和任意算法進行配合處理,優先級最高
三、存儲數據在內存分頁中(內存空間)
分類:
PCC(持久客戶端鏈接)未來自於同一客戶端的全部請求定向至選定的RS,只要IP相同,分配的服務器始終相同
ipvsadm -A -t 172.16.0.8:0 -s wlc -p 120
PPC(持久端口鏈接)未來自於同一個客戶端對同一個服務(端口)的請求,定向至選定的RS
ipvsadm -A -t 172.16.0.8:80 -s rr -p 120
PFMC(持久防火牆標記鏈接)未來自於同一客戶端對指定服務(端口)的請求,始終定向至此選定的RS,不過能夠將兩個絕不相干的服務定義爲一個集羣服務。
iptables -t mangle -A PREROUTING -d 172.16.0.8 -p -tcp -dport 80 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -d 172.16.0.8 -p -tcp -dport 443 -j MARK --set-mark 10
service iptables save
上邊兩條表示:將訪問172.16.0.8的80和443端口的流量打上10標籤
ipvsadm -A -f 10 -s wlc -p 120 表示將標籤爲10的流量執行wlc算法,持久化鏈接時間爲120秒。持久化時間內發生鏈接,時間增長120秒。最多不超過200秒【持久化鏈接時間不宜過大或太小】
LVS-NAT模式搭建:
NFS服務器:
mkdir /share 建立共享目錄
chown nfsnobody:nfsnobody /share/ NFS服務默認使用nfsnobody用戶,將共享目錄屬主和屬組更改成nfsnobody
yum install -y nfs
vim /etc/exports
/share 10.244.16.0/24(rw,sync) #能夠共享多個網段。每一行是一個共享。三個字段【共享目錄路徑 共享網段 共享權限】
service rpcbind restart #rpcbind服務是nfs同步數據的服務
service nfs start #開啓nfs服務
chkconfig rpcbind on
chkconfig nfs on
showmount -e [NFS服務器IP地址] 測試NFS服務器是否了鏈接
注:若是出現權限問題。能夠嘗試將apache用戶加入到nfsnobody組。用戶提交的文件就能夠寫入共享服務器
負載調度器:
yum install -y ipvsadm
vim /etc/sysctl.conf
net,ipv4.ip_forward=1
sysctl -p
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.244.16.30
ipvsadm -A -t 10.244.16.30:80 -s rr
ipvsadm -a -t 10.244.16.30:80 -r 192.168.1.1:80 -m
ipvsadm -a -t 10.244.16.30:80 -r 192.168.1.2:80 -m
ipvsadm -Ln --stats
LVS-DR模式搭建: NFS服務器:同上 負載調度器: 關閉NetworkManager服務,並設置開機不自啓 service NetworkManager stop chkconfig NetworkManager off 添加一塊網卡,或編輯虛擬網卡 cp ifcfg-eth0 ifcfg-eth0:0 vim ifcfg-eth0:0 DEVICE=eth0:0 IPADDR=10.244.16.100 #vip地址 PREFIX=24 ifup eth0:0 #若是虛地址起不來,則查看NetworkManager服務有沒有關閉。通常是NetworkManager服務與network服務衝突所致,建議重啓一下 修改內核參數,防止相同的網絡地址廣播衝突 vim /etc/sysctl net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 sysctl -p #刷新內核參數 modprobe ip_vs #查看內核是否加載,沒法應則以加載 cat /proc/net/ip_vs #參看版本,確認知否正確加載 安裝LVS管理工具ipvsadm yum install -y ipvsadm 設置DR模式的負載調度規則 ipvsadm -A -t 10.244.16.100:80 -s rr #10.244.16.100爲VIP,21和22爲實際RS服務器IP ipvsadm -a -t 10.244.16.100:80 -r 10.244.16.21:80 -g ipvsadm -a -t 10.244.16.100:80 -r 10.244.16.22:80 -g ipvsadm -Ln 查看調度規則 保存配置: service ipvsadm save chkconfig ipvsadm on 實際RS1: 關閉NetworkManager服務,並設置開機不自啓 service NetworkManager stop chkconfig NetworkManager off 修改內核參數,防止相同的網絡地址廣播衝突 vim /etc/sysctl net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 sysctl -p 刷新內核參數 配置虛擬迴環網卡lo:0用於解析數據報文 cp ifcfg-lo ifcfg-lo:0 vim ifcfg-lo:0 DEVICE=lo:0 IPADDR=10.244.16.100 NETMASK=255.255.255.255 ifup eth0:0 #若是虛地址起不來,則查看NetworkManager服務有沒有關閉。通常是NetworkManager服務與network服務衝突所致,建議重啓一下 mount -t nfs [共享存儲:/路徑] [網站根目錄] 實際RS2:與RS1相似