天天看點

所謂的linux叢集-其實可以so easy

所謂的叢集知識—隻需要簡單的梳理

(圖可能較多,筆者喜歡用圖形的排版方式來梳理知識而告别繁瑣的文字)

   剛解除叢集,這東西龐而多雜的概念,各種叢集的架構:負載均衡、高可用、高性能等等,難免或讓人眼花缭亂。當然想要快速掌握他們,需要的隻是從簡單到複雜。那麼筆者同大家一起進行這些知識的梳理,告别繁瑣的文字的束縛,由淺入深,來一層一層剝離他們的關系。

如上圖,我們告别繁瑣的書面資訊(這些東西從哪裡來,怎麼得來,由誰搞出來等),先來大緻認識下叢集及其分類,大緻功能。這些掌握ok再去尋根問底。

LB負載均衡叢集詳解

定義(本人解釋方法):

1

2

<code>如果一台伺服器,某個時間點接受了N多使用者的請求,那麼它肯定會出現處理不了導緻響應緩慢的問題,而硬體提升伺服器太昂貴或者已經達到頂峰,那麼LB的作用就在這裡展現了。</code>

<code>當使用者(大量)請求到來時,由負載均衡器接收,而将這些請求分攤發放給由它管理的伺服器上。讓M多伺服器同時來承受這些使用者的請求(這些伺服器的功能是相同的也就好比同一台伺服器的影分身)。</code>

了解了他的大緻作用,來看下圖,它的分類

到這裡,我們大緻要對LB有個思維上的了解,那麼開始詳解他們的功能

四層LVS詳解:

LVS由前端的負載均衡器(Load Balancer,LB)和後端的真實伺服器(Real Server,RS)群組成。RS間可通過區域網路或廣域網連接配接。LVS的這種結構對使用者是透明的,使用者隻能看見一台作為LB的虛拟伺服器(Virtual Server),而看不到提供服務的RS群。

當使用者的請求發往虛拟伺服器,LB根據設定的包轉發政策和負載均衡排程算法将使用者請求轉發給RS。RS再将使用者請求結果傳回給使用者。同請求包一樣,應答包的傳回方式也與包轉發政策有關。

LVS轉發政策:三種模式

(ps:這裡我們需要說明一下具體的一些名詞:)

3

4

5

<code>Director:複制排程叢集的主機</code>

<code>VIP(virtual ip) 向外提供服務的IP</code>

<code>RIP(real ip)後端真正提供接點的ip</code>

<code>DIP(Director‘s ip)及負載均衡器(Loader balance,LB)上連接配接D</code><code>/RIP</code><code>的位址(向内部的IP通信的IP,在Director主機上)</code>

<code>CIP(custom ip)使用者請求的ip</code>

1、NAT 位址轉換

6

7

8

9

10

<code>1.叢集節點跟director(引向器)必須在同一個IP網絡中</code>

<code>2.RIP通常是私有位址,僅用于各叢集節點通訊</code>

<code>3.director位于client和real server之間,并負責處理進出的所有通信</code>

<code>4.realserver必須将網關指向DIP</code>

<code>5.支援端口映射</code>

<code>6.realserver可以使用任意作業系統(OS)</code>

<code>7.使用在較大規模應用場景中,director易成為系統瓶頸(進口出口都在DIP)</code>

<code>PS:</code>

<code>Director上隻需要一個網卡,然後利用别名來配置兩個IP:VIP和DIP。Director在接受到外部主機的請求的時候轉發給Real Server。</code>

<code>Real Server進行回複時,将請求先交給DIP,然後由VIP轉發給交換機實作通信。</code>

2、DR直接路由 (最常用的)

11

<code>1.叢集節點跟directr必須在同一個實體網絡中;</code>

<code>2.RIP可以使用公網位址,實作便捷的遠端管理和監控;</code>

<code>3.director僅負責處理入站請求,響應封包則由realserver直接發往用戶端;</code>

