Linux LB 集群知识、如何用 LVS 方式实现 LB 集群?
LB負載均衡的目的是為了提高訪問的并發性和服務器的性能。實現 LB 的方式主要有軟件方式和硬件方式。軟件方式實現的軟件有LVS工作于傳輸層、nginx工作于應用層haproxy工作于傳輸層和應用層硬件方式實現的軟件有 BIG-IPF5,A10A10等。這里主要介紹軟件方式實現 LB。
lvs方式實現 LB原理部分
一、lvs介紹
lvsLinux Virtual Server,Linux虛擬服務是工作在第四層的一款軟件。是工作在內核的netfilter模塊上的類似于iptables的工作模型。它是一個前端調度器Director,由它來具體實現負載均衡。它的工作原理如下圖
幾個概念說明
cip請求客戶端的 ip 地址。
vip是lvs調度器的 ip 地址通常也是客戶端請求服務的的目標 ip 地址。
dip: 是directory和后端 real serveer 之間通信使用的 ip 地址。
rip: 是提供真正服務的real server的 IP 地址。
Director是lvs的前端調度器是ipvs的核心組件。
Real Server: 是后端真正提供服務的服務器。
lvs在內核中是由ipvs實現具體的數據包轉發包括軟發到后端那個real server、響應報文如何工作在netfilter的INPUT鏈上在此處決定是否進行數據包的轉發。可以使用ipvsadm工具配置 ipvs 規則。
二、lvs的調度算法(Scheduler)
調度算法是在Directory轉發集群數包的時候使用的具體算法目的是為了選擇哪個后端Real Server服務器。ipvs代碼必須提供的調度方法。
如何查看自己的內核是否支持ipvs功能以及支持的算法
常見的算法有如下
靜態方法僅考慮調度算法進行調度
RR: round robin、WRR: weighted 輪詢 、加權輪詢實現了起點公平。新的連接請求被輪流分配至各RealServer算法的優點是其簡潔性它無需記錄當前所有連接的狀態所以它是一種無狀態調度。輪叫調度算法假設所有服務器處理性能均相同不管服務器的當前連接數和響應速度。該算法相對簡單不適用于服務器組中處理性能不一的情況而且當請求服務時間變化比較大時輪叫調度算法容易導致服務器間的負載不平衡
SHSource Hash 源地址hash,目的是session保持。意義來源于同一源地址的CIP請求會被定向到同一RS。它根據請求的源IP地址作為散列鍵Hash Key從靜態分配的散列表找出對應的服務器若該服務器是可用的且未超載將請求發送到該服務器否則返回空。它采用的散列函數與目標地址散列調度算法的相同。除了將請求的目標IP地址換成請求的源IP地址外它的算法流程與目標地址散列調度算法的基本相似。在實際應用中源地址散列調度和目標地址散列調度可以結合使用在防火墻集群中它們可以保證整個系統的唯一出入口。
DH: Destination Hash 目標地址Hash。是針對目標IP地址的負載均衡但它是一種靜態映射算法通過一個散列Hash函數將一個目標IP地址映射到一臺服務器。目標地址散列調度算法先根據請求的目標IP地址作為散列鍵Hash Key從靜態分配的散列表找出對應的服務器若該服務器是可用的且未超載將請求發送到該服務器否則返回空。
動態方法根據調度算法和當前RS的負載情況進行調度,講究結果公平
LC: Least Connection 最少連接 如何監控一般情況是根據tcp協議的計數等相關信息判斷
??? Overhead = Active * 256 + Inactive 表示負載情況越小說明負載越小,會優先選擇
WLC: weigthed
??? Overhead = (Active * 256 + Inactive)/weight 默認機制
SED: shortest expection dalay 最短期望連接
??? Overhead = (Actived + 1)/weight目的是為了讓權重大的優先匹配。問題權重小的可能一直空的。
NQ: Never Quene 工作機制是先每一個 Real Server 都請求一次。
LBLC: locality-based Least connection
LBLCR:? Replicated LBLC,帶復制的LBLC
三、lvs的工作模型
工作模型可以這么理解就是 LB 的Real Server接收到報文到底以哪種方式響應給客戶端。lvs原生態支持的類型有NAT網絡地址轉換、DR直接路由、TUN隧道。
NAT模型的工作原理
nat特點 ? ? ?
1、RS使用私有地址網關為DIP ? ? ??
2、請求和響應都要經過direstor高負載時可能出現單點故障 ? ? ??
3、支持端口映射PNAT意思是director 和 real sever 的服務端口可以不在同一端口。 ? ? ??
4、RS可以使用任何操作系統
DR的原理大致如下
DR特點 ? ? ?
1、要保證前端路由將目標地址為VIP的報文統統發往Direstory,而不是RS ? ? ??
???? 1) 靜態地址綁定在前端路由器上配置一條靜態ARP地址解析將vip地址和DIP的MAC地址綁定。 ? ? ??
???? 2arptables?? 在realserver主機上設置arp解析規則只要收到vip地址的arp解析就不進行解析 ? ? ??
???? 3)修改RS的內核參數修改內核參數arp_ignore arp_announce實現比解析vip的mac地址 ? ? ??
??????? 此時還要在 Real Server 添加一條靜態路由來實現響應報文的源地址是vip
2、RS可以使用私有地址也可以使用公網地址 ? ? ?
3、RS跟Directory必須在同一物理網絡中。 ? ? ??
4、請求報文經過Directory,但響應報文必須不經過Directory. ? ? ??
5、不支持端口映射 ? ? ??
6、RS可以使常見的OS支持arptables ? ? ??
7、RS的網關不會指向DIP
TUN的大致原理
TUN特點IP隧道 將IP首部通過IP首部隧道傳送 ? ? ?
1、rip,vip,dip全部是公網地址 ? ? ??
2、rs的網關不會指向DIP ? ? ??
3、不支持端口映射 ? ? ??
4、請求報文經過Directory,但響應報文必須不經過Directory。 ? ? ??
5、各個real server 必須支持隧道
補充隨著互聯網的出現了lvs的第四種模型。
FullNat模型是基于NAT模型的擴展可實現局域網內可以有子網的情況。實現方式同時修改請求報文的源地址和目標地址。
NAT的優點1)可以隱藏內部rip地址安全2)配置簡單
四、ipvs配置工具ipvadm
ipvsadm是配置ipvs規則的工具和iptables類似。
常用的用法
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #?1、添加集群 ipvsadm?-A|E?-t|u|f?service-address?[-s?scheduler]?[-p?[timeout]]?[-M?netmask]?\ [--pe?persistence_engine] ????-A?添加集群??-E?修改集群 ????-t?tcp?協議??-u?udpx協議??-f?防火墻標記 ????service-address:指的是vip的地址 ????-s?指明調度算法默認是wlc #?2、刪除一個集群服務 ipvsadm?-D?-t|u|f?service-address #?3、清空所有的規則 ipvsadm?-C #?4、導入ipvs規則相當于ipvsadm-restore ipvsadm?-R? #?5、保存ipvs規則等價于?ipvsadm-save ipvsadm?-S?[-n] #6、將real?server?加入到定義好的集群服務中去 ipvsadm?-a|e?-t|u|f?service-address?-r?server-address?[options] ????-a?-e?添加、修改real?server到指定的集群中 ????-r?指定?real?server?的IP地址 #?7、刪除集群中的指定的real?sever ipvsadm?-d?-t|u|f?service-address?-r?server-address #?8、查看配置好的?ipvs?規則常與?-n?一起使用 ipvsadm?-L|l?[options] |
常與的option的有
| 1 2 3 4 | --gatewaying???-g?DR模型也是默認的lvs類型gatewaying --ipip????-i?TUN模型??ipip?encapsulation?(tunneling) --masquerading?-mNAT模型?masquerading?(NAT) -w?指明權重 |
四、防護墻標記和持久連接
1、防護墻標記
借助netfilter的mangle將作為集群服務的請求報文打標記在PREROUTING鏈上完成。這樣做的目的后者說是好處是只要是防火墻標記相同的就可以認為同一集群服務。例如在訪問web服務時有用http協議的也有用https協議的此時就需要在director處定義2個集群服務這樣可以實現功能。但是管理起來不方便防火墻標記就可以解決這樣的困擾。
具體做法(例如將http 和 https 服務定義成統一的集群服務)
1)iptables -t mangle -A PREROUTING -d {vip} -p tcp -m mulitport --dports 80 -j MARK --set-mark 10
2)基于mark定義集群服務
?? ipvsadm -A -f 10 -s rr
?? ipvsadm -a -f 10 -r {rip} -g -w 1
2、持久連接
持久連接是無論使用什么調度算法持久連接都能保證指定的一段時間內來自同一客戶端的請求始終低定向到同個RS,其調度基準是集群服務。持久連接時基于內核中的持久連接模板persistent template來實現的基于ssl點對點實現全程加密實現數據安全。
常見的持久連接類型
PCC:持久客戶端連接
在基于tcp或udp定義集群服務時其端口為0。表示將來自客戶端的所有請求都轉發到后端的RS。基于客戶端持久連接時來自同一個client的所有請求都被轉發到同一RS.
示例ipvsadm -A -t vip:0 -p 60 -p指定持久連接的時間
PPC:持久端口連接
僅針對某一特定的服務啟用的持久服務。單服務調度各個集群分開調度。
示例ipvsadm -A -t vip:80 -s rr -p 60
PFM:持久防火墻標記
持久防火墻標記單服務調度。可以通過防火墻標記來定義一個集群的多個端口。
示例ipvsadm -A -f 10 -p 60
實踐部分
一、示例NAT模型
實驗原理如下實驗實現的目標是實現通過訪問Director實現Discuz的訪問。真正實現的discuz服務地后端的Real Sever從而實現負載均衡的效果。此時就必須要有單獨的文件服務器和數據庫服務器分別來存儲像圖片等的非結構數據和像賬號、密碼等的結構化數據。
環境
操作系統CentOS 6.5 安裝在VMware虛擬機上
配置步驟
在172.16.10.16
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 一、配置NFS服務器 #?1、安裝客戶端軟件 yum?install?-y?nfs-utils #?2、提供共享目錄 mkdir?/data setfacl?-m?u:48:rwx?/data?-R?(id為48的用戶是rpm方式安裝httpd時的apache用戶) #?vim?/etc/exports /data/?172.16.0.0/24(rw) #?3、啟動服務 /etc/init.d/nfs?start #?以后使用?exports?-ar 二、安裝mysql #1、安裝mysql軟件這里使用rpm安裝 yum?install?mysql?mysql-sever?-y #?2、初始化數據庫這里不再詳細說明 #?3、授權用戶 mysql>?CREATE?DATABASE?discuz; mysql>?GRANT?ALL?ON?discuz.*?TO?discuz@'172.16.%.%'?IDENTIFIED?BY?'123456'; |
在172.16.10.22
| 1 2 3 4 5 6 7 | 一、配置ip地址和網關信息 #?臨時配置 ifconfig?eth0?172.16.10.22/16?up route?add?default?gw?172.16.10.9 #?也可使用永久配置如下 |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 二、部署discuz服務 #?1、安裝軟件 yum?install?httpd?php?php-mysql? #?2、掛載NFS服務 mount?-t?nfs?172.16.10.16:/data?/var/www/html #?解壓?discuz?源代碼將解壓后的upload目錄復制到此目錄 cp?upload?/var/www/html?-r #?修改屬主屬組 chown?apache.apache?/var/www/html/upload?-R #?3、安裝discuz #?不在詳述安裝時需要注意編碼問題和數據庫連接時的問題。其他可根據提示解決。 |
在172.16.10.33?
在172.16.10.33可參照172.16.10.22步驟可完成。
在Director 上172.16.10.9 192.168.1.66
| 1 2 3 4 5 | #?配置ipvs規則 ipvsadm?-A?-t?192.168.1.66:80?-s?rr ipvsadm?-a?-t?192.168.1.66:80?-r?172.16.10.22:80?-m?-w?1 ipvsadm?-a?-t?192.168.1.66:80??-r?172.16.10.33:80?-m?-w?1 |
注意real sever和director的172.16.10.9屬于同一局域網中在VMware中可以使用如下方式配置
配置完成驗證結果
二、示例DR模型
1、vip和rip在相同的網絡內
實驗原理圖如下實現的目標是web服務。
解釋
arp_announce:如何通告本地地址
??? 0表示有arp請求時會通告本機所有網卡的mac地址。 默認
??? 2 表示僅通過網絡直連的接口的地址
arp_ignore:表示如何響應接收到的arp請求
??? 0 表示請求的地址可以通過其他網卡響應? 默認。
??? 1 表示僅在請求的地址必須在請求報文接口進行響應
在172.16.10.33中
| 1 2 3 4 5 6 7 | ifconfig?eth0?172.16.10.22/16?up?#?這個也可以寫到配置文件 echo?1?>?/proc/sys/net/ipv4/conf/lo/arp_ignore echo?1?>?/proc/sys/net/ipv4/conf/all/arp_ignore echo?2?>?/proc/sys/net/ipv4/conf/lo/arp_announce echo?2?>?/proc/sys/net/ipv4/conf/all/arp_announce ifconfig?lo:0?172.16.10.20?netmask?255.255.255.255?broadcast?172.16.10.20 route?add?-host?172.16.10.20??dev?lo:0 |
在172.16.10.22中
此配置可參照172.16.10.33配置配置基本相同
在Director172.16.10.9 172.16.10.20中
| 1 2 3 | ipvsadm?-A?-t?172.16.10.20:80?-s?rr ipvsadm?-a?-t?172.16.10.20:80?-r?172.16.10.22:80?-g?-w?1 ipvsadm?-a?-t?172.16.10.20:80?-r?172.16.10.33:80?-g?-w?1 |
實驗結果
三、防火墻標記和持久連接
實驗拓撲圖如下,實驗實現的目的是:使用防火墻標記實現將80和443端口實現持久連接。
在192.168.1.201上
1、提供IP地址和網關
2、安裝軟件
httpd軟件和mod_ssl軟件
3、提供測試頁面和ssl證書
編輯/etc/httpd/conf.d/ssl.conf
4、啟動服務即可
在192.168.1.202上
在192.168.1.202上的配置于192.168.1.201類似ip地址和測試頁面不同。
在192.168.1.50172.16.0.50上
| 1 2 3 4 5 6 | iptables?-t?mangle?-A?PREROUTING?-d?172.16.0.50?-p?tcp?-m?multiport?\ --dports?80,443?-j?MARK?--set-mark?10 ipvsadm?-A?-j?10?-s?rr ipvsadm?-a?-f?10?-r?192.168.1.201?-m ipvsadm?-a?-f?10?-r?192.168.1.202?-m |
補充說明
如何獲得證書可以參照http://guoting.blog.51cto.com/8886857/1535032。這里說明一點的是RealServer1和RealServer2使用相同的證書。
結果說明
在訪問web服務時最主要的一個功能是會話保持 session如何利用lvs實現呢
此時只需要修改ipvs的規則如下
| 1 2 3 | ipvsadm?-A?-f?10?-s?rr?-p?60 ipvsadm?-a?-f?10?-r?192.168.1.201?-m?-w?1? ipvsadm?-a?-f?10?-r?192.168.1.202?-m?-w?1 |
此時在訪問到一個RealServer時會話會保持一段時間結果如下
至此所有配置完成。
本文轉自 羊木狼 51CTO博客,原文鏈接:http://blog.51cto.com/guoting/1550809,如需轉載請自行聯系原作者 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的Linux LB 集群知识、如何用 LVS 方式实现 LB 集群?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设置WPF窗口相对于非WPF窗口的位置
- 下一篇: vCenter6.0配置二:配置HA群集