名詞概念
CIP Client IP,訪問用戶自身的IP
VIP Virtual IP,用戶訪問的目的IP
RIP Real IP,后端webserver的真實IP
DIP 負載均衡器自身的IP
概述
負載均衡是實現將用戶訪問流量分發的方法,自身有高可用(保證存活)的能力(但并不是高可用集群),是以提高服務的并發處理能力為目標的集群搭建方法。
實現負載均衡一般可以使用順序、比重、流量、服務類別等進行分配,LB的部署方式也分為路由和服務直接返回模式。
-
負載均衡可以通過“軟硬”兩種方法實現:
軟件LB:LVS(四層路由設備)、Nginx(七層負載均衡,主要針對http, smtp, pop3, imap)、Haproxy(通Nginx)
硬件LB:最著名的就F5.(型號 F5 BIG-IP-1500, F5 BIG-IP LTM8800),價格昂貴是它的唯一缺點
LB的主要方式
-
http重定向
- 根據用戶的
http請求
計算出一個真實的web服務器的IP地址
,并將該web服務器IP地址寫入http重定向
中,重新返回
給瀏覽器,由瀏覽器重新訪問新的Ip。多應用于下載網站中。 - 優點:簡單
- 缺點:瀏覽器需要
兩次請求
服務器才能完成一次訪問,性能差。http重定向服務器自身的處理能力可能成為其瓶頸。使用http302相應重定向,有可能會使搜索引擎判定為SEO作弊
,降低搜索排名。
- 根據用戶的
-
DNS LB
- DNS LB提供域名到
IP解析
的過程,將LB部署在DNS解析服務器
上。此時DNS服務器也就充當了LB。主要使用了域名運營商
提供的只能DNS以及多線解析技術(不過這些跟我們沒多大關系)。具體實現即DNS上配置多個域名對應的IP記錄,域名解析式通過DNS服務器的算法(輪詢)將一個域名請求分配到真實的服務器上。 - 優點:工作都交給了DNS服務器,省卻了功夫。同時多個DNS還支持
基于地理位置的域名解析
,將域名解析成距離用戶地理位置最近的一個服務器地址,加快訪問速度,極大程度改善性能。 - 缺點:①DNS目前為
多級解析
,每一級(包括本地)都可能存在緩存記錄
。當一臺存在于緩存中的服務器下線之后,該服務器對應的DNS記錄可能仍然存在,導致用戶的訪問失敗。②DNSLB的控制權在域名服務商的手中
,網站可能無法做出過多的改善和管理
,也不能實現按照服務器的處理能力來分配負載。DNS負載均衡采用的是簡單的輪詢算法
,不能區分服務器之間的差異,不能反映服務器運行的狀態。
- DNS LB提供域名到
-
反向代理負載均衡
- 主要的代表即為
代表Nginx
,其工作原理是根據負載均衡算法
將請求的瀏覽器訪問抓發到不同的web服務器來處理,處理結果經過反向服務器再發送回瀏覽器。 - 優點:部署簡單,處于http協議層面。
- 缺點:使用了反向代理服務器后,web服務器RIP
不能直接暴露在外
,因此web服務器不需要使用外部IP地址,而反向代理服務作為溝通橋梁就需要配置雙網卡、外部內部兩套IP地址。
- 主要的代表即為
-
IP負載均衡
代表lvs-nat
- 在網絡層通過修改目標地址進行負載均衡。用戶訪問請求到達負載均衡服務器后,負載均衡服務器在操作系統內核進程獲取網絡數據包,根據算法得到一臺RIP,然后將用戶請求的目標地址修改成RIP,數據處理完成后返回給負載均衡服務器,負載均衡服務器收到響應后將自身的地址修改為CIP后再將數據返回回去。類似于反向代理。
- 優點:在響應請求時速度叫反向代理要快。
- 缺點:當請求數據較大時,速度較慢。
-
數據鏈路層負載均衡
代表lvs-dr
- 在
數據鏈路層修改MAC地址
進行負載均衡。負載均衡服務器的DIP
和它管理的web服務器集群使用的VIP
一致,負載均衡服務器分發過程中不修改訪問地址的IP地址
,而是修改MAC地址。 - 優點:不需要負載均衡服務器進行IP地址的轉換。數據相應時,不需要經過負載均衡服務器。
- 缺點:負載均衡服務器網卡帶寬要求較高。
- 在
-
物理層負載均衡
代表F5
- ①F5 BIG-IP提供12種靈活的算法將所有的流量均衡的分配到各個服務器而面對用戶,只是一臺虛擬服務器。②自帶健康性檢查,F5 BIG-IP可以確認應用程序能否對請求返回對應的數據。③F5 BIG-IP具有動態的Session的會話保持功能。④F5 BIG-IP的iRules功能可以做到HTTP內容過濾,根據不同的域名,URL,將訪問請求傳送到不同的服務器。
- 優點:性能好
- 缺點:貴
LB中的幾種輪詢算法
- Fixed Scheduling Method 靜態調度方法
- RR 輪詢
- WRR 加權輪詢(需要設置權重)
- DH 目標地址hash(哈希映射)
- SH 源地址hash
- Dynamic Scheduling Method 動態調度方法
- LC 最小連接
- WLC 加權最小鏈接
- LBLC 基于本地的最少連接(找出最近使用的服務器,若該服務器是可用的且沒有超載,則會優先選擇該服務器)
- LBLCR 帶復制的基于本地的最少連接(與LBLC的不同在于,對應的一個RIP可能所屬與一個集群映射)
LVS
概述
- LVS是Linux Virtual Server的簡稱,其工作在一臺服務器上提供Directory的功能,本身并不提供任何服務,只是把特定的請求轉發給對應的RealServer,從而實現集群環境中的LB。
NAT轉發模式
NAT
工作原理
- 客戶端將請求法王前端的Director,請求報文中包含CIP和VIP。
- Director接收到報文后,若VIP為規則內存在的地址,那么它將客戶端請求報文的VIP改為后端的RIP,并根據算法發送出去。
- 報文送到Real Server后,由于報文的RIP為自身IP,故會響應該請求,處理完成后返回給LB。
- Director接收到RS處理完成的報文后將RIP修改為VIP發送給CIP。
配置中注意
- NAT中RS的網關必須指向LVS,否則報文無法發送給CIP
缺點
因為所有的請求報文都需要Director處理應答,Director自身很可能成為架構的性能瓶頸
DR直接路由模式
DR
工作原理
- 客戶端將請求發往前段的Director,請求報文包含CIP,VIP
- Director收到報文后,發現為規則內存在的地址,則將客戶端請求報文源MAC改為自身的DIP的MAC,目標MAC改為RIP的MAC地址,并將其轉發給RS
- RS接收到報文后,對報文進行處理,然后啟用回環網卡接口(lo)發送到默認網卡(eth0)直接發送給CIP
特點
- 集群節點和director必須處于一個物理網絡內
- RIP可以使用公網IP或私有IP
- director僅處理入站請求,director服務器的壓力小
- 集群節點網卡不知想director,故出站不經過director
- 不支持端口映射
- 大多數系統都可以作為realserver,需要支持ARP廣播
關于ARP的特殊處理法
在配置RS的lo時,需要吧netmask配置為255.255.255.255,防止ARP廣播的影響
TUN-IP隧道模式
TUN
工作原理
- 客戶端將請求發往前端的Director,請求報文中包含CIP,VIP
- Director接收到報文后,識別VIP為規則內存在的IP,則Director在客戶端請求的報文前封裝一層IP報文,將源地址改為DIP,轉發到RIP
- RS接收后,首先拆封第一次IP報文,之后第二層IP報文對應自身lo接口上的VIP,所以會處理請求報文,并將響應報文通過lo結構發給eth0網卡直接發送給CIP
特點
- 優點
- Director只負責將請求報文發送給RS,而RS應答發送給CIP。減少Director的數據流。Director不再是系統的瓶頸,能處理巨大的請求量。區別于DR模式,此方法可以實現異地LB。
- 缺點
- 隧道模式的RS節點需要合法IP,需要所有的RS都支持"IP Tunneling"(IP Encapsulation)協議,RS可能只能部署Linux服務器
LVS-DR的實際操作
- 1.在DirectorServer上添加VIP和設置路由
ifconfig eth0:0 192.168.1.2 broadcast 192.168.1.255 netmask 255.255.255.0 up # 設置VIP和VIP的廣播域和子網掩碼 echo 'route add -host 192.168.1.2 dev eth0:0' >> /etc/rc/local # 永久添加路由
- 2.LVS設置路由條目
yum -y install ipvsadm #下載安裝LVS ipvsadm -C #清空LVS的規則 ipvasadm -A -t 192.168.1.2:80 -s rr # -A為添加virtual_server -t使用tcp協議 -s指定調度策略 rr 輪詢 ipvsadm -a -t 192.168.1.2:80 -r 192.168.1.3:80 -g ipvsadm -a -t 192.168.1.2:80 -r 192.168.1.4:80 -g # -a 添加realserver -g 指定模式為DR
- 3.讓配置永久生效
ipvsadm -save > /etc/sysconfig/ipvsadm systemctl enable ipvsadm
- 4.在RealServer上進行配置
RS_1
在RS_2上執行類似的操作ifconfig lo:0 192.168.1.3/32 #配置lo網卡 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp響應,不允許接受 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #允許arp發送
LVS-NAT的實際操作
- 1.前期工作
Director需要兩個網卡,一個外網一個內網,其中外網網卡為VIP,此處取外網網卡IP為10.10.10.2,內網網卡IP為192.168.1.2,兩個RSIP分別為192.168.1.3 192.168.1.4 - 2.在RS上將Director作為網關
RS_2上有相同操作echo 'route add -net 10.10.10.2/24 gw 192.168.1.2'
- 3.在LVS上的操作
echo 1 > /proc/sys/net/ipv4/ip_forward #啟動路由功能 yum -y install ipvsadm ipvsadm -A -t 10.10.10.2:80 -s rr ipvsadm -a -t 10.10.10.2:80 -r 192.168.1.3:80 -m ipvsadm -a -t 10.10.10.2:80 -r 192.168.1.4:80 -m
LVS上的其他操作匯總
# 1.管理虛擬服務
ipvsadm -A -t IPADDR:PORT -s rr #添加采用輪詢算法
ipvsadm -E -t IPADDR:PORT -s -wrr #修改算法為加權輪詢
ipvsadm -D -t IPADDR:PORT #刪除虛擬服務
# 2.管理RS
ipvsadm -a -t RIP:PORT -r VIP -g -w 2 #加使用DR權重2
ipvsadm -e -t RIP:PORT -r VIP -g -w 5 #改權重
ipvsadm -d -t RIP:PORT -r VIP #刪除
# 3.查看統計
ipvsadm -Ln #查看當前
ipvsadm -lnc #查看當前轉發情況
ipvsadm -Ln --stats --rate #查看ipvs模塊的轉發
keepalived高可用集群
keepalived是集群管理中保證集群高可用的一個服務軟件,用于防止單點故障。
工作原理
- 1.keepalived是以VRRP協議為實現基礎的,VRRP全程Virtual Rou8ter Redundacy Protocol,即虛擬路由冗余協議。
- 2.實際上,keepalived是將相同功能的server構成一個組,在組中存在一個master和多個backup,master上面對外有對外提供服務的vip,master會發組播,當backup收不到vrrp包時就認為master宕機了,此時按照VRRP的優先級,會選舉一個backup作為master
- 3.keepalived中主要有三個模塊,為core, check, vrrp
- core 為keepalived的核心,負責主程序的啟動維護和全局配置文件的加載和解析
- check負責健康檢查
- vrrp實現vrrp協議
實際配置
-
1.環境準備 需準備兩臺以上服務器(此處以兩臺為例),其中一臺搭載Keepalived
- RS1:192.168.1.3
- RS2:192.168.1.4
- VIP:192.168.1.2
-
2.配置
- RS1 作為master
yum -y install keepalived vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id 1 #設備在組中的標識,可相同 } #vrrp_script chk_nginx { #健康檢查 #script "/etc/keepalived/ck_ng.sh" #檢查腳本 #interval 2 #檢查頻率 #weight -5 #priority減5 #fall 3 #失敗三次 } vrrp_instance VI_1 { #VI_1 實例名,兩臺路由器相同 state MASTER #主或者從狀態 interface eth0 #監控網卡 mcast_src_ip 192.168.1.3 #心跳源IP virtual_router_id 55 #虛擬路由編號,主從需一致 priority 100 #優先級 advert_int 1 #心跳間隔 authentication { #秘鑰認證(1-8位) auth_type PASS auth_pass 123456 } virtual_ipaddress{ #VIP 192.168.0.1/24 } #track_script { #引用腳本 #chknginx } } #修改完成后 systemctl enable keepalived
- 在RS2上需要修改
state MASTER 修改為 state BACKUP
mcat_src_ip 改為自身RIP
priority 100 改為 99
HAproxy
概述
是一款高性能LB軟件,因為專注負載均衡,相比在七層上的NginxLB,他做的更好,更專業。其處理模式分為單進程模式和多進程模式,分別適應于CPU過剩和內存過剩環境
特點
- 1.支持tcp/http 兩種協議層的LB,使得LB功能非常豐富
- 2.支持8種LB算法
- 3.性能優秀
- 4.擁有一個出色監控頁面,實時亮節系統的當前情況
- 5.功能強大的ACL支持(ACL 訪問控制列表)
示例1
HAproxy
-
環境
- 三臺以上(此處三臺為例子)互相做好域名解析
- HAproxy IP: 192.168.1.2/24
- web1 IP: 192.168.1.3/24
- web2 IP: 192.168.1.4/24
-
操作步驟
- 1.安裝HAproxy
yum -y install epel-release yum -y install haproxy
- 2.配置HAproxy
global #全局配置 log 127.0.0.1 local3 info #日志配置 maxconn 4096 #最大連接限制(優先級低) uid nobody gid nobody daemon #守護進程運行 nbproc 1 #可生成的進程數 defaults #默認配置,無配置時啟用該配置 log global #日志使用全局配置 mode http #模式 maxconn 2048 #最大連接數(優先級中) retries 3 #健康檢查(此處若三此無應答則不可用) option redispatch #服務不可用后的操作(重定向到別的服務器) stats uri /haproxy #狀態模塊 stats auth aaa:123 #狀態模塊認證,可用此用戶名密碼來登錄網頁查看當前負載均衡狀態 contimeout 5000 #HA和RS請求超時時常 clitimeout 50000 #客戶端連接時常 srvtimeout 50000 #HA作為服務器和Cli的鏈接時長 frontend http-in #前端模塊,后名字隨意 bind 0.0.0.0:80 #面向用戶監聽的端口和地址 mode http #http模式的LB log global option httplog #使用httplog格式 option httpclose #防止產生多余的cookie信息 acl html url_reg -i \.html$ #訪問控制列表名稱html,規則要求url以html結尾 use_backend html-server if html #若滿足acl html規則,則推送給后端的服務器 htmlserver default_backend html-server #默認的后端服務器為html-server backend html-server #后端,后名字隨意 mode http #模式為http協議層 balance roundrobin #輪詢算法 opption httpchk GET /index.html #允許使用http協議檢查健康 cookie SERVERID insert indirect nocache #轉發CLI請求時插入cookie再轉給RS,若第二次訪問就把cookie除掉 server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5 #2000毫秒一次檢查甲亢 連續兩次測試通過視為有效,連續失敗5次則服務器宕機 server html-B web2:80 wight 1 cookie 3 check inter 2000 rise 2 fall 5
-
查看HAproxy的狀態
- 網址輸入http://haproxy/
組群的配置文件配置樣式參考
-
HAproxy_2
global log 127.0.0.1 local3 info maxconn 4096 uid nobody gid nobody daemon nbproc 1 defaults log global mode http maxconn 2048 retries 3 option redispatch stats uri /haproxy stats auth wing:123 contimeout 5000 clitimeout 50000 srvtimeout 50000 frontend http-in bind 0.0.0.0:80 mode http log global option httplog option httpclose acl php url_reg -i \.php$ acl html url_reg -i \.html$ use_backend php-server if php use_backend html-server if html default_backend html-server backend php-server mode http balance roundrobin option httpchk GET /index.php cookie SERVERID insert indirect nocache server php-A 192.168.122.30:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5 server php-B 192.168.122.40:80 weight 1 cookie 2 check inter 2000 rise 2 fall 5 #cookie 1 標識 serverid 為 1 #check inter 2000 #rise 2 #fall 5 backend html-server mode http balance roundrobin option httpchk GET /index.html cookie SERVERID insert indirect nocache server html-A 192.168.122.10:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5 server html-B 192.168.122.20:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
Nginx
概述
老熟人
特點和優缺點
- 特點
- 1.功能強大,性能卓越,運行穩定
- 2.配置簡單靈活
- 3.能夠自動剔除工作不正常的后端服務器
- 4.上傳文件需要使用異步模式
- 5.支持多種分配策略,可以分配權重,分配方式靈活
- 優點
- Nginx復制用戶請求在后端服務器出現問題是,nginx會再復制一份請求給另一臺后端服務器(LVS在這種情況下只能等待用戶重新發送請求)
- 缺點
- 流量會經過nginx,nginx會成為集群架構網絡效率的瓶頸
Nginx
配置
- 1.同步時間,域名解析,準備IP
- 2.配置Nginx
- yum -y install epel-release
- yum -y isntall nginx
- vim /etc/nginx/nginx.comf
upstream html { server web1:80 weight=1 max_fails=2 fail_timeout=2; server web2:80 weight=1 max_fails=2 fail_timeout=2; } upstream php{ server web3:80 weight=1 max_fails=2 fail_timeout=2; server web4:80 weight=1 max_fails=2 fail_timeout=2; } upstream server { location / { proxy_pass http://html; } location ~*\.php$ { proxy_pass http://php; } }
Nginx支持的狀態參數
- down 暫停對該服務器的調度
- backup 類似于LVS Sorry Server,當所有的非backup服務器掛了,則會抓發到這臺服務器
- max_fails 轉發請求失敗次數
- fail_timeout 在經歷max_fails次失敗后,暫停真實服務器的事件。
Nginx支持的負載均衡算法
- RR
- WRR
- ip_hash IP摘要,根據每個請求Ip進行調度,可以解決Session的問題,不能使用weight(同一個IP發往同一個服務器)
- fair 可以根據頁面的大小和加載時間長短進行調度,使用第三方的upstream_fair 模塊,需要加載第三方插件
- url_hash 按請求的url的hash進行調度,從而使每個url定向到同一個服務器,使用第三方的hash模塊