<code>4.realserver不能将網關指向DIP;</code>

<code>5.不支援端口映射;</code>

<code>6.realserver隐藏自己的DIP</code>

<code>Director如NAT模型</code>

<code>每個Real Server上都有兩個IP:VIP和RIP,但是VIP是隐藏的,隻是用來做請求回複的(暫時可以這麼了解)。</code>

<code>Director在接受到外部主機的請求的時候轉發給Real Server的時候并不更改目标位址,隻是進行一次封裝然後轉給Real Server</code>

<code>Real Server在接受到資訊以後拆除第一層封裝,并且丢掉,隻保留原始的SIP(CIP),然後直接回複給CIP</code>

3、TUN 隧道模型

這個模型跟DR模型有些相似,隻不過Real Server跟DIP不在同一實體網絡中。Real Server回複模式同DR模型相似。DIP向RIP傳送的時候同樣也是進行了一次包裝而裡面保留了CIP的SIP(source ip)。圖不在繼續畫。

<code>叢集節點可以跨越網際網路;</code>

<code>RIP必須是公網位址;</code>

<code>director僅負責處理入站請求,響應封包則由realserver直接發往用戶端;</code>

<code>realserver不能将網關指向DIP;</code>

<code>隻有支援隧道功能的OS才能用于realserver;</code>

<code>不支援端口映射</code>

LVS的排程算法

LVS是一個L4轉發,因為他是根據使用者請求的服務不同,提供轉發的,是以他是使用四層的端口進行轉發的,對使用者來說是透明的。

靜态排程方法

<code>rr:</code>

<code>輪叫,輪詢輪循着,它将請求依次配置設定不同的RS,也就是在RS中均攤請求。這種算法簡單,但是隻适合于RS處理性能相差不大的情況;</code>

<code>wrr:</code>

<code>Weight, 權重輪調,它将依據不同RS的權值配置設定任務。權值較高的RS将優先獲得任務,并且配置設定到的連接配接數将比權值較低的RS更多。相同權值的RS得到相同數目的連接配接數;</code>

<code>sh:</code>

<code>source</code> <code>hash</code><code>, 源位址</code><code>hash</code> <code>将來自同一個使用者的請求,始終轉發到特定的路由器或防火牆(平均内網負載),進而保證cookie與session等進行會話綁定;</code>

<code>dh:</code>

<code>destination </code><code>hash</code> <code>根據服務的請求轉發到特定的伺服器,跟使用者建立粘性,提高緩存命中率。主要用于緩存伺服器;</code>

動态排程方法

12

<code>lc:</code>

<code>(least-connect)最少連接配接,檢查active和inactive,連接配接數(overhead)最少的接受請求。公式:active*256+inactive 誰小給誰</code>

<code>wlc</code>

<code>(weight least-connect)權重最小連接配接數(叢集最好的算法),公式:(active*256+inactive)</code><code>/weight</code> <code>誰小給誰(權值表示伺服器的性能,越好權值越高。)預設</code>

<code>sed</code><code>:</code>

<code>shortest expected delay (SED)最短期望延遲(誰響應最快給誰),不考慮非活動狀态,在計算overhead之前,把非活動狀态的總數加上1 。公式:(active+1)*256</code><code>/weight</code>

<code>nq:</code>

<code>(never query)基于</code><code>sed</code><code>, 隻要有空閑的,不考慮算法的接受請求;</code>

<code>LBLC:</code>

<code>(locality-based-least-connect:DH)支援權重(Real server是緩存伺服器的),基于位址的最小連接配接數排程(Locality-Based Least-Connection) , 如果這台伺服器尚未滿負荷,将來自同一目的位址的請求配置設定給同一台RS(realserver),否則配置設定給連接配接數最小的RS,并以它為下一次配置設定的首先考慮;</code>

<code>LBLCR: (帶複制功能的最少連接配接)</code>

