1 2 | 如果一臺服務器,某個時間點接受了N多用戶的請求,那麼它肯定會出現處理不了導致響應緩慢的問題,而硬件提升服務器太昂貴或者已經達到頂峯,那麼LB的作用就在這裏體現了。 當用戶(大量)請求到來時,由負載均衡器接收,而將這些請求分攤發放給由它管理的服務器上。讓M多服務器同時來承受這些用戶的請求(這些服務器的功能是相同的也就好比同一臺服務器的影分身)。 |
1 2 3 4 5 | Director:複製調度集羣的主機 VIP(virtual ip) 向外提供服務的IP RIP(real ip)後端真正提供接點的ip DIP(Director‘s ip)及負載均衡器(Loader balance,LB)上連接D /RIP 的地址(向內部的IP通信的IP,在Director主機上) CIP(custom ip)用戶請求的ip |
1 2 3 4 5 6 7 8 9 10 | 1.集羣節點跟director(引向器)必須在同一個IP網絡中 2.RIP通常是私有地址,僅用於各集羣節點通訊 3.director位於client和real server之間,並負責處理進出的所有通信 4.realserver必須將網關指向DIP 5.支持端口映射 6.realserver可以使用任意操作系統(OS) 7.使用在較大規模應用場景中,director易成爲系統瓶頸(進口出口都在DIP) PS: Director上只需要一個網卡,然後利用別名來配置兩個IP:VIP和DIP。Director在接受到外部主機的請求的時候轉發給Real Server。 Real Server進行回覆時,將請求先交給DIP,然後由VIP轉發給交換機實現通信。 |
1 2 3 4 5 6 7 8 9 10 11 | 1.集羣節點跟directr必須在同一個物理網絡中; 2.RIP可以使用公網地址,實現便捷的遠程管理和監控; 3.director僅負責處理入站請求,響應報文則由realserver直接發往客戶端; 4.realserver不能將網關指向DIP; 5.不支持端口映射; 6.realserver隱藏自己的DIP PS: Director如NAT模型 每個Real Server上都有兩個IP:VIP和RIP,但是VIP是隱藏的,只是用來做請求回覆的(暫時可以這麼理解)。 Director在接受到外部主機的請求的時候轉發給Real Server的時候並不更改目標地址,只是進行一次封裝然後轉給Real Server Real Server在接受到信息以後拆除第一層封裝,並且丟掉,只保留原始的SIP(CIP),然後直接回復給CIP |
1 2 3 4 5 6 | 集羣節點可以跨越互聯網; RIP必須是公網地址; director僅負責處理入站請求,響應報文則由realserver直接發往客戶端; realserver不能將網關指向DIP; 只有支持隧道功能的OS才能用於realserver; 不支持端口映射 |
1 2 3 4 5 6 7 8 | rr: 輪叫,輪詢輪循着,它將請求依次分配不同的RS,也就是在RS中均攤請求。這種算法簡單,但是隻適合於RS處理性能相差不大的情況; wrr: Weight, 加權輪調,它將依據不同RS的權值分配任務。權值較高的RS將優先獲得任務,並且分配到的連接數將比權值較低的RS更多。相同權值的RS得到相同數目的連接數; sh: source hash , 源地址 hash 將來自同一個用戶的請求,始終轉發到特定的路由器或防火牆(平均內網負載),從而保證cookie與session等進行會話綁定; dh: destination hash 根據服務的請求轉發到特定的服務器,跟用戶建立粘性,提高緩存命中率。主要用於緩存服務器; |
1 2 3 4 5 6 7 8 9 10 11 12 | lc: (least-connect)最少連接,檢查active和inactive,連接數(overhead)最少的接受請求。公式:active*256+inactive 誰小給誰 wlc (weight least-connect)加權最小連接數(集羣最好的算法),公式:(active*256+inactive) /weight 誰小給誰(權值表示服務器的性能,越好權值越高。)默認 sed : shortest expected delay (SED)最短期望延遲(誰響應最快給誰),不考慮非活動狀態,在計算overhead之前,把非活動狀態的總數加上1 。公式:(active+1)*256 /weight nq: (never query)基於 sed , 只要有空閒的,不考慮算法的接受請求; LBLC: (locality-based-least-connect:DH)支持權重(Real server是緩存服務器的),基於地址的最小連接數調度(Locality-Based Least-Connection) , 如果這臺服務器尚未滿負荷,將來自同一目的地址的請求分配給同一臺RS(realserver),否則分配給連接數最小的RS,並以它爲下一次分配的首先考慮; LBLCR: (帶複製功能的最少連接) (locality-based-least-connect with replication scheduling)是對LBLC的改進,對於某一目的地址,對應有一個RS子集。對此地址的請求,爲它分配子集中連接數最小的RS;如果子集中所有的服務器均已滿負荷,則從集羣中選擇一個連接數較小的服務器,將它加入到此子集並分配連接(同時從本應連接的那臺服務器中複製過來用戶的信息);若一定時間內,這個子集未被做任何修改,則將子集中負載最大的節點從子集刪除; |
1 2 3 | ipvsadm:管理集羣服務的命令行工具,工作於用戶空間 ipvs:爲lvs提供服務的內核模塊,工作於內核空間 PS:在linux內核2.4.23之前的內核中模塊默認是不存在的,需要自己手動打補丁,然後把此模塊編譯進內核纔可以正常使用:確定內核中是否有ipvs模塊, grep -i 'ip_vs' /boot/config-2 .6.18-308.el5 |
1 2 3 4 5 6 7 8 9 10 11 12 | 1.定義集羣服務默認方法:wlc ipvsadm -A|-E -t|-u|-f VIP:PORT {tcp|udp|firewall mark} [-s scheduler調度算法] -A 添加 -t: TCP協議的集羣 -u:UDP協議的集羣 service-address:IP:PORT -f:FWM 防火牆標記 file ware mark server-address: Mark Number -E 修改 -D 刪除 ipvsadm -D -t|-u|-f VIP:PORT 刪除定義的集羣 # ipvsadm -A -t 172.16.100.1:80 -s rr |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ipvsadm -a|-e -t|-u VIP:port -r REALSERVER:port -g|-i|-m(模型) [-w weitht] -a 添加 -t|-u|-f service-address:實現定義好的某集羣服務 -r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT實現端口映射 -e 修改 -w 權重 -d 刪除 ipvsadm -d -t|-u VIP:port -r REALSERVER:PORT -C 情況規則 -R 恢復 -S 保存 其中模式中的-g|-i|-m分別用於dr|tun|nat # ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m # ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m |
1 2 3 4 5 6 7 8 9 | ipvsadm -l|-L|--list -n 數字的方式來顯示主機地址和端口號 --stats顯示統計的數據信息 --rate 顯示統計的速率 --timeout: 顯示tcp、tcpin和udp的會話超時時長 -- sort :根據協議、地址和蹲坑進行排序 -c:顯示當前ipvs連接狀況 -Z: 清空,重新計數 |
1 | -C:清空ipvs規則 |
1 2 3 4 5 6 7 | -S # service ipvsadm save 在 /etc/sysconfig/ipvsadm.web 或者 # ipvsadm -S > /path/to/somefile 載入此前的規則: -R # ipvsadm -R < /path/from/somefile |
什麼是高可用集羣
1 2 3 | 節點A B爲主從關係(1個掛掉由另外一個接替關係),但是爲了更好的確保他們是否知道對方是否出現故障(掛掉),雙方(當然節點多的情況下你懂的)要進行通信(也就是發送狀態信息),也可以將之稱之爲(heartbeat),這個傳播的通道即爲 Messaging Layer。 腦裂的後果之一: 搶佔共享存儲:假如節點A B都連接到一臺MySQL,如果A正在寫入數據到表中,但是突然發生了腦裂,B默認接收不到A的信息自然會認爲A壞掉了,從而接管A的位子,正式連接到MySQL,恰巧連接到了A正在寫入數據的表中,那麼雙方都在寫入,如果都進行存儲,勢必會發生文件系統崩潰。當然如果是三個節點,ABC,如果AB可以通信。C他們都連接不到,那麼自然會認爲是C壞掉了,然後幹掉C。 |
1 2 3 4 5 6 | 1、在A和B之間連接一個硬盤,讓他們不停的往裏面寫數據,當檢測到對方停止寫數據時,自然認爲他壞掉了。於是幹掉。 2、當節點爲多節點的時候,可以引入“仲裁機制”:比如2個節點的場景,A節點性能好,給他2位的權位,B位1位的。如果通信不到,A就幹掉B。多節點的情況類似。 without_quorum_policy“法定票數”不夠仲裁的情況下:(根據權重票數分法不同)資源隔離設備: freeze:凍結 stop:關閉停止 ignore:忽略, |
1 2 3 4 5 6 7 8 9 | DC: Designated Coordinator : 指定的協調器(計算粘性的) (DC:PE,TE) PE:策略引擎 Policy Engine :得出結果 TE:事務引擎Transaction:指揮執行 LRM: Local Resource Manager: 本地資源管理器 接受TE的指揮,從而在某個節點上運行 LSB:linux Standard Base 符合linux標準庫的腳本: RA:Resource Agent資源代理(俗稱腳本) RG:Resource Group 資源組(將VIP 和IPVS 定義在一個資源組) |
1 2 3 4 5 6 7 8 9 10 | 排列約束:coloationconstraint 資源是否能夠運行於同一節點 score: 正值:可以在一起負值:不能在一起 -inf:負無窮 inf:正無窮 位置約束:location constraint , score(分數) 正值:傾向於此節點 負值:傾向於逃離此節點 順序約束(order constraint) 定義資源啓動或關閉時的次序 VIP-IPVS |