<code>(locality-based-least-connect with replication scheduling)是對LBLC的改進,對于某一目的位址,對應有一個RS子集。對此位址的請求,為它配置設定子集中連接配接數最小的RS;如果子集中所有的伺服器均已滿負荷,則從叢集中選擇一個連接配接數較小的伺服器,将它加入到此子集并配置設定連接配接(同時從本應連接配接的那台伺服器中複制過來使用者的資訊);若一定時間内,這個子集未被做任何修改,則将子集中負載最大的節點從子集删除;</code>

LVS的指令介紹

<code>ipvsadm:管理叢集服務的指令行工具,工作于使用者空間</code>

<code>ipvs:為lvs提供服務的核心子產品,工作于核心空間</code>

<code>PS:在linux核心2.4.23之前的核心中子產品預設是不存在的,需要自己手動打更新檔,然後把此子產品編譯進核心才可以正常使用:确定核心中是否有ipvs子產品,</code><code>grep</code> <code>-i </code><code>'ip_vs'</code> <code>/boot/config-2</code><code>.6.18-308.el5</code>

ipvsadm指令

ipvsadm 功能及使用:

<code>1.定義叢集服務預設方法:wlc</code>

<code>ipvsadm -A|-E -t|-u|-f VIP:PORT {tcp|udp|firewall mark} [-s scheduler排程算法]</code>

<code>-A 添加</code>

<code>-t: TCP協定的叢集</code>

<code>-u:UDP協定的叢集</code>

<code>service-address:IP:PORT</code>

<code>-f:FWM 防火牆标記</code><code>file</code> <code>ware mark</code>

<code>server-address: Mark Number</code>

<code>-E 修改</code>

<code>-D 删除</code>

<code>ipvsadm -D -t|-u|-f VIP:PORT 删除定義的叢集</code>

<code># ipvsadm -A -t 172.16.100.1:80 -s rr</code>

2.要為叢集服務定義realserver

13

14

<code>ipvsadm -a|-e -t|-u VIP:port -r REALSERVER:port -g|-i|-m(模型) [-w weitht]</code>

<code>-a 添加</code>

<code>-t|-u|-f service-address:實作定義好的某叢集服務</code>

<code>-r server-address: 某RS的位址,在NAT模型中,可使用IP:PORT實作端口映射</code>

<code>-e 修改</code>

<code>-w 權重</code>

<code>-d 删除</code>

<code>ipvsadm -d -t|-u VIP:port -r REALSERVER:PORT</code>

<code>-C 情況規則</code>

<code>-R 恢複</code>

<code>-S 儲存</code>

<code>其中模式中的-g|-i|-m分别用于dr|tun|nat</code>

<code># ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m</code>

<code># ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m</code>

3.檢視

<code>ipvsadm</code>

<code>-l|-L|--list</code>

<code>-n 數字的方式來顯示主機位址和端口号</code>

<code>--stats顯示統計的資料資訊</code>

<code>--rate 顯示統計的速率</code>

<code>--timeout: 顯示tcp、tcpin和udp的會話逾時時長</code>

<code>--</code><code>sort</code><code>:根據協定、位址和蹲坑進行排序</code>

<code>-c:顯示目前ipvs連接配接狀況</code>

<code>-Z: 清空,重新計數</code>

4.删除所有叢集服務

<code>-C:清空ipvs規則</code>

5.儲存規則

<code>-S</code>

<code># service ipvsadm save 在 /etc/sysconfig/ipvsadm.web</code>

<code>或者</code>

<code># ipvsadm -S &gt; /path/to/somefile</code>

<code>載入此前的規則:</code>

<code>-R</code>

<code># ipvsadm -R &lt; /path/from/somefile</code>

實驗:

由于實驗環境限制,将對NAT模型及DR模型進行示範。

由于實驗過程加起來有點長,本人将在後邊的部落格中進行貼出。此處留位子以便以後進行編輯。

HA高可用叢集詳解

什麼是高可用叢集

高可用叢集是指以減少服務中斷時間為目的的伺服器叢集技術。它通過保護使用者的業務程式對外不間斷提供的服務,把因軟體/硬體/人為造成的故障對業務的影響降低到最小程度。高可用叢集的應用系統有多樣化發展趨勢,用途也越來越多樣化,同時帶來了配置及可操作性方面的複雜性,是以選擇好的高可用軟體至關重要。

PS:上邊是學術界給出的說法,筆者覺得一句話就可以了:保證服務不間斷安全運作的方式。

少一點文字,直接上關系圖:

結合什麼是高可用叢集的概念與這張圖。大概可以劃分下其中大緻關系:

split-brain:腦裂:

腦裂擾亂心跳資訊的傳遞,叢集節點無法有效擷取其它節點的狀态資訊,産生腦裂

什麼是狀态資訊,他們怎麼傳播狀态資訊?

<code>節點A B為主從關系(1個挂掉由另外一個接替關系),但是為了更好的確定他們是否知道對方是否出現故障(挂掉),雙方(當然節點多的情況下你懂的)要進行通信(也就是發送狀态資訊),也可以将之稱之為(heartbeat),這個傳播的通道即為 Messaging Layer。</code>

<code>腦裂的後果之一:</code>

<code>搶占共享存儲:假如節點A B都連接配接到一台MySQL,如果A正在寫入資料到表中,但是突然發生了腦裂,B預設接收不到A的資訊自然會認為A壞掉了,進而接管A的位子,正式連接配接到MySQL,恰巧連接配接到了A正在寫入資料的表中,那麼雙方都在寫入,如果都進行存儲,勢必會發生檔案系統崩潰。當然如果是三個節點,ABC,如果AB可以通信。C他們都連接配接不到,那麼自然會認為是C壞掉了,然後幹掉C。</code>

避免腦裂的方式:

<code>1、在A和B之間連接配接一個硬碟,讓他們不停的往裡面寫資料,當檢測到對方停止寫資料時,自然認為他壞掉了。于是幹掉。</code>

<code>2、當節點為多節點的時候,可以引入“仲裁機制”:比如2個節點的場景,A節點性能好,給他2位的權位,B位1位的。如果通信不到,A就幹掉B。多節點的情況類似。</code>

<code>without_quorum_policy“法定票數”不夠仲裁的情況下:(根據權重票數分法不同)資源隔離裝置:</code>

<code>freeze:當機</code>

<code>stop:關閉停止</code>

<code>ignore:忽略,</code>

CRM: Cluster Resource Manager: 叢集資料總管(CRM是運作在節點上的)

搜尋每一個資源的狀态,來計算出來資源節點應該運作的級别上,DC。

<code>DC: Designated Coordinator : 指定的協調器(計算粘性的)</code>

<code>(DC:PE,TE)</code>

<code>PE:政策引擎 Policy Engine :得出結果</code>

<code>TE:事務引擎Transaction:指揮執行</code>

<code>LRM: Local Resource Manager: 本地資料總管</code>

<code>接受TE的指揮,進而在某個節點上運作</code>

<code>LSB:linux Standard Base 符合linux标準庫的腳本:</code>

<code>RA:Resource Agent資源代理(俗稱腳本)</code>

<code>RG:Resource Group 資源組(将VIP 和IPVS 定義在一個資源組)</code>

資源限制:Constraint (資源粘性)

<code>排列限制:coloationconstraint</code>

<code>資源是否能夠運作于同一節點</code>

<code>score:</code>

<code>正值:可以在一起負值:不能在一起</code>

<code>-inf:負無窮 inf:正無窮</code>

<code>位置限制:location constraint , score(分數)</code>

<code>正值:傾向于此節點</code>

<code>負值:傾向于逃離此節點</code>

<code>順序限制(order constraint)</code>

<code>定義資源啟動或關閉時的次序 VIP-IPVS</code>

,

本文轉自 陳延宗 51CTO部落格,原文連結:http://blog.51cto.com/407711169/1198120,如需轉載請自行聯系原作者