feisky
云計算纠脾、虛擬化與Linux技術(shù)筆記
posts - 1014, comments - 298, trackbacks - 1, articles - 1
博客園 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 訂閱 訂閱 :: 管理
公告
下載我的Android博客軟件:
訪問Feisky的Github博客
昵稱:feisky
園齡:9年1個月
粉絲:836
關(guān)注:5
+加關(guān)注
隨筆分類(623)
Android(43)
C/C++(34)
Docker(14)
Linux(150)
Linux kernel(34)
Matlab(5)
NoSQL(2)
OpenStack(45)
Python(16)
QT (26)
Visual C++(11)
Windows(4)
Xen(62)
個人管理(2)
個人日記(10)
機器視覺(19)
嵌入式系統(tǒng)(8)
軟件設(shè)計(12)
數(shù)據(jù)庫(3)
算法結(jié)構(gòu)(5)
圖像處理(11)
網(wǎng)絡(luò)(47)
虛擬化(25)
云計算(29)
職業(yè)規(guī)劃(6)
我的鏈接
Blogger
GitHub
Quora
twitter
wordpress
博客園
新浪微博
最新評論
- Re:粒子濾波概述
666
--LBJ木頭 - Re:Linux設(shè)備驅(qū)動開發(fā)詳解globalmem
你好替劈, 主設(shè)備號 我修改為100mknod /dev/globalmem c 100 0 之后顯示mknod: /dev/globalmem: File exists但是我 輸入 echo "hell......
--suxilong - Re:Neutron Networking QoS
原文中:這種方法其實是上面兩種方法的結(jié)合饲鄙,即還是在neutron中對外開放設(shè)置QoS接口眶掌,但把OVS的ingress_policing_rate等換成tc來實現(xiàn)個人認為摇幻,第三種方法跟前兩種本質(zhì)感覺并沒......
--菜鳥程序monkey - Re:開放的Modbus TCP(二)
各種零零碎碎的資料啊垒迂,還剛看到要modbus代碼的牵舵,如果只是簡單的了解了一些modbus基礎(chǔ)知識堂污,可能不夠系統(tǒng)和全面家肯。其實,modbus雖然比較簡單盟猖,但是如果不注意有很多坑讨衣,特別是寄存器的位數(shù),大小端......
--Magic2008 - Re:基于標準C語言的數(shù)字圖像處理基本框架
我感覺發(fā)現(xiàn)了新大陸
--歲月漫步
drbd中文應(yīng)用指南
Posted on 2011-12-25 17:54 feisky 閱讀(6957) 評論(1) 編輯 收藏
寫在前面的話:
為了方便學(xué)習(xí)式镐,將drbd的英文文檔翻譯出來反镇,以供學(xué)習(xí)和參考。但因為本人英語水平有限娘汞,以及對drbd的了解并不足夠深入愿险,翻譯中出現(xiàn)很多不通順或者是語病的地方,請大家諒解价说。如果問題可以反饋給15038051897@163.com辆亏,鄙人將在第一時間進行更正。
如果是學(xué)習(xí)外語文刊的翻譯鳖目,那么他的水平也僅僅是停留在翻譯者的水平扮叨,因此建議有實力的同學(xué)還是從官網(wǎng)獲取第一手信息。
可在http://download.csdn.net/source/3540203中下載相關(guān)PDF领迈,在這里很多的圖片無法顯示彻磁,請諒解碍沐!
劉運鋒
2011-08-22
一.關(guān)于本指南
本指南主要為分布式復(fù)制塊設(shè)備(DRBD技術(shù))的用戶提供一個簡明的參考指南和手冊。
DRBD是由LINBIT項目所在的公司贊助的衷蜓,免費累提,并比較有益處的DRBD技術(shù)社區(qū)。該指南在不斷的更新磁浇,以保持和(作者)新添加在DRBD技術(shù)新功能的信息的同步斋陪。在線的HTML本指南版本可以參見http://www.drbd.org/users-guide/。
重要
本指南可能有些段落包含“草稿”字樣置吓,是因為最近這些段落已增加了可能不是很權(quán)威的文檔說明无虚。歡迎廣大讀者反饋意見,以示對我們的鼓勵衍锚。郵箱地址為:drbd-user@lists.linbit.com友题。
本指南分五個部分和一個附錄:
第一部分,介紹“DRBD”:介紹DRBD技術(shù)的基本功能戴质。簡要概述DRBD技術(shù)在Linux I / O堆棧的DRBD技術(shù)的定位和基本DRBD技術(shù)概念另外還增加了被認為是DRBD技術(shù)的最重要特點度宦。
第二部分“DRBD技術(shù)編譯,安裝和配置”在源代碼中如何建立DRBD技術(shù)告匠,DRBD技術(shù)編譯安裝包戈抄,DRBD技術(shù)的集群系統(tǒng),以描述工作流程凫海。
第三部分“DRBD技術(shù)”用在如何管理DRBD技術(shù)呛凶,DRBD技術(shù)的源碼配置男娄,修改行贪,并介紹如何解決常見問題。
第四部分“DRBD技術(shù)應(yīng)用相結(jié)合”模闲,以增加存儲的復(fù)制如何利用的DRBD技術(shù)優(yōu)勢和應(yīng)用程序可用性建瘫。存活狀態(tài)的探測,以及在與群集管理器尸折,LVM和先進的組合的組合啰脚,整合DRBD LVM和GFS以實現(xiàn)高可用性,并添加到Xen虛擬化環(huán)境中。
第五部分“優(yōu)化DRBD性能”:DRBD的配置獲得最佳性能指南实夹。
第六部分橄浓,“關(guān)于DRBD技術(shù)更多學(xué)習(xí)”:DRBD的內(nèi)部原理的深入理解,還包含一些其他資源亮航。希望這本指南對讀者有用荸实。
最后,附錄A缴淋,DRBD技術(shù)系統(tǒng)手冊頁包含了Linux手冊分發(fā)給了最新版本的DRBD技術(shù)參考之用准给,網(wǎng)頁的在線版本泄朴。
對DRBD技術(shù)培訓(xùn)或支援服務(wù)感興趣的用戶請聯(lián)系sales@linbit.com。
第一篇 DRBD介紹
目錄
1.DRBD的基本功能
1.1內(nèi)核模塊
1.2用戶空間管理工具
1.3資源
1.4資源角色
2.DRBD的特點
2.1單主模式
2.2雙主模式
2.3復(fù)制模式
2.4多復(fù)制傳輸
2.5高效同步
2.6在線設(shè)備驗證
2.7復(fù)制傳輸完整性驗證
2.8裂腦通知和自動修復(fù)
2.9對磁盤緩沖的支持
2.10磁盤錯誤處理策略
2.11過期數(shù)據(jù)處理策略
2.12三路復(fù)制
2.13使用DRBD Proxy實現(xiàn)遠距離復(fù)制
2.14基于復(fù)制的傳輸
2.15浮動的對等節(jié)點
1.DRBD的基本功能
分布式復(fù)制塊設(shè)備(DRBD技術(shù))是一種基于軟件的露氮,無共享祖灰,復(fù)制的存儲解決方案,在服務(wù)器之間的對塊設(shè)備(硬盤畔规,分區(qū)局扶,邏輯卷等)進行鏡像。
DRBD鏡像數(shù)據(jù)
實時性:當(dāng)應(yīng)用對磁盤的數(shù)據(jù)進行修改時油讯,復(fù)制立即發(fā)生详民。
透明性:應(yīng)用程序的數(shù)據(jù)存儲在鏡像設(shè)備上是獨立和透明的牙勘,數(shù)據(jù)可存儲在不同的服務(wù)器上赞季。
同步鏡像和異步鏡像:同步鏡像,當(dāng)本地發(fā)申請進行寫操作進行時商叹,同步寫到兩臺服務(wù)器上兔综。異步鏡像饿凛,當(dāng)本地寫申請已經(jīng)完成對本地的寫操作時,開始對對應(yīng)的服務(wù)器進行寫操作软驰。
1.1內(nèi)核模塊
DRBD技術(shù)的核心功能是通過一個Linux內(nèi)核模塊實現(xiàn)的涧窒。具體來說,DRBD包含一個虛擬的塊設(shè)備锭亏,因此DRBD是位于“右底部附近的“一個系統(tǒng)的I/ O堆棧纠吴。正因為如此,DRBD極為靈活慧瘤,這使得它成為幾乎適合任何程序的一個高可用的塊復(fù)制解決方案戴已。
重要
DRBD技術(shù),顧名思義锅减,由Linux內(nèi)核架構(gòu)所支撐糖儡,它建立在不可知的層上面。因此怔匣,DRBD不可能添加了上層所具備的一些新特性握联。例如,DRBD技術(shù)不能自動檢測文件系統(tǒng)損壞或添加雙主動群集能力每瞒,像Ext3或者XFS文件系統(tǒng)金闽。
圖1.1 DRBD在Linux的I/O堆棧中的位置
1.2用戶空間管理工具
為了能夠管理和配置DRBD的資源,DRBD配備了一些管理工具與內(nèi)核模塊進行通信剿骨。
drbdadm:高層的DRBD程序管理套件工具代芜。它從配置文件/etc/drbd.conf中獲取所有配置參數(shù)。drbdadm為drbdsetup和drbdeta兩個命令充當(dāng)程序的前端應(yīng)用懦砂,執(zhí)行drbdadm實際是執(zhí)行的drbdsetup和drbdeta兩個命令蜒犯。
drbdsetup:drbdsetup可以讓用戶配置已經(jīng)加載在內(nèi)核中運行的DRBD模塊组橄,它是底層的DRBD程序管理套件工具。使用該命令時罚随,所有的配置參數(shù)都需要直接在命令行中定義玉工,雖然命令和靈活,但是大大的降低了命令的簡單易用性淘菩,因此很多的用戶很少使用debdsetup遵班。
drbdmeta:drbdmeta允許用戶創(chuàng)建、轉(zhuǎn)儲潮改、還原和修改drbd的原數(shù)據(jù)結(jié)構(gòu)狭郑。這個命令也是用戶極少用到。
1.3資源
在DRBD中汇在,資源是所有可復(fù)制移動存儲設(shè)備的總稱翰萨。這些措施包括:
資源名:資源名可以指定除了空格外us-ascii中的任意字符。
DRBD設(shè)備:DRBD的虛擬塊設(shè)備糕殉。它有一個主設(shè)備號為147的設(shè)備亩鬼,默認的它的次要號碼編從0開始。相關(guān)的塊設(shè)備需命名為/ dev/ drbdm阿蝶,其中M是設(shè)備的次要號碼雳锋。
備忘
早期的DRBD版本中,被“劫持”的NBD設(shè)備主號碼為43羡洁。這個很早就過時了玷过,147是LANANA-注冊的DRBD設(shè)備主號碼。
磁盤配置:DRBD內(nèi)部應(yīng)用需要本地數(shù)據(jù)副本筑煮,元數(shù)據(jù)辛蚊。
網(wǎng)絡(luò)配置:各個對等接點間需要進行數(shù)據(jù)通信。
1.4資源角色
在DRBD中咆瘟,每個節(jié)點都有自己的角色嚼隘,比如主或者備诽里。
備忘
這里屬于的選擇不是隨意的袒餐,這些角色的沒有被DRBD的作者命名為“主動”和“被動”。主和備的概念是依賴與存儲的可用性的谤狡,而主動和被動反應(yīng)的是一個應(yīng)用的可用性灸眼。通常情況下在高可用環(huán)境中主節(jié)點也往往是活動的節(jié)點,但是這不是必須的墓懂。
在主DRBD設(shè)備中可以進行不受限制的讀和寫的操作焰宣。他可用來創(chuàng)建和掛載文件系統(tǒng)、初始化或者是直接I/O的快設(shè)備捕仔,等等匕积。
在次DRBD設(shè)備中盈罐,接收所有來自對等節(jié)點的更新,但是與此同時也就完全拒絕了訪問闪唆。它即不能被應(yīng)用也不能被讀寫訪問盅粪。為次節(jié)不能被讀寫訪問是為了保持緩沖一致性,這就意味著次節(jié)點是不可能以任何形式被訪問的悄蕾。
人工干預(yù)和管理程序的自動聚類算法都可以改變資源的角色票顾。資源從次節(jié)點變?yōu)橹鞴?jié)點為升級,而反操作則成為降級帆调。
2.DRBD的特點
這一章主要介紹DRBD的各種有用的特性奠骄,并介紹關(guān)于這些特性一些背景信息。其中的一部分會對大多數(shù)的用戶很有用番刊,其他的就和具體的部署方式有關(guān)系含鳞。
,普通的行政任務(wù)與第7章、故障排除和差錯恢復(fù)含說明如何實現(xiàn)和使用這些功能,在日常操作芹务。
將在第6章的常見的管理任務(wù)和第7章故障排除和錯誤恢復(fù)民晒,介紹在日常操作管理中如何啟用和利用這些特性。
2.1單主模式
在單主模式下锄禽,任何資源在任何特定的時間潜必,集群中只存在一個主節(jié)點。正是因為這樣在集群中只能有一個節(jié)點可以隨時操作數(shù)據(jù)沃但,這種模式可用在任何的文件系統(tǒng)上(EXT3磁滚、EXT4、XFS等等)宵晚。
部署DRBD單主節(jié)點模式可保證集群的高可用性(fail-over遇故障轉(zhuǎn)移的能力)垂攘。
2.2雙主模式
這是DRBD8.0之后的新特性。
在雙主模式下淤刃,任何資源在任何特定的時間晒他,集群中都存在兩個主節(jié)點。猶豫雙方數(shù)據(jù)存在并發(fā)的可能性逸贾,這種模式需要一個共享的集群文件系統(tǒng)陨仅,利用分布式的鎖機制進行管理,如GFS和OCFS2铝侵。
部署雙主模式時灼伤,DRBD是負載均衡的集群,這就需要從兩個并發(fā)的主節(jié)點中選取一個首選的訪問數(shù)據(jù)咪鲜。這種模式默認是禁用的狐赡,如果要是用的話必須在配置文件中進行聲明。
可參見“啟用雙主模式”一節(jié)疟丙,了解有關(guān)啟用雙主模式的信息颖侄。
2.3復(fù)制模式
DRBD提供了三種不同的復(fù)制方式鸟雏,允許三種度的復(fù)制:
協(xié)議A:一旦本地磁盤寫入已經(jīng)完成,數(shù)據(jù)包已在發(fā)送隊列中览祖,則寫被認為是完成的 崔慧。在一個節(jié)點發(fā)生故障時,可能發(fā)生數(shù)據(jù)丟失穴墅,因為被寫入到遠程節(jié)點上的數(shù)據(jù)可能仍在發(fā)送隊列惶室。盡管,在故障轉(zhuǎn)移節(jié)點上的數(shù)據(jù)是一致的玄货,但沒有及時更新皇钞。這通常是用于地理上分開的節(jié)點。
協(xié)議B:一旦本地磁盤寫入已完成且復(fù)制數(shù)據(jù)包達到了對等節(jié)點則認為寫在主節(jié)點上被認為是完成的松捉。數(shù)據(jù)丟失可能發(fā)生在參加的兩個節(jié)點同時故障的情況下夹界,因為在飛行中的數(shù)據(jù)可能不會被提交到磁盤。
協(xié)議C:只有在本地和遠程節(jié)點的磁盤已經(jīng)確認了寫操作完成隘世,寫才被認為完成可柿。沒有任何數(shù)據(jù)丟失,所以這是一個群集節(jié)點的流行模式丙者,但I/O吞吐量依賴于網(wǎng)絡(luò)帶寬复斥。
簡言之:
A 數(shù)據(jù)一旦寫入磁盤并發(fā)送到網(wǎng)絡(luò)中就認為完成了寫入操作。
B 收到接收確認就認為完成了寫入操作械媒。
C 收到寫入確認就認為完成了寫入操作剔交。
就目前而言應(yīng)用最多和應(yīng)用最廣泛的為協(xié)議C冕香。
備忘
兩個因素影響你對復(fù)制模式的選擇:保護和延遲汉形。相比之下吞吐量很大決定了對復(fù)制模式的選擇武氓。
參見“配置你的資源”一節(jié),查看資源配置的復(fù)制模式的配置主儡。
2.4多復(fù)制傳輸
這個特性在DRBD8.2.7及以后的版本中可用奖唯。
DRBD的復(fù)制和同步框架套接字層支持多個級別的傳輸:
IPv4中的TCP協(xié)議:這是規(guī)范的實施方式,也是DRBD默認使用的糜值,可用于任何開啟IPv4協(xié)議的系統(tǒng)上丰捷。
IPv6的TCP協(xié)議:當(dāng)配置使用標準的TCP套接字用于復(fù)制和同步時,DRBD還可使用IPv6的網(wǎng)絡(luò)協(xié)議臀玄。雖然是不同于IPv4瓢阴,但是這是和使用IPv4的相當(dāng)?shù)摹?/p>
超級套接字:超級套接字取代TCP/IP的單一堆棧畅蹂,單片健无,高效和RDMA能夠用套接字實現(xiàn)。DRBD可使用該延遲較低的套接字類型液斜。超級套接字目前必須運行由單一供應(yīng)商(Dolphin互聯(lián)解決方案)提供的特定硬件設(shè)備上累贤。
2.5高效同步
(重新)同步不同于從設(shè)備上復(fù)制叠穆。復(fù)制發(fā)生于任何對主節(jié)點資源進行寫時,同步則往往伴隨寫臼膏。相反硼被,它則影響到整個設(shè)備。
不管什么理由:主節(jié)點失敗渗磅、次節(jié)點失效還是復(fù)制鏈接被中斷嚷硫,只要復(fù)制鏈接被中斷同步就是必須的。在這個意義上同步是有效的始鱼,DRBD不同步修改塊而保持塊的順序?qū)懽械ВS持它的線性秩序,這將會導(dǎo)致如下后果:
同步速度很快医清,因為這幾個連續(xù)的寫操作發(fā)生一次塊的同步起暮。
為保持塊同步在自然磁盤上的區(qū)塊分布,同步也是伴隨著磁盤磁道的尋找会烙。
數(shù)據(jù)的不一致性孩灯,因為在同步的過程中豌拙,數(shù)據(jù)在備用節(jié)點上部分過時或者部分被更新,這種數(shù)據(jù)狀態(tài)更稱為數(shù)據(jù)不一致性痛侍。
一個節(jié)點不能投入使用除呵,從而保證數(shù)據(jù)的不一致性保持盡量的短胸私。數(shù)據(jù)同步服務(wù)是在主節(jié)點上是不間斷的以后臺進程運行著的。
用下面的公式鳖谈,你可以簡單的估算出同步的時間:
公式2.1盖文。同步時間
tsync就是預(yù)期的同步時間。D是要同步的數(shù)據(jù)量蚯姆,你不可能對它有任何的影響的(這個數(shù)據(jù)由你的應(yīng)用程序修改而將復(fù)制鏈接打破而產(chǎn)生的)五续,R是同步的速度,這個是可以配置的龄恋,通過對復(fù)制的限制而控制網(wǎng)絡(luò)的吞吐量和I/O子系統(tǒng)的疙驾。
DRBD的同步效率可進一步提升對數(shù)據(jù)的消化,也就是校驗郭毕。當(dāng)使用校驗同步時它碎,不是強制執(zhí)行覆蓋標記不同的塊,而是同步他們之前所讀取的塊,在磁盤上計算出散列的內(nèi)容扳肛。然后比較這個來自對等節(jié)點的hash表傻挂,如果hash表匹配,則忽略重寫該區(qū)塊挖息。這樣就可以大大減少用于解決在斷開模式下文件系統(tǒng)重寫相同內(nèi)容的同步時間金拒。
參閱“配置同步速率”和“配置基礎(chǔ)校驗同步”二節(jié)的關(guān)于同步配置方面的建議。
2.6在線設(shè)備驗證
這個特性在DRBD8.2.5及以后版本中可用套腹。
在線設(shè)備驗證绪抛,用于可以在節(jié)點之間做一個非常有效的方式:逐塊逐塊得數(shù)據(jù)完整性檢查。
備忘
請注意电禀,“高效”這里是指網(wǎng)絡(luò)帶寬的高效幢码,并保證在任何情況下驗證不破壞冗余。在線驗證仍是一個資源密集型的操作尖飞,會明顯提升CPU利用率和負載症副。
它通過一個節(jié)點(驗證源)對每一個底層的設(shè)備的某一資源的塊存儲設(shè)備依次計算出一個加密摘要。接著傳輸DRBD摘要到對等節(jié)點(驗證目標)政基,對摘要對應(yīng)的本地副本塊進行驗證贞铣。如果兩個摘要不匹配,標示出塊不同進行同步腋么。由于DRBD傳輸?shù)闹皇钦韭Γ皇峭暾膲K,因此對網(wǎng)絡(luò)資源的要求比較低珊擂,從而提高了網(wǎng)絡(luò)帶寬的利用率圣勒。
這個過程被稱為在線驗證,因為它不要求驗證的DRBD資源在驗證時置為不可用摧扇。因此圣贸,盡快在線驗證需要消耗一部分資源,但是它不會造成服務(wù)的中斷或者是系統(tǒng)的中斷扛稽,而且在驗證的過程中也不影響后續(xù)同步的進行吁峻。
在線驗證可由常見本地cron調(diào)度服務(wù)調(diào)度在線驗證管理運行,比如一周一次或者是一個月一次在张。
參閱“利用在線設(shè)備驗證”信息一節(jié)用含,查看如何啟用、調(diào)用和自動在線驗證帮匾。
2.7復(fù)制傳輸完整性驗證
該特性在DRBD8.2.0及以后版本可用啄骇。
DRBD使用MD5、SHA-1或者是CRC-32C等加密算法對摘要信息進行終端到終端的信息完整性驗證瘟斜。
備忘
DRBD不提供這些信息摘要的算法缸夹,而是由linux的內(nèi)核的API提供痪寻,DRBD只是調(diào)用。因此DRBD利用的任何摘要算法需要系統(tǒng)內(nèi)核提供支持虽惭。
利用該特性橡类,DRBD對每一個復(fù)制到對等節(jié)點的數(shù)據(jù)塊都生成信息摘要,對等節(jié)點也采用同樣的方式對復(fù)制的數(shù)據(jù)塊進行完整性驗證芽唇。如果驗證信息不對顾画,則對等節(jié)點請求重新發(fā)送。這樣DRBD復(fù)制保護可以放置一些錯誤的資源披摄,所有這些亲雪,如果不檢查勇凭,將可能導(dǎo)致數(shù)據(jù)在復(fù)制的過程產(chǎn)生臟數(shù)據(jù):
排位錯誤(“位翻轉(zhuǎn)”)發(fā)生在主存儲器和網(wǎng)絡(luò)接口傳輸數(shù)據(jù)到對端時(比較常見的一個事實是數(shù)據(jù)在沒有通過TCP校驗就被丟到網(wǎng)卡上)
位翻轉(zhuǎn)發(fā)生在數(shù)據(jù)從網(wǎng)絡(luò)接口傳送到接受節(jié)點的主存儲器中時(原因同樣是TCP校驗丟棄)
因為競爭疚膊、網(wǎng)絡(luò)接口固件或者程序錯誤所產(chǎn)生的任何行形式的臟數(shù)據(jù)。
節(jié)點之間的被網(wǎng)絡(luò)組建組裝的位翻轉(zhuǎn)或隨機臟數(shù)據(jù)的注入(如果不使用直連而是后端到后端的連接)
參閱“配置完整性復(fù)制傳輸檢查”一節(jié)了解如果啟用復(fù)制傳輸完整性檢查虾标。
2.8裂腦通知和自動修復(fù)
在DRBD8.0及更高版本寓盗,可實現(xiàn)裂腦自動修復(fù)。裂腦自動修復(fù)在DRBD0.7中可用璧函,但是主要采取對新的主節(jié)點的修改采取拋棄的方式傀蚌,而且還是不可配置的。默認情況下自動裂腦修復(fù)在DRBD中是禁用的蘸吓。
裂腦通知從DRBD8.2.1之后開始可用善炫。
裂腦大部分情況下是由集群節(jié)點間的網(wǎng)絡(luò)連接臨時故障、集群軟件管理干預(yù)或者是人為錯誤库继,導(dǎo)致兩個節(jié)點都切換為主節(jié)點而斷開連接箩艺。這是一個潛在的有害狀態(tài),因為它意味著不能復(fù)制數(shù)據(jù)到對等節(jié)點宪萄,這樣就可能導(dǎo)致兩個節(jié)點的數(shù)據(jù)產(chǎn)生分歧艺谆,產(chǎn)生不可合并的分裂。
備忘
DRBD的裂腦不同于集群軟件的裂腦拜英,如Heartbeat静汤,是分布式集群的通過集群管理軟件管理的主機之間失去了所有的連接。本指南采用如下方式加以區(qū)分:
在該段的裂腦指的是DRBD的裂腦居凶。
采用集群失去所有連接作為集群裂腦的替代專業(yè)術(shù)語虫给。
當(dāng)DRBD探測到裂腦時可以設(shè)置自動通知(采用郵件或者是其他的方式)。參見“裂腦通知”一節(jié)了解更詳細的的信息侠碧,查看如何配置該特性抹估。
雖然一般情況下建議手工解決裂腦的問題,但是為了徹底的解決裂腦問題舆床,在某些情況下裂腦自動修復(fù)還是比較可取的棋蚌。DRBD有可利用一下方法解決該問題:
丟棄比較新的主節(jié)點的所做的修改嫁佳。在這種模式下,當(dāng)網(wǎng)絡(luò)重新建立連接并且發(fā)現(xiàn)了裂腦,DRBD就會丟棄自切換到主節(jié)點后所修改的數(shù)據(jù)。
丟棄老的主節(jié)點所做的修改训柴。在這種模式下鸽疾,DRBD將丟棄首先切換到主節(jié)點后所修改的數(shù)據(jù)。
丟棄修改比較少的主節(jié)點的修改侈沪。在這種模式下,DRBD會檢查兩個節(jié)點的數(shù)據(jù),然后丟棄修改比較少的主機上的節(jié)點蔬充。
一個節(jié)點數(shù)據(jù)沒有發(fā)生變化的完美的修復(fù)裂腦。在這種模式下班利,如果其中一臺主機的在發(fā)生裂腦時數(shù)據(jù)沒有發(fā)生修改饥漫,則可簡單的完美的修復(fù)并聲明已經(jīng)解決裂腦問題。需要注意的是罗标,這幾乎是不可能發(fā)生的一個情況庸队,即使是兩臺主機上的只掛載文件系統(tǒng)在DRBD塊設(shè)備上(設(shè)置是只讀的),設(shè)備的內(nèi)容也會被修改闯割,也就排除了自動修復(fù)的可能性彻消。
注意
自動裂腦自動修復(fù)能不能被接受取決于個人應(yīng)用≈胬考慮建立一個DRBD的例子庫宾尚。在“丟棄修改比較少的主節(jié)點的修改”興許對web應(yīng)用好過數(shù)據(jù)庫應(yīng)用。與此相反谢澈,財務(wù)的數(shù)據(jù)庫則是對于任何修改的丟失都是不能容忍的煌贴,這就需要不管在什么情況下都需要手工修復(fù)裂腦問題。因此需要在啟用裂腦自動修復(fù)前考慮你的應(yīng)用情況澳化。
參閱“自動修復(fù)裂腦策略”一章關(guān)于配置DRBD裂腦自動修復(fù)的策略的詳細信息崔步。
2.9對磁盤緩沖的支持
當(dāng)本地塊設(shè)備如磁盤或者是RAID邏輯磁盤啟用高速寫緩存時,一旦將寫緩存發(fā)回出來就告知磁盤寫“完成”缎谷【簦控制管制造商稱之為回寫模式,而相反的則成為wirte-through列林。如果在處在回寫模式時遇到停電的情況瑞你,則可能在發(fā)生此之前的回寫數(shù)據(jù)沒有來的及寫會磁盤,則可能造成數(shù)據(jù)的丟失希痴。
DRBD使用磁盤刷新來解決這個問題者甲。磁盤刷新是只有在完成相關(guān)數(shù)據(jù)穩(wěn)定存儲的一個寫操作,也就是說刷新是有些的寫入磁盤而不是緩存砌创。DRVD使用磁盤刷新用于寫操作完成其復(fù)制數(shù)據(jù)和原數(shù)據(jù)虏缸。實際上鲫懒,DRBD繞開寫入緩存是非常必要的,如在活動日志更新或隱寫后寫的執(zhí)法依賴刽辙。這就意味著及時在斷電的情況下也能保證其可靠性窥岩。
但是比較重要的是,DRBD的需要設(shè)置支持才能使用磁盤刷新宰缤。在新近比較合理的內(nèi)核中支持大多數(shù)的SCSI和STAT設(shè)備的磁盤刷新颂翼。Linux軟件RAID(md)中的RAID-1也支持磁盤刷新,所有組件所提供的設(shè)備也都支持磁盤刷新慨灭。這寫舍用也同樣適用于映射設(shè)備(LVM2朦乏、DM-raid、多路徑)等氧骤。
電池供電控制器的高速寫緩存(BBWC)使用電池備份他們的揮發(fā)性存儲呻疹。在這些設(shè)備上,當(dāng)電源供電恢復(fù)時语淘,在刷新前控制器將電池支持的最近高速寫緩存寫入磁盤诲宇,確保所有的寫入由不穩(wěn)定的存儲到穩(wěn)定的存儲上际歼。當(dāng)這些設(shè)備運行在DRBD上時惶翻,它可能支持禁用磁盤刷新,從而提高DRBD寫入性能鹅心。請參閱“禁用備用設(shè)備刷新”一些吕粗,查閱更詳細的信息。
2.10磁盤錯誤處理策略
如果某個節(jié)點作為DRBD的后端磁盤設(shè)備出現(xiàn)故障旭愧,DRBD可能把這個I/O錯誤傳遞給上層(通常是文件系統(tǒng))颅筋,或者DRBD可能對上層屏蔽了I/O錯誤。
Passing on I/O errors:如果DRBD被配置為 pass on I/O錯誤输枯,則任何底層設(shè)備的錯誤都會透明地傳遞給上層I/O層议泵。這樣,就由上層來處理錯誤(這會導(dǎo)致文件系統(tǒng)被重新掛載為read-only)桃熄。這個策略不保證服務(wù)持續(xù)性先口,并且對大多數(shù)用戶來說也不推薦。
Masking I/O errors:如果DRBD被配置為 detach 底層I/O錯誤瞳收,則DRBD將分離錯誤碉京。這個I/O錯誤被DRBD對上層屏蔽,并且DRBD透明地通過網(wǎng)絡(luò)從對端節(jié)點提取受影響的數(shù)據(jù)塊螟深。在這種情況下谐宙,DRBD被稱為運行在diskless模式,并處理所有相應(yīng)的I/O操作界弧,讀寫實際上都是發(fā)生在對端(不是本地)凡蜻。這種diskless運行模式會影響性能搭综,但是服務(wù)將繼續(xù)運行不受影響,并且可以從容地在一個合適的時間遷移到對端節(jié)點划栓。(這個方式有點類似 Soft RAID1设凹,當(dāng)鏡像磁盤發(fā)生故障時可以確保應(yīng)用繼續(xù)運行并提供恢復(fù)機會。)
參考配置I/O錯誤處理策略有關(guān)配置I/O處理策略的信息茅姜。
2.11過期數(shù)據(jù)處理策略
DRBD區(qū)別對待不一致(inconsistent)和過期(outdated)數(shù)據(jù)闪朱。
不一致數(shù)據(jù)是指不能被正確存取并且使用的數(shù)據(jù),一般例子是在某個節(jié)點上正在進行同步的數(shù)據(jù)钻洒,此時在這個節(jié)點上的數(shù)據(jù)是部分陳舊的奋姿,部分又是更新的。這種情況下素标,如果這個設(shè)備處理一個文件系統(tǒng)寓免,這個文件系統(tǒng)是不能掛載的,甚至不能通過自動的文件系統(tǒng)檢查阵谚。
過 期數(shù)據(jù),相反勘高,是指在第二個節(jié)點上的數(shù)據(jù)是一致的峡蟋,但是長時間沒有和主節(jié)點進行同步。這種情況發(fā)生在復(fù)制鏈路中斷华望,不論是臨時還是永久蕊蝗。數(shù)據(jù)是過期的,而 且斷開的第2個節(jié)點被認為是干凈的赖舟,只是狀態(tài)反映的是過去的某個時間蓬戚。為了避免服務(wù)使用過期數(shù)據(jù),DRBD不允許創(chuàng)建一個過期數(shù)據(jù)狀態(tài)的資源宾抓。
DRBD有一個接口在一個網(wǎng)絡(luò)中斷時允許一個擴展的應(yīng)用程序來處理第二節(jié)點的過期數(shù)據(jù)子漩。DRBD然后會拒絕該節(jié)點切換為主節(jié)點豫喧,這樣可以保護應(yīng)用程序不使用過期數(shù)據(jù)。一個完整實現(xiàn)這個功能的方案是Heartbeat cluster management framework(Heartbeat使用了從DRBD復(fù)制鏈路分離的一個通訊通道)幢泼。然而紧显,這個接口是通用的,并且可能適合任何集群管理應(yīng)用程序缕棵。
當(dāng)一個過期資源重新連接了復(fù)制鏈路孵班,則過期狀態(tài)將自動清除。一個后臺同步過程將自動開始招驴。
the DRBD outdate-peer daemon (dopd)介紹了DRBD/Heartbeat配置保護的案例重父。
2.12三路復(fù)制
從DRBD版本8.3.0開始提供三路復(fù)制。
當(dāng)使用三路復(fù)制忽匈,DRBD對一個已存在的2節(jié)點集群增加了一個第三節(jié)點房午,并復(fù)制數(shù)據(jù)到這個第三節(jié)點上,使用這個第三節(jié)點用于備份和災(zāi)難恢復(fù)丹允。
三路復(fù)制通過在一個已經(jīng)存在的處理生產(chǎn)數(shù)據(jù)的堆棧上增加另一個郭厌,基于堆棧的DRBD資源,類似以下圖示:
這個堆積起來資源是通過異步復(fù)制(DRBD protocol A)結(jié)合同步復(fù)制(DRBD protocol C)來實現(xiàn)的雕蔽。
三路復(fù)制可以永久使用折柠,此時第三節(jié)點從生產(chǎn)集群持續(xù)更新數(shù)據(jù)。并且批狐,也可以在需要是建立連接扇售,此時生產(chǎn)集群通常和備份站點斷開,周期性地啟動site-to-site同步(例如在每天晚上cron任務(wù))嚣艇。
這個構(gòu)架適合遠程災(zāi)備承冰,對于遠程鏡像可以采用異步方式。由于生產(chǎn)系統(tǒng)不需要等待遠程節(jié)點完成就可以繼續(xù)讀寫食零,遠程站點可以在后續(xù)逐步同步好存儲系統(tǒng)困乒。
2.13使用DRBD Proxy實現(xiàn)遠距離復(fù)制
DRBD版本8.2.7以上支持DRBD Proxy。
DRBD protocol A是異步實現(xiàn)的贰谣,不過寫應(yīng)用程序仍然會在socket輸出緩存耗盡后阻塞啄嚷А(查看 drbd.conf的sndbuf-size選項)蟆融。此時风范,寫應(yīng)用程序?qū)⒉坏貌坏却钡揭恍┑却龜?shù)據(jù)被緩慢地寫入遠程系統(tǒng)。
寫帶寬受限于網(wǎng)絡(luò)帶寬昙篙,寫入峰值只有在填入有限的socket輸出緩存才能有效處理秘豹。
可以通過DRBD proxy的緩存機制來解決這個問題携御。DRBD Proxy會吸收所有從主節(jié)點發(fā)出的DRBD數(shù)據(jù)到它的緩存中。DRBD Proxy的緩存大小是任意配置的,只受限于地址空間大小和可用的物理內(nèi)存因痛。
DRBD Proxy還可以配置在轉(zhuǎn)發(fā)數(shù)據(jù)時是否采用數(shù)據(jù)壓縮和解壓縮婚苹。DRBD的數(shù)據(jù)包壓縮和解壓縮可能可以輕微減少延遲。
建議在多內(nèi)核SMP系統(tǒng)上使用數(shù)據(jù)壓縮和解壓縮鸵膏。
實際上膊升,多數(shù)數(shù)據(jù)塊I/O數(shù)據(jù)壓縮是非常好的,可以有效減輕帶寬壓力谭企,甚至可以使用DRBD protocol B 和 protocol C廓译。
備忘
DRBD proxy屬于DRBD產(chǎn)品線,并且不是以開源licence發(fā)布债查,需要購買非区。
2.14基于復(fù)制的傳輸
Trunk based replication,稱為disk shipping盹廷,是預(yù)處理遠程站點的數(shù)據(jù)服務(wù)征绸,通過物理遞送方式把硬盤(存儲)運送到遠程站點。通常適合:
需要復(fù)制的數(shù)據(jù)非常巨大(超過數(shù)百G數(shù)據(jù))
數(shù)據(jù)的變化相對較小
站點間的網(wǎng)絡(luò)帶寬有限
在這種情況下如果不采用物理傳遞硬盤數(shù)據(jù)的方法俄占,則DRBD初始化同步時間過長管怠,而通過物理傳遞數(shù)據(jù)盤,可以大大減少初始化同步時間缸榄。
參考Using trunk based replication有關(guān)使用案例渤弛。
2.15浮動的對等節(jié)點
從DRBD 8.3.2開始提供浮動對端功能。
一些情況下DRBD需要使用浮動對端配置甚带。在浮動對端配置是她肯,DRBD的對端不是特定命名的主機,而是可以浮動的一系列主機鹰贵。在這種情況下晴氨,DRBD通過IP地址標識對端,而不是主機名砾莱。
參考在兩個基于SAN后端的Pacemaker集群間配置DRBD復(fù)制
第二篇 安裝和配置
目錄
- DRBD的編譯瑞筐,安裝和配置
3.1由LINBIT提供的軟件包
3.2由發(fā)行商提供的軟件包
3.2.1SUSE Linux 企業(yè)服務(wù)器(SLES)
3.2.2Debian GUN/Linux
3.2.3在CentOS
3.2.4在Ubuntu
4 源碼編譯和安裝DRBD
4.1下載DRBD源碼
4.2從DRBD源碼庫中簽出源碼
4.3從源碼編譯DRBD
4.3.1檢查編譯的條件
4.3.2準備內(nèi)核源碼樹
4.3.3準備DRBD的編譯樹
4.4DRBD的rpm包的創(chuàng)建
4.5創(chuàng)建DRBD的debian包
5 配置drbd
5.1準備底層存儲
5.2準備網(wǎng)絡(luò)配置
5.3資源的配置
5.3.1配置樣例
5.3.2global 部分
5.3.3Common部分
5.3.4Resource部分
5.4首次啟用資源
5.5初始化設(shè)備同步
5.6基于復(fù)制的傳輸
- DRBD的編譯,安裝和配置
3.1由LINBIT提供的軟件包
LINBIT是贊助DRBD項目的公司腊瑟,為商業(yè)用戶提供DRBD的二進制包。這些包在http://www.linbit.com/support/中可以找到块蚌,被認為是“官方”DRBD的基礎(chǔ)闰非。
它的發(fā)行版本如下:
這些支持以下發(fā)行版本:
紅帽企業(yè)的linux(RHEL),版本4和5
SUSE Linux企業(yè)操作系統(tǒng)(SLES)峭范,版本9财松、10和11
Debian GUN/linux操作系統(tǒng),版本4.0(etch)和5.0(lenny)
Ubuntu Server Edition LTS,版本6.06(Dapper Drake)和8.04(Hardy Heron)
LINBIT發(fā)布所有DRBD的新源碼包辆毡。
基于RPM包(SLES菜秦、RHEL)的安裝可以通過簡單的調(diào)用rpm -i (新安裝)或者是rpm –U (升級)對DRBD進行安裝。
對于基于Debian的系統(tǒng)(GUN/Linux舶掖,Ubuntu)球昨,Drbd8-utils和Drbd8-module 包的安裝使用dpkg -i 或者是gdebi(如果可用的話)。
3.2由發(fā)行商提供的軟件包
相當(dāng)數(shù)量的發(fā)布包包括DRBD眨攘,包括二進制的預(yù)編譯包主慰。支持這些編譯,如果有的話就是由發(fā)行商提供相關(guān)發(fā)布鲫售,他們釋放的周期往往落后于DRBD源碼的發(fā)行共螺。
3.2.1SUSE Linux 企業(yè)服務(wù)器(SLES)
在SLES7和10中包括DRBD0.7,在SLES11高可用擴展中包含DRBD8.2情竹。
在SLES藐不,DRBD通常是通過安裝軟件的安裝組件YaST2,捆綁在“高可用”軟件包中供選擇。
用戶通常使用簡單的命令行安裝:
yast -i drbd或者rug install drbd
3.2.2Debian GUN/Linux
自動5.0(Lenny)中包含DRBD8秦效,從Debian 3.1(sarge)中包含DRBD0.7雏蛮。
在Lenny中(現(xiàn)在已將DRBD預(yù)編譯在內(nèi)核中,不在需要使用module-assistan)棉安,可以通過如下安裝DRBD:
apt-get install drbd8-utils drbd8-module
在Debian3.1和4.0底扳,則必須通過如下命令安裝:
apt-get install drbd0.7-utils drbd0.7-module-source build-essential module-assistant
module-assistant auto-install drbd0.7
請參閱“創(chuàng)建DRBD的Debian包”一節(jié),有關(guān)涉及安裝以及module-assistant的詳細資料贡耽。
3.2.3在CentOS
CentOS 5中包含DRBD8衷模,CentOS 4中包含DRBD0.7
DRBD可以通過yum命令進行安裝(需要注意的是提要支持軟件倉庫)
yum install drbd kmod-drbd
3.2.4在Ubuntu
Ubuntu7.10(gusty gibbon)包含DRBD8,Ubuntu6.06(Dapper Drake)中包含DRBD0.7蒲赂≮逡保可以通過激活Ubuntu中的鏡像/etc/apt/sources.list,執(zhí)行如下命令獲取DRBD:
apt-get update
apt-get install drbd8-utils drbd8-module-source build-essential module-assistant
module-assistant auto-install drbd8
警告
Ubuntu 6.10(Edgy EFT)和7.04(Feisty Fawn)都包含DRBD8的預(yù)發(fā)行版滥嘴,這是從未在生產(chǎn)系統(tǒng)中正式使用的版本木蹬。Ubuntu也包含DRBD0.7,但是生產(chǎn)可適當(dāng)?shù)挠茫ǖ前姹疽呀?jīng)過期)若皱。
4 源碼編譯和安裝DRBD
4.1下載DRBD源碼
DRBD的歷史版本和當(dāng)前版本的壓縮包都可以從http://oss.linbit.com/drbd/上下載镊叁。按照慣例,DRBD的源碼包以drbd-x.y.z的方式命名走触,其中想晦譬,x,y,z對應(yīng)的為主、輔和錯誤的修正版本號互广。
DRBD壓縮包的大小不超過0.5M敛腌。要下載并解壓到當(dāng)前工作目錄卧土,可使用如下命令:
wget http://oss.linbit.com/drbd/8.3/drbd-8.3.4.tar.gz
tar -xzf drbd-8.3.4.tar.gz
備忘
上面wget下載的源碼只是一個例子,當(dāng)然你可以下載你喜歡的版本像樊。
建議將DRBD放到存放源代碼的普通目錄中尤莺,如/usr/src或者是/usr/local/src,本指南中假定在/usr/src目錄中生棍。
4.2從DRBD源碼庫中簽出源碼
DRBD的源碼保存在一個公共的Git庫中颤霎,可以在http://git.drbd.org/上瀏覽。要從庫中簽出DRBD的源碼足绅,就必須將DRBD釋放到庫中捷绑。這本例中簽出的為DRBD8.3:
git clone git://git.drbd.org/drbd-8.3.git
如果您的防火墻不允許TCP連接到9418端口,您也可以通過HTTP簽出(請注意氢妈,使用http協(xié)議要比Git簽出的方式慢的多粹污,因此建議盡量的使用Git簽出)。
git clone http://git.drbd.org/drbd-8.3.git
先創(chuàng)建一個命名為drbd-8.3的Git的簽出目錄首量,也就是將命令的文件夾的名字和簽出的源代碼的名字一致壮吩,可使用以下命令:
cd drbd-8.3
git checkout drbd-8.3.x
這里的X就代表你想簽出的DRBD的建立點。
簽出的目錄是和解壓后的指定版本的源代碼一樣的加缘,也就就是使用DRBd的源代碼了鸭叙。
備忘
實際上源代碼解壓和git簽出兩個來源之間還是有些細微的差別的:
git簽出包含一個debian/subdirectoy,而源代碼解壓卻沒有拣宏。這是因為debian版本的維護者要求加入的沈贝。
源代碼的tarball包含幫助手冊,而git不包含勋乾。雖然docbook不是源碼必須的宋下,但是git簽出需要一個完整的docbook手冊的地址。
4.3從源碼編譯DRBD
4.3.1檢查編譯的條件
在編譯DRBD的源碼前辑莫,機器必須符合一下條件:
make学歧,gcc:glibc的開發(fā)包,是flex scanner generator必須安裝的各吨。
備忘
必須保證使用的gcc編譯模塊運行在內(nèi)核上枝笨,如果系統(tǒng)中有多個版本的gcc,需要選擇特定版本的gcc揭蜒。
如果直接從git簽出的文件中編譯横浑,guncutoconf也是必須的。這個如果從源碼編譯這是不需要的屉更。
如果選擇運行一個stock kernel伪嫁,就需要安裝一個和之相匹配的預(yù)編譯的內(nèi)核頭文件包。這些通常命名為kernel-dev偶垮、kernel-headers、linux-headers或者類似的名字。這種情況下似舵,可以跳過“準備內(nèi)核源碼樹”一節(jié)脚猾,而進行“準備DRBD的編譯樹”一節(jié)。
如果選擇的不是stock kernel的(比如:系統(tǒng)運行在一個從源碼編譯配置的內(nèi)核上)砚哗,那么內(nèi)核的源文件則必須安裝龙助,則可編譯安裝和內(nèi)核源代碼版本匹配或者是相似的軟件包。
備忘
在以rpm為基礎(chǔ)的系統(tǒng)上蛛芥,這些軟件包命名類似于kernel-source-version.rpm的形式提鸟,這就很容易和kernel-version.src.rpm相混淆。而前者則是正確的DRBD編譯安裝包仅淑。
在kernel.org上“Vanlilla”內(nèi)核包命名的格式為linux-version-tar.bz2并應(yīng)該被解壓到/usr/src/linux-version中称勋,使用連接的方式指向/usr/src/linux的文件夾。
在這種情況下,編譯DRBD對應(yīng)的內(nèi)核源碼,則必要進行“準備內(nèi)核源碼樹”一節(jié)舵盈。
4.3.2準備內(nèi)核源碼樹
必須在解壓后的內(nèi)核源碼所在的目錄準備建立DRBD的源代碼樹寞奸,通常情況下,這個目錄為/usr/src/linux-version洛姑,或者是就是一個連接名為/usr/src/linux的目錄。
cd /usr/src/linux
接下來的為建議的步驟而不是必須的。務(wù)必復(fù)制現(xiàn)有的.config文件到一個安全的位置揩瞪,在這一步的基礎(chǔ)上初始化內(nèi)核源碼樹,消除之前編譯和配置的影響:
make mrproper
接下來就可以復(fù)制當(dāng)前運行的配置文件到內(nèi)核源碼樹篓冲,下面有些選項需要選擇:
通過/proc將最近內(nèi)核的合理配置輸出到當(dāng)前正在運行的內(nèi)核配置文件中李破,可以進行復(fù)制,如下:
zcat /proc/config.gz > .config
在SUSE的內(nèi)核上包含一個cloneconfig target纹因,所在這這類系統(tǒng)上喷屋,操作如下:
make cloneconfig
一些安裝將內(nèi)核配置文件安裝到/boot下,這就需要:
cp /boot/config-uname -r
.config
最后瞭恰,你可以將已經(jīng)配置好的文件拷貝到當(dāng)前運行的內(nèi)核中運行屯曹。
4.3.3準備DRBD的編譯樹
任何DRBD的編譯都需要先配置DRBD的源碼樹和腳本:
備忘
本節(jié)中所提到的適用于DRBD8.3.6及以上的版本。一直到DRBD8.3.5還沒有配置腳本惊畏。
當(dāng)編譯git簽出的源碼時恶耽,配置腳本也是不存在的,因此必須先簽出它才行颜启。
可以使用—help查看配置幫助文件列表偷俭。在下面的表格中總結(jié)了些比較重要的選項:
表4.1 DRBD所支持的配置選項
選項
描述
默認
備注
--prefix
安裝路徑的選項
/usr/local
這是默認的文件系統(tǒng)標準的無包裝軟件的安裝路徑,包裝軟件一般覆蓋/usr
--localstatedir
目錄狀態(tài)定位路徑
/usr/local/var
即使有默認的prefix缰盏,但大多數(shù)用戶還是想重寫/var
--sysconfdir
系統(tǒng)配置路徑
/usr/local/etc
即使有默認的prefix涌萤,但大多數(shù)用戶還是想在/etc下
--with-km
編譯DRBD的內(nèi)核模塊
無
在編譯DRBD內(nèi)核模塊時開啟此選項
--with-utils
編譯DRBD集成userland工具
yes
當(dāng)編譯一個新的內(nèi)核版本的DRBD淹遵,而不同時升級DRBD,禁用次選項
--with-heartbeat
編譯DRBD集成 Heartbeat
yes
如果不適用DRBD的heartbeat v1 資源代理或dopd负溪,則可禁用該選項
--with-pacemaker
編譯DRBD集成 Pacemaker
yes
如不打算啟用Pacemaker功能透揣,則可禁用該選項
--with-rgmanager
編譯DRBD集成 紅帽集群套件
no
如想適用DRBD整合紅帽幾圈套件的rgmanager,這需要啟用該選項
--with-xen
編譯DRBD集成Xen
yes (在X86平臺上)
如果不打算集成Xen模塊川抡,則可禁用該選項
--with-bashcompletion
編譯可編程的bashdrbdadm
yes
如果使用其他的bash的shell辐真,或者不想利用可編程的drbdadm,這可禁用該選項
--enable-spec
創(chuàng)建一個rpm spec文件
no
僅對包的編譯者:如果想創(chuàng)建一個rpm spec崖堤,可啟用該選項侍咱。見“編譯DRBD的RPM”一節(jié)
配置腳本將建立使用符合需求的DRBD。它通過自動檢測所調(diào)用的參數(shù)對DRBD進行配置密幔,因此在配置相應(yīng)的參數(shù)時楔脯,要小心重寫默認的選項。
配置腳本在被調(diào)用的目錄中創(chuàng)建一個日志文件名為config.log老玛。在記錄編譯時的問題時淤年,也比較智能話的記錄整個編譯的過程。
4.4DRBD的rpm包的創(chuàng)建
備忘
本節(jié)中所提到的適用于DRBD8.3.6及以上的版本蜡豹。一直到DRBD8.3.5還是用不同的rpm安裝的方法麸粮。
DRBD的安裝包含一個直接以安裝rpm出DRBD的源代碼樹體系。為創(chuàng)建rpm包镜廉,這部分叫做“檢查創(chuàng)建的前提條件”適用于以上同樣make安裝的方式弄诲,除非你還需要rpm的創(chuàng)建工具。
另外娇唯,如果你是創(chuàng)建與內(nèi)核中可用的預(yù)編譯頭的方式齐遵,可以參見“準備內(nèi)核源代碼樹”一節(jié)。
有兩種方案創(chuàng)建rpm包塔插。簡單的方法是簡單在頂層makefile調(diào)用rpm目標文件:
$ ./configure
$ make rpm
$ make km-rpm
這種方法是將自動從預(yù)先定義的模板生成spec文件梗摇,然后利用這些模板文件,建立二進制的rpm包想许。
生成Rpm的方式生成大量的rpm包:
表4.2伶授。 DRBD技術(shù)的userland RPM包
包名
描述
依賴關(guān)系
備注
drbd
DRBD 元軟件包
其他所有的 drbd-* 軟件包
頂層的虛擬包。安裝時流纹,在所有其他的userland作為依賴包中提取糜烹。
drbd-utils
二進制管理使用程序
DRBD啟用需要
drbd-udev
udev的集成設(shè)施
drbd-utils, udev
啟用udev來管理用戶友好連結(jié)到DRBD設(shè)備
drbd-xen
Xen DRBD helper scripts
drbd-utils, xen
Enables xend to auto-manage DRBD resources
drbd-heartbeat
DRBD Heartbeat integration scripts
drbd-utils, heartbeat
Enables DRBD management by legacy v1-style Heartbeat clusters
drbd-pacemaker
DRBD Pacemaker integration scripts
drbd-utils, pacemaker
Enables DRBD management by Pacemaker clusters
drbd-rgmanager
DRBD Red Hat Cluster Suite integration scripts
drbd-utils, rgmanager
Enables DRBD management by rgmanager, the Red Hat Cluster Suite resource manager
drbd-bashcompletion
Progammable bash completion
drbd-utils, bash-completion
Enables Programmable bash completion for the drbdadm utility
另外一種是更靈活的方法是配置并生成spec文件,你可以進行任何你所需要的更改漱凝,然后使用rpmbuild命令生成:
$ ./configure --enable-spec
$ make tgz
$ cp drbd*.tar.gz rpm -E _sourcedir
$ rpmbuild -bb drbd.spec
如果你要建立drbd的公用用戶空間和內(nèi)核模塊的rpm疮蹦,使用:
$ ./configure --enable-spec --with-km
$ make tgz
$ cp drbd*.tar.gz rpm -E _sourcedir
$ rpmbuild -bb drbd.spec
$ rpmbuild -bb drbd-km.spec
這種方式將被創(chuàng)建在rpm 配置(或個人的rpmmacros配置)的地方
當(dāng)創(chuàng)建這些軟件包后,你可以安裝茸炒、升級和卸載系統(tǒng)中的任何其他的rpm包愕乎。
請注意任何內(nèi)核的升級都需要生成心的drbd-km包以匹配新的內(nèi)核阵苇。
當(dāng)升級drbd到一個新版本時,只需要創(chuàng)建新的drbd userland 包妆毕。然而當(dāng)升級新的內(nèi)核和新的drbd版本時慎玖,則需要同時升級包。
4.5創(chuàng)建DRBD的debian包
DRBD創(chuàng)建系統(tǒng)包含一個直接從DRBD源代碼樹建立出的Debian包笛粘。可參見“檢查建立的前提條件”一節(jié)建立debian軟件包湿硝,除了需要dpkg-dev包含debian軟件包工具和fakeroot包(如果想非root用戶建立DRBD—強烈推薦)薪前,基本上和建立并使用make安裝的方式是一樣的。
另外关斜,如果你是創(chuàng)建與內(nèi)核中可用的預(yù)編譯頭的方式示括,可參見“準備內(nèi)核源代碼樹”一節(jié)。
DRBD源代碼書包含一個debian軟件包所需文件的debian子目錄痢畜。但是這個子目錄并不在DRBD的tar包內(nèi)垛膝,因此如果需要時則需要創(chuàng)建一個特定的git,將其簽出丁稀。
可以使用一下命令簽出DRBD的debian軟件包:
dpkg-buildpackage -rfakeroot -b -uc
備忘
如編譯drbd的軟件包使用非root用戶(-rfakeroot)以二進制的方式(-b)吼拥,并禁用變更文件的簽名。其他的編譯選項可以參見dpkg-buildpackage手冊线衫。
這個創(chuàng)建的過程將創(chuàng)建兩個debian的軟件包:
命名為drbd8-utils_x.y.z-BUILD_ARCH.deb凿可,drbd的用戶控件工具
命名為drbd8-module-source_x.y.z-BUILD_all。Deb授账,源代碼匹配包枯跑。
當(dāng)你創(chuàng)建這些軟件包后,就可以安裝白热、升級或者是卸載他們敛助,就像其他的Debian軟件包一樣。
通過debian的模塊兒輔助功能屋确,從源碼包中編譯和安裝drbd的實際的內(nèi)核模塊兒是比較容易的:
module-assistant auto-install drbd8
也可以使用上面命令的簡寫模式:
m-a a-i drbd8
需要注意的是任何內(nèi)核的升級都需要重新編譯其內(nèi)核模塊兒(如模塊輔助)來匹配新的內(nèi)核纳击。相比之下Drbd8-utils和drbd8-module-source 源碼包,則只需要升級到新的drbd版本乍恐。無論是升級到新的內(nèi)核還是新的drbd版本评疗,都需要升級以上兩個軟件包。
5 配置drbd
5.1準備底層存儲
安裝過drbd之后茵烈,就必須在集群的兩個節(jié)點上預(yù)留一個大小一致的存儲區(qū)域百匆。這將是drbd的底層的設(shè)備∥赝叮可以使用系統(tǒng)中任何型號的塊設(shè)備達到次目的加匈。典型的例子包括:
一個磁盤分區(qū)(或一個完成的物理磁盤)
軟RAID設(shè)備
LVM邏輯卷或者其他有l(wèi)inux的device-mapper基礎(chǔ)塊設(shè)備
EVMS
服務(wù)器上的其他任何類型的塊設(shè)備存璃。DRBD8.3及以上的版本,也可以使用資源堆放雕拼,也就意味著可用一個drbd設(shè)備為其他的一個底層的設(shè)備纵东,一些特殊的也可以考慮資源堆放,可參見“創(chuàng)建一個三節(jié)點設(shè)置”了解詳細的配置介紹啥寇。
備忘
DRBD雖然也可以使用loop設(shè)備作為底層的設(shè)置偎球,但是因為其有死鎖的問題,因此并不推薦辑甜。
創(chuàng)建drbd資源前并不要求該存儲區(qū)是空的衰絮。事實上,它是一種常見從以前的兩個非冗余單節(jié)點的服務(wù)器磷醋,使用drbd創(chuàng)建兩個節(jié)點的集群猫牡。(如打算這樣做的話,請參閱“DRBD源數(shù)據(jù)”一節(jié)邓线,了解一些注意事項淌友。)
在本指南中,我們假設(shè)為一個很簡單的設(shè)置:
兩臺主機都有空閑的分區(qū)/dev/sda7
我們正在使用內(nèi)部元數(shù)據(jù)
5.2準備網(wǎng)絡(luò)配置
建議運行DRBD復(fù)制在專用鏈接環(huán)境下骇陈,雖然沒有嚴格的要求震庭。本指南建議最合理的選擇為直接的、千兆G太網(wǎng)絡(luò)連接缩歪。如果你通過交換里連接DRBD归薛,建議使用冗余組建和linux綁定卻東程序(主動備份模式)。
一般情況下不建議通過路由器運行drbd復(fù)制匪蝙,因為通過路由器的方式表現(xiàn)出明顯的缺點(影響吞吐量并造成延遲)主籍。
考慮本地防火墻的因素,drbd建議采用單獨的逛球、可配置TCP7788以上的端口千元,但不變的是TCP端口上偵聽的TCP資源。DRBD使用兩個單獨的TCP連接(任何方向之一)對資源進行配置颤绕。對于正確的使用DRBD功能幸海,必須讓防火墻運行這些連接的進行。
比防火墻更安全的方式為強制訪問控制(MAC)奥务,如啟動selinux或者是appmrmor物独。因此需要調(diào)整本地的安全策略來適應(yīng)DRBD功能的運行。
自然需要保證DRBD所使用的端口沒有被其他的程序所占用氯葬。
備忘
DRBD資源不可能支持多個TCP連接便锨。如果想讓DRBD連接實現(xiàn)負載均衡或者是冗余偎蘸,建議在比較容易實現(xiàn)的以太網(wǎng)級別進行(再次使用bongding設(shè)備)蛤铜。
在本指南中,我們假設(shè)為一個很簡單的設(shè)置:
兩個DRBD主機分別有一個未啟用的網(wǎng)絡(luò)接口eth1秽澳,給他他們分別配置ip地址10.1.1.31和10.1.1.32.
在兩臺主機上都沒有其他程序占用TCP端口7788和7799
本地防火墻配置允許兩臺機器通過這些TCP端口的進和出
5.3資源的配置
DRBD的所有的控制都是在配置文件/etc/drbd.conf中。通常情況下配置文件包含如下內(nèi)容:
include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/*.res";
通常情況下戏羽,/etc/drbd.d/global_common.conf包含global和common的DRBD配置部分担神,而.res文件都包含一個資源的部分。
在一個單獨的drbd.conf文件中配置全部是可以實現(xiàn)的始花,但是占用的配置很快就會變得混亂妄讯,變得難以管理,這也是為什么多文件管理作為首選的原因之一衙荐。
無論采用哪種方式捞挥,需必須保持在各個集群節(jié)點的drbd.conf以及其他的文件完全相同。
在drbd的源代碼包的腳本子目錄中包含配置文件的樣例忧吟。如二進制安裝包直接將其安裝在/etc或者是包中特定的樣例目錄/usr/share/doc/packages/drbd中。
備忘
DRBD資源不可能支持多個TCP連接斩披。如果想讓DRBD連接實現(xiàn)負載均衡或者是冗余溜族,建議在比較容易實現(xiàn)的以太網(wǎng)級別進行(再次使用bongding設(shè)備)。
本節(jié)只介紹這些為了保證drbd運行的必須了解的配置文件相關(guān)的方面垦沉。配置文件的語法和內(nèi)容都相繼的記錄在drbd.conf(5)中煌抒。
5.3.1配置樣例
在本指南中,我們假設(shè)為一個很簡單的設(shè)置:
global {
usage-count yes;
}
common {
protocol C;
}
resource r0 {
on alice {
device /dev/drbd1;
disk /dev/sda7;
address 10.1.1.31:7789;
meta-disk internal;
}
on bob {
device /dev/drbd1;
disk /dev/sda7;
address 10.1.1.32:7789;
meta-disk internal;
}
}
該配置樣例做一下詳解:
選擇參與drbd的使用情況統(tǒng)計(見下文)
資源配飾使用完全同步復(fù)制協(xié)議(Protocol C)厕倍,除非另有明確指定寡壮。
集群包含兩個節(jié)點。Alice和Bob
資源命名為r0讹弯,并使用底層設(shè)備/dev/sda7况既,并與內(nèi)部原數(shù)據(jù)配置資源
資源使用網(wǎng)絡(luò)TCP連接端口7789,并分別綁定在ip地址10.1.1.31和10.1.1.32上
5.3.2global 部分
在配置文件中這部分只允許出現(xiàn)一次组民,他通常在/etc/drbd.d/global_common.conf文件中棒仍。在單一的配置文件中,他應(yīng)該置頂臭胜。在本節(jié)提供的幾個選項中莫其,只有一個是大多數(shù)用戶相關(guān)。
usage-count.DRBD用于統(tǒng)計應(yīng)用各個版本的信息耸三。當(dāng)新的版本的drbd被安裝就會和http server進行聯(lián)系乱陡。當(dāng)然也可以禁用該選項,默認情況下是啟用該選項的仪壮。
備忘
DRBD使用統(tǒng)計數(shù)據(jù)是公開的憨颠,可以參見http://usage.drbd.org
5.3.3Common部分
該本分提供一個快捷的方式來定義配置每個可繼承的資源,它通常在/etc/drbd.d/gloabal_common.conf中睛驳±有模可以在定義的每一個資源的基礎(chǔ)上定義任意選項膜廊。
如果使用多個資源的話,該部分并不是嚴格要求但是是強烈建議的淫茵。否則的話配置文件很快就會變的讓人難以理解了爪瓜。
在上面的例子中,我們使用Protocol C匙瘪,所以在每一個資源配置(包括r0)基礎(chǔ)該選項铆铆,除非你明確配置使用另外的協(xié)議選項。對其他的同步協(xié)議選項丹喻,可以參見“復(fù)制模式”一節(jié)薄货。
5.3.4Resource部分
每個資源的配置通常都命名為/etc/drbd.d/resource.res。所有的drbd資源必須通過指定的配置方式進行命名碍论,可以使用US-ASCii內(nèi)的除空格外的任意的標示符谅猾。
每一個資源配置都必須有兩個主機上的分節(jié)(一個節(jié)點上一個)。
所以的配置設(shè)置都繼承共同的部分(如果存在的話)鳍悠,或者是從DRBD默認設(shè)置中繼承税娜。
事實上,你也可以使用主機分節(jié)上資源部分的一個速記符號藏研,也可以指定每個選項的值在量主機上一樣敬矩。這樣,和上面的例子比我們可以進一步壓縮該部分:
resource r0 {
device /dev/drbd1;
disk /dev/sda7;
meta-disk internal;
on alice {
address 10.1.1.31:7789;
}
on bob {
address 10.1.1.32:7789;
}
}
這個符號在drbd8.2.1及以上版本可用蠢挡。
5.4首次啟用資源
如上一節(jié)所述完成對資源的配置后即可啟用資源弧岳。
備忘
以下步驟必須在兩個節(jié)點上完成
創(chuàng)建元數(shù)據(jù)設(shè)備。這步只有先創(chuàng)建設(shè)置然后才能初始化設(shè)備:
drbdadm create-md resource
v08 Magic number not found
Writing meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.
success
附加到備份設(shè)置业踏。這步將drbd資源和后端設(shè)備連接
drbdadm attach resource
設(shè)置同步參數(shù)禽炬。這步設(shè)置drbd資源的同步參數(shù)
drbdadm syncer resource
4連接對等節(jié)點。這一步連接對等節(jié)點的資源
drbdadm connect resource
提示
必須注意操作的步驟為drbdadm attach堡称、drbdadm syncer 瞎抛、drbdadm connect,不然可能導(dǎo)致drbd崩潰却紧。
查看/proc/drbd桐臊。/proc/drbd 為Drbd的虛擬狀態(tài)文件,包含如下類似的信息:
cat /proc/drbd
version: 8.3.0 (api:88/proto:86-89)
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by buildsystem@linbit, 2008-12-18 16:02:26
1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:200768
這兩個節(jié)點上出現(xiàn)了Inconsistent/Inconsistent(不一致/不一致)的狀態(tài)晓殊。
到這里断凶,drbd已經(jīng)成功的分配好磁盤和網(wǎng)絡(luò)資源,為運行做好了準備巫俺。但是他還不知道使用那個節(jié)點作為初始化設(shè)備的同步源认烁。
5.5初始化設(shè)備同步
Drbd的運行還需要以下兩個以上以下的步驟:
選擇一個初始同步源。如果是新初始化的或者是空盤時,這個選擇是任意的却嗡。但是如果其中的一個節(jié)點已經(jīng)在使用并包含有用的數(shù)據(jù)舶沛,那么選擇哪個節(jié)點同步源就是至關(guān)重要的。如果選擇了錯誤的初始化同步方向窗价,就會造成數(shù)據(jù)丟失如庭,因此需要十分的小心。
啟動初始化化完全同步撼港。這一步只能在初始化資源配置的一個節(jié)點上進行坪它,并作為同步源選擇的節(jié)點上。發(fā)出如下命令支持此步驟: drbdadm -- --overwrite-data-of-peer primary resource
執(zhí)行此命令后帝牡,初始化同步開始進行往毡。可以通過查看/proc/drbd檢測同步的進展情況靶溜。同步的時間和設(shè)備的大小有一定的關(guān)系开瞭。
到現(xiàn)在為止,drbd的設(shè)置已經(jīng)全面投入使用罩息,甚至是在初始化同步完畢之前(這期間性能可能有所降低)〕徒祝現(xiàn)在可以創(chuàng)建一個文件系統(tǒng)作為raw的存儲塊設(shè)備,然后掛載它扣汪,之后就可執(zhí)行任何的其他的操作了。
現(xiàn)在可進行第6章锨匆,了解常見的任務(wù)管理方面的知識崭别,這部分將描述常見的資源的管理任務(wù)。
5.6基于復(fù)制的傳輸
為跳過初始化設(shè)備同步恐锣,為遠程節(jié)點預(yù)置數(shù)據(jù)并保持同步茅主,請參照以下步驟進行操作。
備忘
假設(shè)本地節(jié)點已經(jīng)配置土榴,但是主節(jié)點的drbd資源斷開了連接诀姚。也就是說設(shè)備配置已經(jīng)完成,相同的配置文件drbd.conf存在在兩個對等的節(jié)點上玷禽,也發(fā)出了進行初始化本地節(jié)點的命令赫段,但是遠程節(jié)點尚未連接。
1.在本地節(jié)點發(fā)出如下命令:
drbdadm new-current-uuid --clear-bitmap <resource>
2.創(chuàng)建一個一致的矢赁、逐字拷貝的數(shù)據(jù)的資源以及其元數(shù)據(jù)糯笙。例如,從raid1中刪除一個支持熱插拔的磁盤撩银,然后將其更換為一個新的磁盤给涕,并重建raid以保證持續(xù)的冗余。被刪除未一個可以撤掉的逐字復(fù)制的設(shè)備。如果本地的磁盤支持快照副本(如基于LVM的DRBD)够庙,你可以使用dd創(chuàng)建一個逐位復(fù)制的快照恭应。
3.在本地節(jié)點的問題:
drbdadm new-current-uuid resource
請注意,這里沒有調(diào)用 --clear-bitmap選項
4.副本物理傳輸?shù)竭h程對等節(jié)點耘眨。
5.新增副本到遠程節(jié)點昼榛。這可能會再次造成物理磁盤的堵塞,逐位拷貝磁盤現(xiàn)有的數(shù)據(jù)到遠程節(jié)點上毅桃。
一定要保證恢復(fù)或者是拷貝的數(shù)據(jù)不僅僅是復(fù)制的數(shù)據(jù)褒纲,而且還需要相關(guān)的drbd的元數(shù)據(jù)。如果沒有這樣做的話钥飞,磁盤的傳輸是沒有意義的莺掠。
6.啟用遠程節(jié)點的資源:
drbdadm up resource
當(dāng)兩個對等節(jié)點連接后,不會啟動進行完整的同步读宙,相反彻秆,自動同步只包含哪些因為drbdadm調(diào)用而改變的塊-- --clear-bitmap new-current-uuid.
即使自此之后沒有發(fā)生任何的變化,由于涉及活動日志的更新等结闸,也有可能出現(xiàn)一個簡短的同步期唇兑。這些可以通過使用基于校驗的同步而減輕同步。
提示
無論資源是普通的資源還是堆放的資源桦锄,都可以使用相同的過程扎附。對于堆放的DRBD資源,需要通過啟動參數(shù) –S或者是 –stacked選項结耀。
第三篇 利用drbd工作
6 常見的管理任務(wù)
目錄
6.1 檢查DRBD的狀態(tài)
6.1.1通過drbd-overview查看DRBD的狀態(tài)
6.1.2從/proc/drbd中查看狀態(tài)信息
6.1.3連接狀態(tài)
6.1.4資源角色
6.1.5 磁盤狀態(tài)
6.1.6I / O的狀態(tài)標志
6.1.7績效指標
6.2啟用和禁用資源
6.2.1啟用資源
6.2.2禁用資源
6.3重新配置資源
6.4升級和降級資源
6.5啟用雙主模式
6.5.1永久雙主模式
6.5.2臨時雙主模式
6.5.3開機自動啟用
6.6在線設(shè)備驗證
6.6.1啟用在線設(shè)備驗證
6.6.2調(diào)用在線核查
6.6.3自動在線驗證
6.7配置同步率
6.7.1固定的同步速率配置
6.7.1臨時固定的同步速率配置
6.8配置基于校驗的同步
6.9配置擁堵策略和暫停復(fù)制
6.10配置I/O錯誤處理策略
6.11配置復(fù)制傳輸完整性驗證
6.12重新調(diào)整資源
6.12.1在線增長
6.12.2離線增長
6.12.3在線收縮
6.12.4離線收縮
6.13禁用后端設(shè)備刷新
6.14配置裂腦行為
6.14.1裂腦通知
6.14.2 裂腦自動修復(fù)策略
6.15創(chuàng)建三節(jié)點設(shè)置
6.15.1設(shè)備堆疊的注意事項
6.15.2配置堆疊的資源
6.15.3啟用堆疊資源
6.16使用DRBD proxy
6.16.1DRBD proxy部署注意事項
6.16.2安裝
6.16.3License 文件
6.16.4配置
6.16.5控制DRBD proxy
6.16.6故障排除
6.1 檢查DRBD的狀態(tài)
6.1.1通過drbd-overview查看DRBD的狀態(tài)
查看drbd狀態(tài)最方便的方式是通過drbd-overview查看留夜。
drbd-overview
0:home Connected Primary/Secondary
UpToDate/UpToDate C r--- /home xfs 200G 158G 43G 79%
1:data Connected Primary/Secondary
UpToDate/UpToDate C r--- /mnt/ha1 ext3 9.9G 618M 8.8G 7%
2:nfs-root Connected Primary/Secondary
UpToDate/UpToDate C r--- /mnt/netboot ext3 79G 57G 19G 76%
6.1.2從/proc/drbd中查看狀態(tài)信息
/proc/drbd是一個虛擬的文件桑嘶,用于顯示當(dāng)前配置的所有drbd資源的實時狀態(tài)丽声,可是使用以下命令查看該文件的內(nèi)容:
cat /proc/drbd
version: 8.3.0 (api:88/proto:86-89)
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by buildsystem@linbit, 2008-12-18 16:02:26
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r---
ns:0 nr:8 dw:8 dr:0 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
1: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r---
ns:0 nr:12 dw:12 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
2: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r---
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
第一行顯示的為當(dāng)前系統(tǒng)使用的drbd的版本,第二行包含一些特定的編譯信息骆膝。
在本例中的其他行為重復(fù)顯示的每一個drbd設(shè)備的配置信息黑毅,設(shè)備的次要編號嚼摩。在這里是0,對應(yīng)的設(shè)備則為/dev/drbd0矿瘦。
/proc/drbd包含了其他的一些具體的各種資源的信息:
CS(connnection state 連接狀態(tài))枕面。網(wǎng)絡(luò)連接狀態(tài),可參見“6.1.3”章節(jié)查看有關(guān)各種連接狀態(tài)的詳細信息匪凡。
RO(role 角色)膊畴。節(jié)點的角色。本地節(jié)點的角色顯示在前病游,斜線后面的為對等節(jié)點的角色唇跨。詳細可參閱“6.1.4”章節(jié)有關(guān)資源角色的詳細信息稠通。
DS(disk stats 磁盤狀態(tài))。磁盤狀態(tài)买猖,斜線前的為本地節(jié)點的磁盤狀態(tài)改橘,斜線后的為對等節(jié)點的磁盤狀態(tài)。詳細可參閱“6.1.5”章節(jié)有關(guān)各種磁盤狀態(tài)的詳細信息玉控。
Replication protocol 復(fù)制協(xié)議飞主。資源使用的復(fù)制協(xié)議,不外乎A/B/C高诺。詳細可參閱“2.3”節(jié)有關(guān)復(fù)制協(xié)議碌识。
I/O標示。六個狀態(tài)標示反映出資源的I/O狀態(tài)虱而。詳細可參見“6.1.6”章節(jié)了解有關(guān)標示的詳細信息筏餐。
Performance indicators績效指標。一些反映資源利用率和性能的計數(shù)器和儀表牡拇。詳細可參見“6.1.7 績效指標”章節(jié)魁瞪。
6.1.3連接狀態(tài)
可以通過查看/proc/drbd或者是使用命令drbdadm cstate 查看資源的連接狀態(tài):
drbdadm cstate <resource>
Connected
一個資源可能有以下連接狀態(tài)之一:
StandAlone獨立的:網(wǎng)絡(luò)配置不可用。資源還沒有被連接或者是被管理斷開(使用drbdadm disconnect命令)惠呼,或者是由于出現(xiàn)認證失敗或者是裂腦的情況导俘。
Disconnecting斷開:斷開只是臨時狀態(tài),下一個狀態(tài)將是StandAlone獨立的剔蹋。
Unconnected懸空:是嘗試連接前的臨時狀態(tài)旅薄,可能的下一個狀態(tài)為WFconnection和WFReportParams。
Timeout超時:與對等節(jié)點連接超時泣崩,也是臨時狀態(tài)赋秀,下一個狀態(tài)為Unconected懸空。
BrokerPipe:與對等節(jié)點連接丟失律想,也是臨時狀態(tài),下一個狀態(tài)為Unconected懸空绍弟。
NetworkFailure:與對等節(jié)點失去連接后的臨時狀態(tài)技即,下一個狀態(tài)為Unconected懸空。
ProtocolError. 與對等節(jié)點失去連接后的臨時狀態(tài)樟遣,下一個狀態(tài)為Unconected懸空而叼。
TearDown拆解:臨時狀態(tài),對等節(jié)點連接關(guān)閉豹悬,下一個狀態(tài)為Unconected懸空葵陵。
WFConnection.等待和對等節(jié)點建立網(wǎng)絡(luò)連接。
WFReportParams:已經(jīng)建立TCP連接瞻佛,本節(jié)點等待從對等節(jié)點傳來的第一個網(wǎng)絡(luò)包脱篙。
Connected連接:Drbd已經(jīng)建立連接娇钱,數(shù)據(jù)鏡像現(xiàn)在可用,節(jié)點處于正常狀態(tài)绊困。
StartingSyncS:完全同步文搂,有管理員發(fā)起的剛剛開始同步。未來可能的狀態(tài)為SyncSource或PausedSyncS秤朗。
StartingSyncT:完全同步煤蹭,有管理員發(fā)起的剛剛開始同步,下一狀態(tài)為WFSyncUUID取视。
WFBitMapS:部分同步剛剛開始硝皂,下一步可能的狀態(tài):SyncSource或PausedSyncS。
WFBitMapT:部分同步剛剛開始作谭,下一步可能的狀態(tài):WFSyncUUID稽物。
WFSyncUUID:同步即將開始,下一步可能的狀態(tài):SyncTarget或PausedSyncT丢早。
SyncSource:以本節(jié)點為同步源的同步正在進行姨裸。
SyncTarget:以本節(jié)點為同步目標的同步正在進行。
PausedSyncS:以本地節(jié)點是一個持續(xù)同步的源怨酝,但是目前同步已經(jīng)暫停傀缩。可能是因為另外一個同步正在進行或者是使用命令drbdadm pause-sync暫停了同步农猬。
PausedSyncT:以本地節(jié)點為持續(xù)的同步目標赡艰,但是目前同步已經(jīng)暫停,這可能是因為另外一個同步正在進行或者是使用命令drbdadm pause-sync暫停了同步斤葱。
VerifyS:以本地節(jié)點為驗證源的線上設(shè)備驗證正在執(zhí)行慷垮。
VerifyT:以本地節(jié)點為目標源的線上設(shè)備驗證正在執(zhí)行。
6.1.4資源角色
可以通過查看/proc/drbd或者是使用命令drbdadm role 查看資源角色:
drbdadm role <resource>
Primary/Secondary
本地節(jié)點一般顯示在前揍堕,對等節(jié)點資源顯示在后料身。
資源的角色一般為如下之一:
Primary主:資源目前為主,并且可能正在被讀取或者寫入衩茸。若不是雙主模式被激活芹血,這種角色只可能出現(xiàn)在兩節(jié)點中的一個上。
Secondary次:資源目前為次楞慈。正常接收對等節(jié)點的更新(除非運行在斷開模式下才不是)幔烛,但是它既不能被讀取也不能被寫入。這種角色只能是兩節(jié)點中的一個囊蓝。
Unknown未知:資源角色目前未知饿悬。本地資源不會出現(xiàn)這種狀態(tài),只有對等節(jié)點在斷開模式下才會出現(xiàn)在這種情況聚霜。
6.1.5 磁盤狀態(tài)
可以通過查看/proc/drbd或者是使用命令drbdadm role 查看資源的磁盤狀態(tài):
drbdadm dstate <resource>
UpToDate/UpToDate
本地節(jié)點一般顯示在前狡恬,對等節(jié)點資源顯示在后珠叔。
本地和對等節(jié)點的磁盤狀態(tài)都有可能是一下狀態(tài)之一:
Diskless無盤:本地沒有塊設(shè)備分配給DRBD使用,這就意味著沒有可用的后背設(shè)備傲宜,或者使用drbdadm 命令手工分離或者是底層的I/O錯誤導(dǎo)致自動分離运杭。
Attaching:讀取元數(shù)據(jù)時候的瞬間狀態(tài)。
Failed失敽洹:本地塊設(shè)備報告I/O錯誤的下一個狀態(tài)辆憔。其下一個狀態(tài)為Diskless無盤。
Negotiating:在已經(jīng)連接的DRBD設(shè)備進行Attach讀取元數(shù)據(jù)前的瞬間狀態(tài)报嵌。
Inconsistent:數(shù)據(jù)是不一致的虱咧,在兩個節(jié)點上(初始的完全同步前)這種狀態(tài)出現(xiàn)后立即創(chuàng)建一個新的資源。此外锚国,在同步期間(同步目標)在一個節(jié)點上出現(xiàn)這種狀態(tài)腕巡。
Outdated:數(shù)據(jù)資源是一致的,但是已經(jīng)過時血筑。
DUnknown:當(dāng)對等節(jié)點網(wǎng)絡(luò)連接不可用時出現(xiàn)這種狀態(tài)绘沉。
Consistent:一個沒有連接的節(jié)點數(shù)據(jù)一致。當(dāng)建立連接時豺总,它決定數(shù)據(jù)是UpToDate 或者是Outdated车伞。
UpToDate:一致的最新的數(shù)據(jù)狀態(tài),這個狀態(tài)是正常的狀態(tài)喻喳。
6.1.6I / O的狀態(tài)標志
I/O狀態(tài)標志包含在/proc/drbd中的有關(guān)I/O操作的當(dāng)前資源的信息另玖。I/O狀態(tài)表示一共六種,具體信息如下:
I/O suspension表伦,r表示運行I/O谦去,s表示suspended I/O,正常情況下為r
Serial resynchronization 串行同步:當(dāng)資源等待同步時卻推遲了重新同步蹦哼,這則個標志變成A鳄哭,正常情況為 –
Peer-initiated sync suspension 對等節(jié)點發(fā)起的同步暫停:當(dāng)資源正在等待重新同步時,對等節(jié)點因為一些原因發(fā)起暫停同步纲熏。這個標志變成p窃诉。正常為 –
Locally initiated sync suspension 本地發(fā)起的同步暫停:當(dāng)資源等待重新同步時,在本地節(jié)點上用戶發(fā)起同步暫停赤套,這個標志變成u。正常為 –
Locally blocked I/O 珊膜。正常為 -容握。可能會是一下標志:
d:如因為一個短暫的磁盤狀態(tài)導(dǎo)致的drbd內(nèi)部出現(xiàn)I/O阻塞
b:備用設(shè)備的I/O阻塞
n:網(wǎng)絡(luò)socket出現(xiàn)阻塞
a:設(shè)備的I/O阻塞和網(wǎng)絡(luò)阻塞的組合
Activity Log update suspension 活動日志更新暫停:當(dāng)活動日志更新暫停车柠,這個標志變成s剔氏。正常為 –
6.1.7績效指標
/proc/drbd第二行包含每個資源的計數(shù)器和儀表狀況的信息:
NS(network send 網(wǎng)絡(luò)發(fā)送):net數(shù)據(jù)以kibyte通過網(wǎng)絡(luò)連接發(fā)送到對等節(jié)點
NR(network receive 網(wǎng)絡(luò)接收):通過網(wǎng)絡(luò)連接以kibyte接收net數(shù)據(jù)
DW(disk write 磁盤寫入):net數(shù)據(jù)以kibyte寫入本地磁盤
DR(disk read 磁盤讀人懿):net數(shù)據(jù)以kibyte讀取本地磁盤數(shù)據(jù)
AL(activity log 活動日志):活動日志區(qū)的元數(shù)據(jù)更新
BM(bit map 位圖):位圖區(qū)元數(shù)據(jù)更新
LO(local count 本地計數(shù)):DRBD請求的開放本地I/O子系統(tǒng)的數(shù)量
PE(pengding 待定):發(fā)送到對等節(jié)點但是尚未節(jié)點對方回答的請求的數(shù)目
UA(unacknowledged 未確認):通過網(wǎng)絡(luò)連接接收到對等節(jié)點的請求,但是尚未得到回復(fù)
AP(alllication pending應(yīng)用程序掛起):數(shù)據(jù)塊I/O請求轉(zhuǎn)發(fā)到DRBD谈跛,但是DRBD尚未回答
EP(epochs):一定數(shù)量的epoch對象羊苟,通常為1,使用阻礙或者是沒有排序?qū)懙姆椒〞r可能增加I/O負載感憾。
WO(write order 寫入順序)目前使用的寫入順序的方法:b(barrier障礙)蜡励、f(flush 刷新)、d(drain 漏)或者是n(none無)
OOS(out of sync):以kububyte同步當(dāng)前存儲
6.2啟用和禁用資源
6.2.1啟用資源
通常情況下阻桅,所有配置的DRBD資源自動啟用凉倚。
在其自由裁量權(quán)的范圍內(nèi)管理集群資源或者是根據(jù)集群的配置管理
在系統(tǒng)啟動時使用/etc/init.d/drbd 腳本
不管什么理由,如果你要手動啟用資源嫂沉,你可以通過如下名下進行操作:
drbdadm up <resource>
當(dāng)然你也可使用all這個關(guān)鍵字稽寒,而不是特定的資源名稱來啟動/etc/drbd.conf定義的所有資源折汞。
6.2.2禁用資源
可以通過命令暫時禁用特定的資源:
drbdadm down <resource>
這里同樣可以使用all這個關(guān)鍵字暫時停用所有在/etc/drbd.conf配置的所有資源染簇。
6.3重新配置資源
DRBD運行在操作的過程中重新配置資源纵潦。
要保證對資源的任何必要的修改都配置在/etc/drbd.conf中
在兩個節(jié)點中同步/etc/drbd.conf
在量節(jié)點上都需要使用drbdadm adjust <resource>
Drbdadm adjust 后需要使用drbdsetup 配置進行必要的調(diào)整征候。當(dāng)然你可以通過運行drbdadm -d(dry-run)選項檢查drbdsetup的調(diào)用组哩。
備忘
當(dāng)調(diào)整/etc/drbd.conf中常見的部分肖粮,可以使用命令drbdadm調(diào)整所有運行中的資源潮太。
6.4升級和降級資源
可以通過手工發(fā)出如下命令更改資源的角色蘸拔,或者從次切換為主或者是從主到次:
drbdadm primary <resource>
drbdadm secondary <resource>
在單主模式下(DRBD默認)北戏,兩個節(jié)點同時處于連接狀態(tài)下负芋,任何一個節(jié)點都可以在特定的時間內(nèi)變成主。當(dāng)在一個節(jié)點上運行 drbdadm primary <resource>后再另外一個節(jié)點又運行drbdadm primary <resource>嗜愈,這樣就會出現(xiàn)錯誤旧蛾。
但是在雙主模式下,可以將兩個節(jié)點上的資源的角色都可以是主蠕嫁。
6.5啟用雙主模式
雙主模式下允許一個資源同事承擔(dān)兩個節(jié)點上的主锨天。這樣做可能是出于永久或者臨時的基礎(chǔ)上考慮。
備忘
雙主模式要求資源配置為同步復(fù)制(協(xié)議C)
6.5.1永久雙主模式
如若啟用雙主模式剃毒,則需要在資源配置中指定 allow-two-primaries 為yes病袄,如下:
resource <resource>
net {
protocol C;
allow-two-primaries yes;
}
...
}
配置之后不要忘記在兩節(jié)點間同步配置。在兩節(jié)點上運行drbdadm adjust <resource>赘阀。
之后就可以在兩個節(jié)點上同時運行 drbdadm primary <resource>益缠。
6.5.2臨時雙主模式
如若在一個單主模式的配置下臨時調(diào)整啟用雙主模式,可以使用以下命令:
drbdadm net-options --protocol=C --allow-two-primaries <resource>
要結(jié)束臨時雙主模式基公,同樣可以運行上面類似的命令幅慌,不過參數(shù)為 --allow-two-primaries=no(如果需要可以跟上所需要的復(fù)制協(xié)議)
6.5.3開機自動啟用
當(dāng)配置資源為雙主模式時,也可以配置為在系統(tǒng)開機時自動啟動drbd并切換為主模式轰豆。
resource <resource>
startup {
become-primary-on both;
}
...
}
可利用系統(tǒng)腳本/etc/init.d/drbd作為系統(tǒng)啟動和推廣相關(guān)資源胰伍。
備忘
在Pacemaker管理的drbd配置中齿诞,成為主的方法不要求和不推薦。Pacemaker配置中骂租,資源的升降級應(yīng)該有集群進行管理祷杈。
6.6在線設(shè)備驗證
6.6.1啟用在線設(shè)備驗證
默認情況下在線設(shè)備驗證是未啟用的,如果要啟用它渗饮,可以在配置文件/etc/drbd.conf資源配置部分添加:
resource <resource>
net {
verify-alg <algorithm>;
}
...
}
<algorithm>算法但汞,系統(tǒng)內(nèi)核配置系統(tǒng)密碼api支持任意的信息加密算法。通常情況下抽米,你至少可以從sha1特占、md5和crc32c中選擇其一。
如果對現(xiàn)有資源進行改更改云茸,同樣需要同步drbd.conf到對等節(jié)點是目,需要在兩個節(jié)點上運行drbda adjust <resource>。
6.6.2調(diào)用在線驗證
在啟用在線驗證后标捺,可以通過如下命令啟動驗證:
drbdadm verify <resource>
這樣做之后drbd就開始對<resource>進行在線設(shè)備驗證懊纳,如果探測到有塊未同步,將會對這些塊進行標記亡容,并向內(nèi)核日志中記錄一條信息嗤疯。此時任何應(yīng)用程序都可正常操作,包括切換資源的角色闺兢。
如果在驗證運行時out-of-sync塊被發(fā)現(xiàn)茂缚,可能需要在驗證完畢之后使用如下命令通信同步:
drbdadm disconnect <resource>
drbdadm connect <resource>:
6.6.3自動在線驗證
大多數(shù)用戶為輕松完成工作,都希望自動進行在線設(shè)備驗證屋谭〗拍遥可以創(chuàng)建一個名為/etc/dron.d/drbd-verify的文件,輸入如下內(nèi)容:
42 0 * * 0 root /sbin/drbdadm verify <resource>
這樣在每星期日的午夜的00:42都會進行設(shè)備的在線驗證桐磁。
如果要對所有的資源啟用在線設(shè)備驗證(如通過在/etc/drbd.conf文件的common部分添加verify-alg <algorithm>)悔耘,也可以使用如下進行調(diào)用:
42 0 * * 0 root /sbin/drbdadm verify all
6.7配置同步率
正常情況下,后臺同步需要保證(這會導(dǎo)致同步目標出現(xiàn)暫時的不一致)盡可能快的完成我擂,但是后臺同步帶寬不能占用所有的帶寬衬以,不然會影響前端復(fù)制,影響應(yīng)用程序的性能校摩。因此看峻,也就必須根據(jù)各自的硬件環(huán)境,配置同步的帶寬衙吩』ゼ耍可以是永久的也可能是臨時的。
重要
設(shè)置的同輩速率比次節(jié)點的最大吞吐量大還大的話,會變得無意義车猬。次節(jié)點的寫速度必會比它的I/O子系統(tǒng)還快,因此它是一個正在進行同步的同步目標設(shè)備尺锚。
基于同樣的理由珠闰,同步速率設(shè)置的超過網(wǎng)絡(luò)的最大可用帶寬也是沒有任何意義的。
6.7.1固定的同步速率配置
一個資源用于后臺同步的最大帶寬由資源的速率選項控制瘫辩。它必須包含在資源配置文件/etc/drbd.conf的磁盤部分:
resource <resource>
disk {
sync-rate 40M;
...
}
...
}
請注意伏嗜,同步的速率是bytes字節(jié),而不是bits/s伐厌。
提示
根據(jù)經(jīng)驗同步速率比較合理的是可用帶寬的30%承绸。這樣加入一個I/O子系統(tǒng)能支持180MB/s的吞吐量,而千兆網(wǎng)絡(luò)可支持110MB/s(網(wǎng)絡(luò)帶寬會成為瓶頸)挣轨,可以計算出:
圖6.1军熏。以網(wǎng)絡(luò)帶寬110MB/ s為例,同步速率:
這樣就得出同步速率的推薦值為33M卷扮。
相反荡澎,如果I/O子系統(tǒng)的支持80MB/s的吞吐量,千兆以網(wǎng)絡(luò)環(huán)境(I/O子系統(tǒng)是瓶頸)的最大吞吐量應(yīng)該為:
圖6.2晤锹。以網(wǎng)絡(luò)帶寬80MB/ s為例摩幔,同步速率:
這樣就得出同步速率的推薦值為24M。
6.7.2臨時的同步速率配置
有時候需要暫時調(diào)整同步的速率鞭铆。例如或衡,集群節(jié)點進行預(yù)定的維護后希望加快后臺重新同步,或者是當(dāng)應(yīng)用程序非常頻繁的進行寫的時候车遂,希望降低重新同步的速率以保證比較大的帶寬用于復(fù)制封断。
例如,千兆以太網(wǎng)將大部分帶寬用于重新同步艰额,可以使用如下命令:
drbdadm disk-options --resync-rate=110M <resource>
只需要在一個節(jié)點上發(fā)出以上命令澄港。
要恢復(fù)這個臨時設(shè)置,并啟用/etc/drbd.conf中配置的同步速率柄沮,可以使用如下命令:
drbdadm adjust <resource>
6.7.3可變同步率配置
當(dāng)多個DRBD資源共用同一個復(fù)制/同步的網(wǎng)絡(luò)時回梧,固定的同步速率可能就不是很合適。在這種情況下祖搓,可以配置可變的同步速率狱意。DRBD使用一個自動控制回路的算法來確定和調(diào)整同步速率。該算法可以保證始終有足夠的帶寬用于前臺的復(fù)制拯欧,從而大大的減小了后臺同步I/O對前臺的影響详囤。
可變同步速率的優(yōu)化配置很大程度上取決于可用的網(wǎng)絡(luò)帶寬,應(yīng)用I/O模型和鏈路的擁塞狀況。理想的設(shè)置還取決于是不是應(yīng)用了DRBD代理藏姐。在優(yōu)化DRBD的配置方面比較明智的是請教專業(yè)的DRBD人員隆箩。下面提供一個配置的樣例(假定結(jié)合了drbd代理):
resource <resource> {
net {
c-plan-ahead 200;
c-max-rate 10M;
c-fill-target 15M;
}
}
提示
c-fill-target比較好的起始值為BDP*3,其中BDP為復(fù)制鏈接產(chǎn)生的帶寬延遲
6.8配置基于校驗的同步
默認情況下基于校驗的同步是未啟用的羔杨。如果要啟用的話可以在配置文件/etc/drbd.conf中配置:
resource <resource>
net {
csums-alg <algorithm>;
}
...
}
<algorithm>算法捌臊,系統(tǒng)內(nèi)核配置系統(tǒng)密碼api支持任意的信息加密算法。通常情況下兜材,你至少可以從sha1理澎、md5和crc32c中選擇其一。
如果對現(xiàn)有資源進行改更改曙寡,同樣需要同步drbd.conf到對等節(jié)點糠爬,需要在兩個節(jié)點上運行drbda adjust <resource>。
6.9配置擁堵策略和暫停復(fù)制
在復(fù)制帶寬高度可變的環(huán)境下(廣域網(wǎng)下的典型)举庶,有可能復(fù)制就會發(fā)生擁堵执隧。使用默認的配置是不可取的,因為這樣會導(dǎo)致主節(jié)點上I/O阻塞灯变。
相反殴玛,如果在這種情況下暫停DRBD的復(fù)制,會導(dǎo)致主節(jié)點上的數(shù)據(jù)在此節(jié)點上設(shè)置為pull ahead添祸。在這種模式下滚粟,drbd是始終開啟著復(fù)制通道的-它并沒有置換到disconnected斷開模式,不過在沒有足夠的帶寬可用前刃泌,它并不進行復(fù)制操作凡壤。
下面的一個drbd proxy的配置樣例:
resource <resource> {
net {
on-congestion pull-ahead;
congestion-fill 2G;
congestion-extents 2000;
...
}
...
}
通常同時設(shè)置congestion-fill、congestion-extents和pull-ahead選項一起工作比較好耙替。
congestion-fill比較合理的值是90%亚侠。
當(dāng)通過drbd proxy復(fù)制時,drbd proxy 緩沖內(nèi)存俗扇。
當(dāng)不設(shè)置drbd proxy 時硝烂,通過tcp網(wǎng)絡(luò)發(fā)送緩沖。
Congestion-extents比較合理的值為設(shè)置的al-extents值得90%铜幽。
6.10配置I/O錯誤處理策略
DRBD可通過在資源的磁盤配置文件/etc/drbd.conf中配置on-io-error選項處理底層的I/O錯誤:
resource <resource> {
disk {
on-io-error <strategy>;
...
}
...
}
如果想對所有的資源做一個全局性的I/O錯誤處理策略滞谢,也可以在common部分設(shè)置該選項。
<strategy>策略可能有如下選項之一:
1除抛、 detach分離:這是默認和推薦的選項狮杨。如果在節(jié)點上發(fā)生底層的磁盤I/O錯誤,它會將設(shè)備運行在diskless 無盤模式下到忽。
2橄教、 pass_on:drbd會將I/O錯誤報告到上層。在主節(jié)點上,它會將其報告給掛載的文件系統(tǒng)护蝶,但是在此節(jié)點上就往往忽略(因此此節(jié)點上沒有可以報告的上層)
3华烟、 -local-io-error調(diào)用本地磁盤I/O處理程序中定義的命令。這就需要有相應(yīng)有讓local-io-error調(diào)用的資源處理程序處理錯誤的命令持灰。這就給管理員留有足夠自由的權(quán)力使用命令或者是腳本調(diào)用local-io-error處理I/O錯誤篓足。
備忘
在早起的DRBD版本中(8.0之前)其實包含另外一個選項鲤竹,panic谦炬,它是在本地出現(xiàn)I/O錯誤時強行將發(fā)生I/O錯誤的節(jié)點從集群中移除刺覆。雖然該選項不再可用绽族,但是通過local-io-error/+ call-local-io-error+接口可實現(xiàn)與之相同的功能姨涡。當(dāng)你對足夠了解這種行為的影響時你可以應(yīng)用這樣的該功能。
你可以按照如下的操作重新配置正在運行資源的I/O錯誤處理策略:
編輯資源配置文件/etc/drbd.d/<resource>.res
將配置文件拷貝到對等節(jié)點
在兩個節(jié)點上運行drbdadm adjust <resource>
6.11配置復(fù)制傳輸完整性驗證
默認情況下資源的復(fù)制傳輸完整性驗證是不開啟的吧慢√纹可以在/etc/drbd.conf文件中添加如下內(nèi)容啟用復(fù)制傳輸完整性驗證:
resource <resource>
net {
data-integrity-alg <algorithm>;
}
...
}
<algorithm>算法,系統(tǒng)內(nèi)核配置系統(tǒng)密碼api支持任意的信息加密算法检诗。通常情況下匈仗,你至少可以從sha1、md5和crc32c中選擇其一逢慌。
如果對現(xiàn)有資源進行改更改悠轩,同樣需要同步drbd.conf到對等節(jié)點,需要在兩個節(jié)點上運行drbda adjust <resource>攻泼。
6.12重新調(diào)整資源
6.12.1在線增長
如果后端塊設(shè)備支持(在線)操作火架,那也就可能支持在調(diào)整時在線調(diào)整DRBD設(shè)備的大小。如要這樣做忙菠,必須滿足兩個條件:
受影響的后端設(shè)備必須是一個邏輯卷管理子系統(tǒng)何鸡,如LVM。
資源目前必須出在連接狀態(tài)牛欢。
如果后端塊設(shè)備在兩個節(jié)點上都支持增長骡男,就需要保證僅有一個節(jié)點處于主狀態(tài)。然后在一個節(jié)點上輸入:
drbdadm resize <resource>
新的部分將觸發(fā)同步傍睹。同步從主節(jié)點到次節(jié)點上隔盛。
6.12.2離線增長
當(dāng)兩個節(jié)點的后端塊設(shè)備增長時,DRBD是不活動焰望,且drbd利用外部元數(shù)據(jù)骚亿,那么新的大小會自動識別。任何管理的干預(yù)都是不必要的熊赖。Drbd設(shè)備的新大小激活来屠,并建立網(wǎng)絡(luò)連接。
如果drbd資源配置的是使用內(nèi)部元數(shù)據(jù),那么這個元數(shù)據(jù)必須在增長的設(shè)備變成可用前移動進去俱笛±可以采用以下步驟完成操作:
警告
這是一個超級進程,你可以自己覺得如何使用迎膜。
取消配置的DRBD資源
drbdadm down <resource>
保存萎縮之前的元數(shù)據(jù)到文本
drbdadm dump-md <resource> > /tmp/metadata
必須在兩個節(jié)點上都這樣操作泥技,為每個節(jié)點都單獨的轉(zhuǎn)儲文件。千萬不要在一個節(jié)點導(dǎo)出數(shù)據(jù)然后拷貝到其他的節(jié)點上磕仅,這樣會導(dǎo)致drbd不能工作珊豹。
兩個節(jié)點上的后端塊設(shè)備都支持增長
可在兩個節(jié)點上,根據(jù)文件/tmp/metadata調(diào)整大小信息(la-size-sect)榕订。請注意參數(shù)la-size-sect必須在sectors中指定店茶。
重新初始化元數(shù)據(jù)區(qū)域:
drbdadm create-md <resource>
在兩個節(jié)點上重新導(dǎo)入正確的元數(shù)據(jù):
drbdmeta_cmd=$(drbdadm -d dump-md test-disk)
${drbdmeta_cmd/dump-md/restore-md} /tmp/metadata
Valid meta-data in place, overwrite? [need to type 'yes' to confirm]
yes
Successfully restored meta data
備忘
這個例子使用shell變量代替。它可能或不能在其他的shell中工作劫恒。檢查環(huán)境變量看是不是沒有正確使用贩幻。
重新啟用drbd資源:
drbdadm up <resource>
在一個節(jié)點上提升drbd的資源:
drbdadm primary <resource>
最后,增長的文件系統(tǒng)填補擴展的drbd的設(shè)備的大小两嘴。
6.12.3在線收縮
在收縮drbd設(shè)備前丛楚,必須先縮小drbd的上層,例如憔辫,通常的文件系統(tǒng)系統(tǒng)趣些。由于drbd不能獲取到文件系統(tǒng)實際使用多少空間,為了不丟失數(shù)據(jù)操作一定要小心贰您。
備忘
能不能在線收縮取決于正在使用的文件系統(tǒng)喧务。大多數(shù)的文件系統(tǒng)是不支持在線收縮的。如xfs根本不支持收縮枉圃。
當(dāng)使用內(nèi)部元數(shù)據(jù)時一定要考慮元數(shù)據(jù)使用的磁盤空間功茴。提供給drbdadm resize的大小是文件系統(tǒng)的大小。在使用內(nèi)部元數(shù)據(jù)的情況下孽亲,drbd所需求的大小要高(詳見17.1.3 計算元數(shù)據(jù)大小 一節(jié))坎穿。
要在線收縮drbd,可以在收縮文件系統(tǒng)之后使用如下命令進行操作:
drbdadm resize --size=<new-size> <resource>
通撤稻ⅲ可以使用乘數(shù)后綴為<new-size>(K/M/G等)玲昧,在收縮drbd之后,還可以收縮包含的塊設(shè)備(如果支持收縮的話)篮绿。
6.12.4離線收縮
如果收縮不活動的drbd塊設(shè)備孵延,在嘗試連接時,drbd就會拒絕連接到塊設(shè)備亲配,因為目前它太谐居Α(使用外部元數(shù)據(jù)的情況下)惶凝,或者它不能找到內(nèi)部元數(shù)據(jù)(使用內(nèi)部元數(shù)據(jù)的情況下)。為解決該問題犬钢,使用該程序(如果不能使用在線收縮):
警告
這是一個超級進程苍鲜,你可以自己覺得如何使用。
要在一個節(jié)點上收縮文件系統(tǒng)玷犹,依然要配置drbd
取消配置的drbd資源:
drbdadm down <resource>
保存萎縮之前的元數(shù)據(jù)到文本
drbdadm dump-md <resource> >+ /tmp/metadata
必須在兩個節(jié)點上都這樣操作混滔,為每個節(jié)點都單獨的轉(zhuǎn)儲文件。千萬不要在一個節(jié)點導(dǎo)出數(shù)據(jù)然后拷貝到其他的節(jié)點上歹颓,這樣會導(dǎo)致drbd不能工作坯屿。
在兩個節(jié)點上收縮后端塊設(shè)備
可在兩個節(jié)點上,根據(jù)文件/tmp/metadata調(diào)整大小信息(la-size-sect)巍扛。請注意參數(shù)la-size-sect必須在sectors中指定愿伴。
只有當(dāng)你使用內(nèi)部元數(shù)據(jù)(此時可能由于收縮進行丟失),重新初始化元數(shù)據(jù)區(qū)域:
drbdadm create-md <resource>
在兩個節(jié)點上重新導(dǎo)入正確的元數(shù)據(jù):
drbdmeta_cmd=$(drbdadm -d dump-md test-disk)
${drbdmeta_cmd/dump-md/restore-md} /tmp/metadata
Valid meta-data in place, overwrite? [need to type 'yes' to confirm]
yes
Successfully restored meta data
備忘
這個例子使用shell變量代替电湘。它可能或不能在其他的shell中工作。檢查環(huán)境變量看是不是沒有正確使用鹅经。
重新啟用drbd資源:
drbdadm up <resource>
6.13禁用后端設(shè)備刷新
注意
當(dāng)有耐性的drbd使用battery-backed高速寫緩存(BBWC)時寂呛,應(yīng)該只禁用設(shè)備的刷新。當(dāng)battery池耗盡時大多數(shù)的存儲控制器允許自動禁用寫緩存瘾晃,當(dāng)battery死時切換到寫模式贷痪。強烈建議使用該功能。
當(dāng)運行無BBWC或者是BBWC池耗盡時蹦误,禁用DRBD緩存很可能會導(dǎo)致數(shù)據(jù)丟失劫拢,因此不應(yīng)該嘗試這樣做。
DRBD允許分別啟用和禁用后端設(shè)備刷新對復(fù)制數(shù)據(jù)集和DRBD擁有自身的元數(shù)據(jù)强胰。這寫選項默認都是開啟的舱沧。如果要禁用一個(或者是兩個),就需要設(shè)置drbd配置文件中的/etc/drbd.conf中的disk部分偶洋。
要禁用復(fù)制數(shù)據(jù)集的磁盤刷新熟吏,就需要配置如下:
resource <resource>
disk {
disk-flushes no;
...
}
...
}
要禁用drbd元數(shù)據(jù)的磁盤刷新,需要配置如下:
resource <resource>
disk {
md-flushes no;
...
}
...
}
在核對資源配置后(同樣需要同步/etc/drbd.conf到兩個節(jié)點間)玄窝,可以在兩個節(jié)點運行如下命令:
drbdadm adjust <resource>
6.14配置裂腦行為
6.14.1裂腦通知
如果配置DRBD會調(diào)用裂腦處理程序牵寺,裂腦發(fā)生時就會被探測到。要配置這個程序恩脂,需要對資源進行如下配置:
resource <resource>
handlers {
split-brain <handler>;
...
}
...
}
<handler>可能是目前系統(tǒng)中一個可執(zhí)行的文件帽氓。
Drbd包含一個裂腦處理程序腳本/usr/lob/drbd/notify-split-brain.sh。它這是通過電子郵件的方式發(fā)送到指定的地址俩块。要配合程序發(fā)送信息到root@localhost(這假設(shè)是設(shè)置的系統(tǒng)管理員的郵件地址)黎休,配置如下:
resource <resource>
handlers {
split-brain "/usr/lib/drbd/notify-split-brain.sh root";
...
}
...
}
當(dāng)配置已經(jīng)在資源上進行修改(同步到兩個節(jié)點上)浓领,就不需要添加其他的處理就可以啟動處理程序。Drbd會在下一次出現(xiàn)裂腦時候就簡單的調(diào)用該處理程序奋渔。
6.14.2 裂腦自動修復(fù)策略
為了能夠啟用和配置drbd的自動裂腦恢復(fù)策略镊逝,就必須理解drbd提供的幾種配置選項。Drbd提供基于同時幾個幾點處于主角色探測的裂腦恢復(fù)程序嫉鲸。為此撑蒜,drbd資源的net配置部分有以下關(guān)鍵字:
after-sb-0pri:裂腦已經(jīng)被探測到,但是現(xiàn)在沒有節(jié)點處于主角色玄渗,對于這個選項座菠,drbd有以下關(guān)鍵字:
disconnect:不需要自動恢復(fù),僅僅是調(diào)用裂腦處理程序的腳本(如果配置了)藤树,斷開連接并出在斷開模式浴滴。
discard-younger-primary:放棄和回滾最后成為主的上面所做的修改。
discard-least-changes:放棄和回滾岁钓,變動比較少的主機上的修改升略。
discard-zero-changes:如果任何節(jié)點都沒有發(fā)生任何變化,僅僅申請在一個節(jié)點上做出繼續(xù)修改即可屡限。
after-sb-1pri:裂腦已經(jīng)被探測到品嚣,現(xiàn)有有一個節(jié)點處于主角色,對于這個選項钧大,drbd有以下關(guān)鍵字:
disconnect:和after-sb-0pri一樣翰撑,調(diào)用裂腦處理程序的腳本(如果配置了),斷開連接并出在斷開模式啊央。
consensus:和after-sb-0pri中同樣的修復(fù)策略眶诈。如果利用這些策略裂腦危害能選擇,那就能自動解決瓜饥。否則逝撬,同樣斷開指定的動作。
call-pri-lost-after-sb:和after-sb-0pri中同樣的修復(fù)策略乓土。如果利用這些策略裂腦危害能選擇球拦,就在受危害的節(jié)點上調(diào)用pri-lost-after-sb程序。這個程序必須確認在handlers中配置帐我,并考慮到從集群中移除該節(jié)點坎炼。
discard-secondary:不管哪個主機只要處于次角色,都是裂腦的危害者拦键。
after-sb-2pri:在兩個節(jié)點都處于主角色時谣光,裂腦被發(fā)現(xiàn)。次選項使用和after-sb-1pri同樣的關(guān)鍵字芬为,丟棄次節(jié)點并達成共識萄金。
備忘
DRBD的這三個選項蟀悦,往往被忽略,因為很少用到氧敢∪逖可以參見drbd.cong(5)查看裂腦恢復(fù)的詳細關(guān)鍵字惰许,這里不再細說劈榨。
例如吠谢,在雙主模式下,使用GFS或者OCFS2文件系統(tǒng)作為資源的塊設(shè)備唯袄,可以使用如下方式定義恢復(fù)策略:
resource <resource> {
handlers {
split-brain "/usr/lib/drbd/notify-split-brain.sh root"
...
}
net {
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
...
}
...
}
6.15創(chuàng)建三節(jié)點設(shè)置
三節(jié)點的設(shè)置涉及DRBD設(shè)備之上另一個堆疊弯屈。
6.15.1設(shè)備堆疊的注意事項
這種類型的設(shè)置需要注意一下事項:
堆疊的設(shè)備是活動的設(shè)備。假若已經(jīng)配置了drbd設(shè)備/dev/drbd0恋拷,并且在堆疊設(shè)備上配置的為/dev/drbd10资厉,那么/dev/drbd10這就是掛載和使用的設(shè)備。
設(shè)備的元數(shù)據(jù)將被保持兩次蔬顾,分別為底層的drbd設(shè)備和堆疊的設(shè)備上宴偿。在堆疊的設(shè)備上,必須使用內(nèi)部元數(shù)據(jù)诀豁,這就意味著堆疊的設(shè)備比不堆疊的設(shè)備有效可用的存儲區(qū)域要小窄刘。
如要上層的堆疊設(shè)備運行,那么底層的設(shè)備必須是主且叁。
為了保證能夠同步到備份節(jié)點,堆疊設(shè)備必須是活動并且是主角色秩伞。
6.15.2配置堆疊的資源
在下面的例子中逞带,節(jié)點分別命名為alice、bob和charlie纱新,而alice和bob形成一個兩節(jié)點的集群展氓,而charlie則是備份的節(jié)點。
resource r0 {
net {
protocol C;
}
on alice {
device /dev/drbd0;
disk /dev/sda6;
address 10.0.0.1:7788;
meta-disk internal;
}
on bob {
device /dev/drbd0;
disk /dev/sda6;
address 10.0.0.2:7788;
meta-disk internal;
}
}
resource r0-U {
net {
protocol A;
}
stacked-on-top-of r0 {
device /dev/drbd10;
address 192.168.42.1:7788;
}
on charlie {
device /dev/drbd10;
disk /dev/hda6;
address 192.168.42.2:7788; # Public IP of the backup node
meta-disk internal;
}
}
在有三個節(jié)點的情況下脸爱,配置文件drbd.conf必須在每一個集群的節(jié)點中都有遇汞。注意以下關(guān)鍵字在不堆疊的資源配置中是沒有的:
stacked-on-top-of:該選項表示drbd所使用的資源為一個堆疊的資源。它替換普通的資源配置的部分簿废。在底層的資源中不能使用stacked-on-top-of選項空入。
備忘
DRBD的這三個選項,往往被忽略族檬,因為很少用到歪赢。可以參見drbd.cong(5)查看裂腦恢復(fù)的詳細關(guān)鍵字单料,這里不再細說埋凯。
對堆疊的資源來說Protocol A不是必須的点楼。你可以根據(jù)需求,選擇任何drbd的復(fù)制協(xié)議白对。
6.15.3啟用堆疊資源
為了啟用堆疊資源掠廓,首先必須先啟用底層的資源并推廣:
drbdadm up r0
drbdadm primary r0
而對不堆疊的資源,則在必須堆疊的資源上創(chuàng)建drbd元數(shù)據(jù)甩恼◇扒疲可是使用如下命令:
drbdadm create-md --stacked r0-U
然后你就可以啟用堆疊的資源了:
drbdadm up --stacked r0-U
drbdadm primary --stacked r0-U
在此之后,你可以在備用節(jié)點上啟動資源媳拴,開啟三節(jié)點復(fù)制:
drbdadm create-md r0-U
drbdadm up r0-U
為了自動化管理堆疊的資源黄橘,必須在集群管理配置中整合堆疊的資源。參見第8.4節(jié)“Pacemaker集群中使用堆疊的DRBD資源”了解在Pacemaker集群中管理集群的一些詳細信息屈溉。
6.16使用DRBD proxy
6.16.1DRBD proxy部署注意事項
DRBD proxy進程即可直接放在DRBD自身的服務(wù)器上塞关,也可以放在其他的單獨的專用服務(wù)器上。DRBD proxy實例可作為多個drbd設(shè)備分布在多個節(jié)點上的proxy代理子巾。
Drbd proxy對drbd來說是透明的帆赢。通常情況下會有大量的數(shù)據(jù)報進行傳輸,這樣就有相當(dāng)大的活動日志线梗。這就可能導(dǎo)致時間比較長的同步在主節(jié)點崩潰后重新運行椰于,因此建議啟用drbd的csums-alg設(shè)置。
6.16.2安裝
請聯(lián)系linbit銷售商獲取drbd proxy仪搔。除非有特殊需求瘾婿,要不就請使用最新的drbd proxy。
在drbian和debian-based系統(tǒng)上安裝drbd proxy烤咧,使用dpkg工具操作如下(使用的drbd proxy的版本要和目標架構(gòu)的版本相匹配):
dpkg -i drbd-proxy_1.0.16_i386.deb
在基于rpm的系統(tǒng)(如sles和rhel)上安裝drbd proxy偏陪,使用rpm工程操作如下(使用的drbd proxy的版本要和目標架構(gòu)的版本相匹配):
rpm -i drbd-proxy-1.0.16-1.i386.rpm
要配置drbd proxy還需要安裝drbd管理工具drbdadm。
以二進制文件安裝drbd proxy通常會安裝到/etc/init,d的init腳本中煮嫌。請使用init腳本start/stop drbd proxy服務(wù)笛谦,它相應(yīng)需要使用drbdadm工具配置drbd proxy。
6.16.3License 文件
當(dāng)從linbit獲取一個license時昌阿,drbd proxy的運行也是需要license文件的饥脑。這個文件名為drbd-proxy.license,必須在目標機器上拷貝到/etc目錄下:
cp drbd-proxy.license /etc
6.16.4配置
Drbd proxy在drbd的主被配置文件中配置懦冰。它是在主機部分中的proxy和additional proxy的additional選項部分進行配置灶轰。
下面為在drbd節(jié)點上直接配置運行drbd proxy的例子:
resource r0 {
net {
protocol A;
}
device minor 0;
disk /dev/sdb1;
meta-disk /dev/sdb2;
proxy {
compression on;
memlimit 100M;
}
on alice {
address 127.0.0.1:7789;
proxy on alice {
inside 127.0.0.1:7788;
outside 192.168.23.1:7788;
}
}
on bob {
address 127.0.0.1:7789;
proxy on bob {
inside 127.0.0.1:7788;
outside 192.168.23.2:7788;
}
}
}
Insert ip地址為drbd和drbd proxy之間溝通使用,而outside ip地址為drbd proxy之間溝通使用刷钢。
6.16.5控制DRBD proxy
Drbdadm提供proxy-up和proxy-down子命令配置或刪除連接到本地drbd資源的drbd proxy框往。可使用/etc/init.d/drbdproxy命令進行啟動和停止的操作闯捎。
Drbd proxy有一個焦作drbd-proxy-ctl的底層的配置工具椰弊。當(dāng)沒有其他的選項時它可在交互模式下調(diào)用许溅。幫助信息命令顯示如下:
add connection <name> <ip-listen1>:<port> <ip-connect1>:<port>
<ip-listen2>:<port> <ip-connect2>:<port>
Creates a communication path between two DRBD instances.
set memlimit <name> <memlimit-in-bytes>
Sets memlimit for connection <name>
del connection <name>
Deletes communication path named name.
show
Shows currently configured communication paths.
show memusage
Shows memory usage of each connection.
list [h]subconnections
Shows currently established individual connections
together with some stats. With h outputs bytes in human
readable format.
list [h]connections
Shows currently configured connections and their states
With h outputs bytes in human readable format.
list details
Shows currently established individual connections with
counters for each DRBD packet type.
quit
Exits the client program (closes control connection).
shutdown
Shuts down the drbd-proxy program. Attention: this
unconditionally terminates any DRBD connections running.
6.16.6故障排除
Drbd proxy日志通過syslog使用LOG_DAEMON功能。通常情況下秉版,可在/var/log/daemon.log查看drbd proxy信息贤重。
例如,如果drbd 連接失敗清焕,因為本節(jié)點不能連接到領(lǐng)導(dǎo)的一端并蝗,就會記錄一些類似拒絕連接的信息。在這種情況下酒需要檢查DRBD是不是云翔在兩個節(jié)點上(不是standalone模式)秸妥,并且drbd proxy在運行滚停。同時也需要自己檢查配置。
7故障排除和錯誤
目錄
7.1磁盤故障的處理
7.1.1從磁盤中手工分離出DRBD
7.1.2自動分離I / O錯誤
7.1.3使用內(nèi)部元數(shù)據(jù)時更換故障磁盤
7.1.4使用外部元數(shù)據(jù)時更換故障磁盤
7.2處理節(jié)點故障
7.2.1處理次節(jié)點臨時故障
7.2.2處理主節(jié)點臨時故障
7.2.3節(jié)點永久故障的處理
7.3手工進行裂腦修復(fù)
本章介紹在硬件或系統(tǒng)故障的情況下執(zhí)行的任務(wù)
7.1磁盤故障的處理
如何處理磁盤故障取決于drbd配置的磁盤I/O錯誤處理策略(參閱2.11節(jié)“磁盤錯誤處理策略”)粥惧,和元數(shù)據(jù)類型的配置(參閱17.1節(jié)“DRBD元數(shù)據(jù)”)键畴。
備注
在大多數(shù)情況下,這里所描述的步驟僅僅使用DRBD直接運行在磁盤上的時候突雪。一般情況下起惕,對DRBD運行在頂層時不適用。
MD軟raid設(shè)置(在這種情況下使用mdadm管理磁盤的更換)咏删,
設(shè)備映射raid(使用dmraid)
硬raid設(shè)備(可根據(jù)供應(yīng)商的指示處理磁盤故障)
一些非標準設(shè)備映射的虛擬塊設(shè)備(參閱設(shè)備映射的文檔)
7.1.1從磁盤中手工分離出DRBD
如果drbd配置通過I/O錯誤(不推薦)惹想,就必須先分離drbd的資源,即督函,分離出后端存儲:
drbdadm detach <resource>
可以運行drbdadm dstate命令嘀粱,查看資源是不是運行在diskless無盤模式:
drbdadm dstate <resource>
Diskless/UpToDate
如果主節(jié)點發(fā)生磁盤故障,可以結(jié)果這一步完成切換操作辰狡。
7.1.2自動分離I / O錯誤
如果drbd配置為自動分離I/O錯誤(推薦選項)锋叨,DRBD就可以從后端存儲上自動分離資源,而無需人工干預(yù)搓译。你可以通過drbdadm dstate命令核對資源是不是運行在diskless無盤模式下悲柱。
7.1.3使用內(nèi)部元數(shù)據(jù)時更換故障磁盤
如果使用內(nèi)部元數(shù)據(jù)锋喜,就足以將drbd設(shè)備綁定到新的磁盤上些己。如果新的磁盤名被其他的linxu設(shè)備或者是故障磁盤占用,就需要修改drbd的配置文件進行修改嘿般。
這個過程包括新建元數(shù)據(jù)集段标,然后從新連接資源:
drbdadm create-md <resource>
v08 Magic number not found
Writing meta data...
initialising activity log
NOT initializing bitmap
New drbd meta data block sucessfully created.
drbdadm attach <resource>
新磁盤的完全同步是瞬間和自動進行的÷可以通過查看/proc/drbd檢測后臺同步的進度信息逼庞。
7.1.4使用外部元數(shù)據(jù)時更換故障磁盤
使用外部元數(shù)據(jù)時,程序基本上是一樣的瞻赶。然而赛糟,DRBD不能識別單獨的磁盤更換派任,因此需要一個額外的操作步驟:
drbdadm create-md <resource>
v08 Magic number not found
Writing meta data...
initialising activity log
NOT initializing bitmap
New drbd meta data block sucessfully created.
drbdadm attach <resource>
drbdadm invalidate <resource>
這里drbdadm無效命令觸發(fā)同步。同樣可以通過查看/proc/drbd觀察同步的進展情況璧南。
7.2處理節(jié)點故障
當(dāng)drbd探測到對等節(jié)點宕機(無論是真正的硬件故障還是人工干預(yù))掌逛,drbd都將其連接狀態(tài)有Connected變?yōu)閃FConnection,直到對等節(jié)點恢復(fù)司倚。Drbd資源會在此時運行disconnected模式下豆混。在disconnected模式下,資源以及和棋相關(guān)的塊設(shè)備都是可用的动知,并可以在必要時進行升降級皿伺,但是并不能將修改復(fù)制到對等節(jié)點。相反盒粮,drbd在塊設(shè)備上存儲的內(nèi)部信息在disconnected時仍會被修改鸵鸥。
7.2.1處理次節(jié)點臨時故障
如果一個處于次角色的節(jié)點資源暫時出現(xiàn)故障(例如因為內(nèi)存問題導(dǎo)致的需要更換內(nèi)存),進一步的干預(yù)是不需要的—除了明顯的必須修復(fù)的故障節(jié)點并恢復(fù)回來拆讯。當(dāng)這種情況發(fā)生后脂男,兩個節(jié)點會重新建立連接并啟用,drbd會復(fù)制在此期間所有進行的修改到次節(jié)點上种呐。
重要
由于drbd資源重新同步算法的影響宰翅,此時此節(jié)點上的資源會出現(xiàn)短暫的不一致inconsistent。在這個短暫的時間內(nèi)爽室,如果對等節(jié)點出現(xiàn)不可用汁讼,此時次節(jié)點是不能升級到主節(jié)點的。因此阔墩,在集群不冗余的期間嘿架,這個時間為次節(jié)點停機的時間加上重新同步所需要的時間。
7.2.2處理主節(jié)點臨時故障
從drbd的角度上看啸箫,主節(jié)點的故障和次節(jié)點的故障基本類似耸彪。存活的節(jié)點發(fā)現(xiàn)對等階段故障,就會將其置為disconnected 模式忘苛。Drbd并不升級存活的節(jié)點到主蝉娜,需要集群管理程序重要做。
當(dāng)失敗的節(jié)點被修復(fù)并回到集群中扎唾,在此節(jié)點也是如此召川,因此,無需進行人工干預(yù)胸遇。再次荧呐,drbd并沒有改回資源的角色,它是由幾圈管理器控制的(如果配置了的話)。
Drbd通過一個特殊的機制保證在主節(jié)點出現(xiàn)故障的情況下塊設(shè)備的一致倍阐。詳細可以參閱17.3節(jié)“活動日志”概疆。
7.2.3節(jié)點永久故障的處理
如果一個節(jié)點遇到不可恢復(fù)的問題或者是永久性破壞,需按照以下步驟進行操作:
將出現(xiàn)故障的硬件替換為與之類似性能和容量的磁盤峰搪。
備注
替換也可以替換性能差點走孽,但是不推薦鞋拟。替換為磁盤容量比較小的是不可能的,這樣會導(dǎo)致drbd拒絕連接被替換的節(jié)點。
安裝基本系統(tǒng)和應(yīng)用程序濒蒋。
安裝drbd并從幸存的節(jié)點上拷貝/etc/drbd.conf和所有的/etc/drbd.d
按照第五章的步驟配置drbd它褪,但是不進行5.5節(jié)的“初始化設(shè)備同步”
此時沒有必要手工進行一個完整的設(shè)備同步健无,它會在開始時自動連接到存活的主節(jié)點上苛让。
7.3手工進行裂腦修復(fù)
DRBD檢測到裂腦恢復(fù)連接并變成可用,和對等節(jié)點達成初步的握手春锋。如果drbd檢測到兩個節(jié)點(也可能是兩個節(jié)點斷開時)都是主角色矫膨,它就連接關(guān)閉復(fù)制的連接。這個可在系統(tǒng)日志中發(fā)現(xiàn)如下信息:
Split-Brain detected, dropping connection!
當(dāng)裂腦被探測到時期奔,一個節(jié)點將保持始終以StandAlone狀態(tài)連接資源侧馅,另外一個節(jié)點也可能處于StandAlone狀態(tài)(如果兩個節(jié)點被探測到同時處于裂腦狀態(tài)),也可能是WFConnection狀態(tài)(如果對等接在還沒有來得及探測到裂腦就down掉的話)呐萌。
此時馁痴,必須手工干預(yù)選擇丟失一個節(jié)點的修改被丟失(這個節(jié)點被稱為裂腦受害者),除非配置drbd的裂腦自動修復(fù)肺孤。這種干預(yù)需運行如下命令:
drbdadm secondary <resource>
drbdadm connect --discard-my-data <resource>
在其他節(jié)點上(裂腦幸存者)罗晕,如果它的狀態(tài)也為StandAlone狀態(tài),可輸入以下命令:
drbdadm connect <resource>
如果節(jié)點已經(jīng)處于WFConnection狀態(tài)赠堵,可是省略這一步小渊,因為它會自動進行重新連接。
如果裂腦影響的是堆疊的資源茫叭,需要使用drbdadm –stacked來代替drbdadm酬屉。
當(dāng)連接時裂腦受害者將立即改變連接狀態(tài)為SyncTarget,并被主節(jié)點覆蓋其余節(jié)點的修改揍愁。
備注
裂腦受害者不是一個完整的設(shè)備同步呐萨,相反,還有可能執(zhí)行本地修改的回滾操作吗垮,而將裂腦幸存者的所做的修改完整的傳輸?shù)搅涯X受害者垛吗。
當(dāng)重新完成同步后凹髓,就認為裂腦問題已經(jīng)解決烁登,兩個節(jié)點的數(shù)據(jù)再次達成一致,形成一個冗余復(fù)制的存儲系統(tǒng)。
第四篇 應(yīng)用DRBD功能
8 DRBD集成Pacemaker集群
目錄
8 DRBD集成Pacemaker集群
8.1 Pacemaker引子
8.2集群配置添加DRBD-backed服務(wù)
8.3在Pacemaker集群中使用resource-level fencing
8.3.1 Resource-level fencing和dopd
8.3.2 Resource-level fencing使用集群信息庫(CIB)
8.4 Pacemaker集群只用堆疊的drbd資源
8.4.1 添加站點災(zāi)難恢復(fù)和Pacemaker集群
8.4.2使用堆疊的資源饵沧,實現(xiàn)4路冗余的Pacemaker集群
8.5配置drbd在兩個SAN-backed進行復(fù)制的Pacemaker集群
8.5.1 drbd的資源配置
8.5.2 Pacemaker資源的配置
8.5.3 Site的故障轉(zhuǎn)移
在實際應(yīng)用中drbd結(jié)合Pacemaker集群一起應(yīng)用是比較常見的锨络。Pacemaker也是DRBD眾多應(yīng)用中比較強大的一個應(yīng)用。
8.1 Pacemaker引子
在linux平臺上Pacemaker是一個復(fù)雜的狼牺、功能豐富并且廣泛應(yīng)用和部署的集群羡儿。它配備有豐富的文檔集。為了了解這一章是钥,強烈建議閱讀以下文件:
“從頭開始掠归,一步一步教你配置高可用性集群” –“Clusters From Scratch, a step-by-step guide to configuring high availability clusters;”
CRM CLI(命令行界面)工具,CRM shell手冊悄泥,Pacemaker的簡單直觀的命令行界面—“CRM CLI (command line interface) tool, a manual for the CRM shell, a simple and intuitive command line interface bundled with Pacemaker;”
Pacemaker配置說明虏冻。解釋Pacemaker的設(shè)計概念和原理的參考文檔。
8.2集群配置添加DRBD-backed服務(wù)
這部分主要介紹如何啟用Pacemaker集群的DRBD-backed服務(wù)弹囚。
備注
如果采用了drbd ocf資源代理厨相,建議推遲drbd的啟用、關(guān)閉鸥鹉、推廣和升降級專門的OCF資源代理蛮穿。也就是說需要禁用drbd的init腳本(自啟動腳本):
chkconfig drbd off
ocf:linbit:drbd OCF代理提供主/從功能,允許Pacemaker啟動和監(jiān)控毁渗、推廣和升降級多個節(jié)點的drbd資源践磅。同時也必須了解drbd的 RA斷開和分離所有的在Pacemaker管理drbd資源的關(guān)閉,也可為另外一個節(jié)點啟用待機模式灸异。
重要
OCF資源和drbd都屬于linbit提供商音诈,因此安裝為/usr/lib/ocf/resource.d/linbit/drbd。OCF資源代理作為傳統(tǒng)的資源代理绎狭,提供心跳檢測细溅,并安裝到 /usr/lib/ocf/resource.d/heartbeat/drbd。傳統(tǒng)的OCF RA已經(jīng)被廢棄并不再使用儡嘶。
當(dāng)Pacemaker CRM集群中使用OCF資源代理時為了啟用mysql數(shù)據(jù)庫的drbd-backed配置喇聊,為保證服務(wù)預(yù)先啟動提升drbd的資源,必須同時創(chuàng)建必要的資源和Pacemaker 限制蹦狂∈睦椋可如下例中使用crm shell:
Drbd-backed的mysql服務(wù)的Pacemaker配置
crm configure
crm(live)configure# primitive drbd_mysql ocf:linbit:drbd \
params drbd_resource="mysql" \
op monitor interval="15s"
crm(live)configure# ms ms_drbd_mysql drbd_mysql \
meta master-max="1" master-node-max="1" \
clone-max="2" clone-node-max="1" \
notify="true"
crm(live)configure# primitive fs_mysql ocf:heartbeat:Filesystem \
params device="/dev/drbd/by-res/mysql" \
directory="/var/lib/mysql" fstype="ext3"
crm(live)configure# primitive ip_mysql ocf:heartbeat:IPaddr2 \
params ip="10.9.42.1" nic="eth0"
crm(live)configure# primitive mysqld lsb:mysqld
crm(live)configure# group mysql fs_mysql ip_mysql mysqld
crm(live)configure# colocation mysql_on_drbd \
inf: mysql ms_drbd_mysql:Master
crm(live)configure# order mysql_after_drbd \
inf: ms_drbd_mysql:promote mysql:start
crm(live)configure# commit
crm(live)configure# exit
bye
在此之后,配置應(yīng)該被啟用凯楔。Pacemaker現(xiàn)在選擇一個節(jié)點升級drbd的資源窜骄,然后再找個節(jié)點上啟用drbd-backed資源。
8.3在Pacemaker集群中使用resource-level fencing
本節(jié)概述為防止Pacemaker從促進drbd的主/備資源時摆屯,drbd復(fù)制鏈接被中斷的必要采取的步驟邻遏。這使Pacemaker開啟服務(wù)時使用過時的數(shù)據(jù),從而導(dǎo)致不必要的“time warp”。
為了保證drbd的resource-level fencing准验,必須添加以下幾行到資源的配置中:
resource <resource> {
disk {
fencing resource-only;
...
}
}
由于集群基礎(chǔ)設(shè)施的使用赎线,也需要對handlers部分進行修改:
基于心跳的Pacemaker集群可參看“8.3.1 Resource-level fencing和dopd”的配置概述。
Corosync和基于心跳的集群都可使用該功能糊饱,參加“8.3.2 Resource-level fencing使用集群信息庫(CIB)”
重要
絕對至關(guān)重要的是至少配置兩個獨立的集群通信通道此功能正常工作垂寥。基于心跳Pacemaker集群應(yīng)在ha.cf配置文件中定義至少兩個集群通信鏈路另锋。 Corosync集群中至少在corosync.conf有兩個冗余環(huán)滞项。
8.3.1 Resource-level fencing和dopd
在基于心跳的Pacemaker集群中,drbd可使用一個叫做outdate-peer 服務(wù)的resources-level fencing功能夭坪,簡稱dopd蓖扑。
8.3.1.1 dopd的Heartbeat配置
為啟用dopd,必須在文件/etc/ha.d/ha.cf file中添加如下行:
respawn hacluster /usr/lib/heartbeat/dopd
apiauth dopd gid=haclient uid=hacluster
可根據(jù)首選的分布調(diào)整dopd的路徑台舱。在某些分布和結(jié)構(gòu)中律杠,正確的路徑為/usr/lib64/heartbeat/dopd。
在進行修改并拷貝ha.cf文件到對等節(jié)點后竞惋,將Pacemaker置為維護模式柜去,并運行/etc/init.d/heartbeat重新加載配置文件。之后拆宛,需要確認dopd為一個正在運行的進程嗓奢。
備注
可使用ps ax | grep dopd 或者是發(fā)出 killall -0 dopd.檢查這個進行。
8.3.1.2 Dopd的drbd配置
一旦dopd運行浑厚,請為drbd的資源添加如下配置:
resource <resource> {
handlers {
fence-peer "/usr/lib/heartbeat/drbd-peer-outdater -t 5";
...
}
disk {
fencing resource-only;
...
}
...
}
對于dopd而言分布可能將drbd-peer-outdater binary根據(jù)系統(tǒng)架構(gòu)的情況放置到/usr/lib64/heartbeat股耽。
最后,復(fù)制drbd.conf到對等節(jié)點钳幅,并使用drbdadm命令重新調(diào)整資源并反映出變化調(diào)整物蝙。
8.3.1.3 測試dopd功能
為了測試dopd是不是運行正常,在心跳服務(wù)正常運行時中斷配置的復(fù)制連接和連接的資源敢艰。也可以通過簡單的拔出物理鏈路诬乞,當(dāng)然這是相當(dāng)有侵略性的。當(dāng)然也可以通過插入一條臨時的iptables規(guī)則钠导,丟棄drbd的傳輸?shù)劫Y源使用的tcp端口的信息震嫉。
再次之后,可以觀察到資源的連接狀態(tài)從connection轉(zhuǎn)變?yōu)閃FConnection牡属。幾秒之后票堵,就可以發(fā)現(xiàn)磁盤的狀態(tài)變成了Outdated/DUnknown。而這正是dopd所負責(zé)的逮栅。
再次之后的任何企圖切換過時資源到主角色的操作都會失敗悴势。
當(dāng)重新建立網(wǎng)絡(luò)連接(不管是插入物理鏈路還是將iptables的臨時規(guī)則移除)窗宇,連接狀態(tài)都會改變?yōu)閏onnection,并自動同步到目標(如果主節(jié)點在網(wǎng)絡(luò)中斷期間發(fā)生了變化)瞳浦。然后就觀察到一個簡短的同步期間,最后废士,以前過時的資源則再次被標記為UpToDate叫潦。
8.3.2 Resource-level fencing使用集群信息庫(CIB)
需在drbd.conf中設(shè)置兩個選項才能啟用Pacemaker的resource-level fencing:
resource <resource> {
disk {
fencing resource-only;
...
}
handlers {
fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
after-resync-target "/usr/lib/drbd/crm-unfence-peer.sh";
...
}
...
}
因此,如果drbd復(fù)制連接變成disconnected官硝,腳本crm-fence-peer.sh會聯(lián)系幾圈管理器矗蕊,探測Pacemaker的Master/Slave資源相關(guān)的drbd資源,并確保Master/Slave資源不再在任一節(jié)點上被提升為當(dāng)前活躍的氢架。相反傻咖,當(dāng)連接重新建立drbd完成同步后,這個約束就會被刪除岖研,并且集群管理器也可自由的在任何節(jié)點上升級資源卿操。
8.4 Pacemaker集群只用堆疊的drbd資源
Stacked堆疊資源允許drbd被用在多點集群的多級冗余,或建立異地災(zāi)備的功能孙援。本節(jié)將介紹如何在澤中配置中配置drbd和Pacemaker害淤。
8.4.1 添加站點災(zāi)難恢復(fù)和Pacemaker集群
在這種配置的情況下,會在一個站點兩個節(jié)點的高可用性集群拓售,外加一個被安置異地處理單獨的節(jié)點窥摄。第三個節(jié)點作為一個災(zāi)難恢復(fù)節(jié)點是一個獨立的服務(wù)器〈∮伲考慮下面的插圖來描述這一概念崭放。
圖8.1。在Pacemaker集群中的DRBD資源堆積
在這個例子中鸽凶,alice和bob為兩個Pacemaker 集群節(jié)點币砂,而charlie則為一個不被Pacemaker管理的場外節(jié)點。
要建立這樣的一個配置玻侥,首先需要配置和初始化6.15節(jié)“創(chuàng)建三節(jié)點的設(shè)置”中所述的drbd的資源道伟。之后,根據(jù)CRM的配置配置Pacemaker:
primitive p_drbd_r0 ocf:linbit:drbd \
params drbd_resource="r0"
primitive p_drbd_r0-U ocf:linbit:drbd \
params drbd_resource="r0-U"
primitive p_ip_stacked ocf:heartbeat:IPaddr2 \
params ip="192.168.42.1" nic="eth0"
ms ms_drbd_r0 p_drbd_r0 \
meta master-max="1" master-node-max="1" \
clone-max="2" clone-node-max="1" \
notify="true" globally-unique="false"
ms ms_drbd_r0-U p_drbd_r0-U \
meta master-max="1" clone-max="1" \
clone-node-max="1" master-node-max="1" \
notify="true" globally-unique="false"
colocation c_drbd_r0-U_on_drbd_r0 \
inf: ms_drbd_r0-U ms_drbd_r0:Master
colocation c_drbd_r0-U_on_ip \
inf: ms_drbd_r0-U p_ip_stacked
colocation c_ip_on_r0_master \
inf: p_ip_stacked ms_drbd_r0:Master
order o_ip_before_r0-U \
inf: p_ip_stacked ms_drbd_r0-U:start
order o_drbd_r0_before_r0-U \
inf: ms_drbd_r0:promote ms_drbd_r0-U:start
如果創(chuàng)建一個名為/tmp/crm.txt的臨時文件使碾,可以使用如下命令導(dǎo)入活動集群的配置:
crm configure < /tmp/crm.txt
該配置將確保在alice/ bob集群的以下動作按照正確的順序發(fā)生:
1蜜徽、 Pacemaker在兩個集群節(jié)點上啟動drbd資源r0,并升級其中一個節(jié)點為主角色票摇。
2拘鞋、 Pacemaker之后啟動ip地址192.168.42.1,用于復(fù)制堆疊的資源到第三節(jié)點上矢门。先這樣做的節(jié)點的drbd資源r0晉升為主節(jié)點盆色。
3灰蛙、 在r0的主節(jié)點上復(fù)制r0-U的ip地址,現(xiàn)在Pacemaker啟動r0-U的用于連接和復(fù)制到異地節(jié)點的drbd資源隔躲。
4摩梧、 然后Pacemaker提升r0-U的資源為主角色,它可被一個應(yīng)用程序使用宣旱。
因此仅父,Pacemaker的配置確保群集節(jié)點之間不僅有完整的數(shù)據(jù)冗余,而且第三浑吟,異地節(jié)點也有笙纤。
備注
這個類型的設(shè)置通常和drbd proxy部署在一起。
8.4.2使用堆疊的資源组力,實現(xiàn)4路冗余的Pacemaker集群
在此配置中共有三個drbd資源(兩個不堆疊的猴誊,一個堆疊的)琳状,用于實現(xiàn)4路存儲冗余凑懂。這就意味著一個4節(jié)點的集群勾笆,即使三個節(jié)點同時出現(xiàn)故障,也能保證提供正常的服務(wù)候衍。
使用下圖來解釋這個概念寞酿。
圖8.2 Pacemaker集群中的DRBD堆疊資源
在這個例子中,alice, bob, charlie,和 daisy組成兩個量節(jié)點的Pacemaker集群脱柱。Alice和bob組成的集群名為左伐弹,并復(fù)制兩點之間的drbd資源,而charlie和daisy在另外一個獨立的單元中用途是一樣的榨为,名字為right惨好。而堆疊的drbd資源則連接兩個集群。
備注
由于Pacemaker集群管理器的限制随闺,需要是Pacemaker v1.0.5日川,這是不可能創(chuàng)建單個4節(jié)點集群而不啟用CIB功能,這是一個超級進程矩乐,不建議一般用途使用龄句。這個可能會在新發(fā)布的Pacemaker中解決。
為建立這樣的配置散罕,首先需要按照6.15節(jié)中“創(chuàng)建三節(jié)點的設(shè)置”配置和初始化資源(除了遠程一般的drbd配置為堆疊分歇,而不是本地集群)。之后配置Pacemaker使用下面的CRM配置欧漱,并啟動left集群:
primitive p_drbd_left ocf:linbit:drbd \
params drbd_resource="left"
primitive p_drbd_stacked ocf:linbit:drbd \
params drbd_resource="stacked"
primitive p_ip_stacked_left ocf:heartbeat:IPaddr2 \
params ip="10.9.9.100" nic="eth0"
ms ms_drbd_left p_drbd_left \
meta master-max="1" master-node-max="1" \
clone-max="2" clone-node-max="1" \
notify="true"
ms ms_drbd_stacked p_drbd_stacked \
meta master-max="1" clone-max="1" \
clone-node-max="1" master-node-max="1" \
notify="true" target-role="Master"
colocation c_ip_on_left_master \
inf: p_ip_stacked_left ms_drbd_left:Master
colocation c_drbd_stacked_on_ip_left \
inf: ms_drbd_stacked p_ip_stacked_left
order o_ip_before_stacked_left \
inf: p_ip_stacked_left ms_drbd_stacked_left:start
order o_drbd_left_before_stacked_left \
inf: ms_drbd_left:promote ms_drbd_stacked_left:start
如果創(chuàng)建一個名為/tmp/crm.txt的臨時文件职抡,可以使用如下命令導(dǎo)入活動集群的配置:
crm configure < /tmp/crm.txt
在加入這些配置到CIB后,Pacemaker會執(zhí)行以下動作:
1误甚、 在alice和bob間啟動drbd資源left復(fù)制并提升資源角色為主缚甩。
2谱净、 啟動IP地址10.9.9.100(Alice或Bob,取決于這些持有的left資源的主角色)擅威。
3壕探、 啟動drbd資源堆疊在剛剛配置IP地址的同一節(jié)點上。
4郊丛、 提升堆疊的drbd資源為主角色李请。
現(xiàn)在繼續(xù)配置集群right,通過創(chuàng)建以下配置:
primitive p_drbd_right ocf:linbit:drbd \
params drbd_resource="right"
primitive p_drbd_stacked ocf:linbit:drbd \
params drbd_resource="stacked"
primitive p_ip_stacked_right ocf:heartbeat:IPaddr2 \
params ip="10.9.10.101" nic="eth0"
ms ms_drbd_right p_drbd_right \
meta master-max="1" master-node-max="1" \
clone-max="2" clone-node-max="1" \
notify="true"
ms ms_drbd_stacked p_drbd_stacked \
meta master-max="1" clone-max="1" \
clone-node-max="1" master-node-max="1" \
notify="true" target-role="Slave"
colocation c_drbd_stacked_on_ip_right \
inf: ms_drbd_stacked p_ip_stacked_right
colocation c_ip_on_right_master \
inf: p_ip_stacked_right ms_drbd_right:Master
order o_ip_before_stacked_right \
inf: p_ip_stacked_right ms_drbd_stacked_right:start
order o_drbd_right_before_stacked_right \
inf: ms_drbd_right:promote ms_drbd_stacked_right:start
在加入這些配置到CIB后宾袜,Pacemaker會執(zhí)行以下動作:
1捻艳、 在charlie 和daisy間啟動drbd資源right復(fù)制并提升資源角色為主驾窟。
2庆猫、 啟動IP地址10.9.9.100(charlie 或 daisy,取決于這些持有的right資源的主角色)绅络。
3月培、 啟動drbd資源堆疊在剛剛配置IP地址的同一節(jié)點上。
4恩急、 保留堆疊stacked drbd資源在次角色(因為target-role="Slave")
8.5配置drbd在兩個SAN-backed進行復(fù)制的Pacemaker集群
這個一個在split-site中經(jīng)常采用的一個高級設(shè)置杉畜。它涉及到兩個獨立的Pacemaker集群,每個集群訪問一個單獨的網(wǎng)絡(luò)存儲區(qū)域(SAN)衷恭。Drbd通過一個兩點site間的IP link使用存在SAN上的復(fù)制的數(shù)據(jù)此叠。
使用下圖來解釋這個概念。
圖8.3 基于SAN集群的drbd復(fù)制
在每個site的單個節(jié)點目前作為drbd對等節(jié)點是沒有明確定義的--drbd對等節(jié)點是浮動的随珠,也就是說灭袁,drbd綁定在虛擬ip地址上而不是特定的無理機上。
備注
這種類型的設(shè)置通常是和drbd proxy或者是基于傳輸?shù)膹?fù)制結(jié)合在一起的窗看。
由于這種類型的設(shè)置處理共享存儲茸歧,為保證它能正常的工作,配置和測試STONITH是絕對至關(guān)重要的显沈。
8.5.1 drbd的資源配置
需要在drbd.conf中配置以下方式使drbd資源浮動:
resource <resource> {
...
device /dev/drbd0;
disk /dev/sda1;
meta-disk internal;
floating 10.9.9.100:7788;
floating 10.9.10.101:7788;
}
Floating這個關(guān)鍵字通常置于資源配中的<host>部分软瞎。在這種模式下,drbd表示ip地址和tcp端口拉讯,而不是對等節(jié)點的名字涤浇。需要注意的是指定的地址必須為虛擬的集群的IP地址,而不是物理節(jié)點的IP地址魔慷,對于浮動的節(jié)點這點很重要芙代。在這個例子中,在split-site配置兩個浮動的地址屬于兩個獨立的IP網(wǎng)絡(luò)是必須的盖彭。要特別注意要允許路由器或防火墻在drbd節(jié)點之間進行復(fù)制和傳輸纹烹。
8.5.2 Pacemaker資源的配置
一個drbd浮動節(jié)點的設(shè)置页滚,在Pacemaker配置方面,包括如下項目(在兩個參與的每一個Pacemaker集群):
一個虛擬的集群IP
一個主/從的drbd資源(使用drbd OCF資源代理)
確保Pacemaker以正確的順序在正確的節(jié)點上上啟動
要在一個浮動的對等節(jié)點的2集群節(jié)點上配置一個名為mysql的資源铺呵,使用復(fù)制ip地址10.9.9.100裹驰,使用一下crm命令配置Pacemaker:
crm configure
crm(live)configure# primitive p_ip_float_left ocf:heartbeat:IPaddr2 \
params ip=10.9.9.100
crm(live)configure# primitive p_drbd_mysql ocf:linbit:drbd \
params drbd_resource=mysql
crm(live)configure# ms ms_drbd_mysql drbd_mysql \
meta master-max="1" master-node-max="1" \
clone-max="1" clone-node-max="1" \
notify="true" target-role="Master"
crm(live)configure# order drbd_after_left \
inf: p_ip_float_left ms_drbd_mysql
crm(live)configure# colocation drbd_on_left \
inf: ms_drbd_mysql p_ip_float_left
crm(live)configure# commit
bye
在加入這些配置到CIB后,Pacemaker會執(zhí)行以下動作:
1片挂、 啟用ip地址10.9.9.100(在alice或者是Bob上)
2幻林、 根據(jù)所配置的ip地址調(diào)用drbd資源。
3音念、 提升其中一個drbd資源為主角色沪饺。
接著,為了創(chuàng)建與集群相配的配置闷愤,使用以下命令配置Pacemaker:
crm configure
crm(live)configure# primitive p_ip_float_right ocf:heartbeat:IPaddr2 \
params ip=10.9.10.101
crm(live)configure# primitive drbd_mysql ocf:linbit:drbd \
params drbd_resource=mysql
crm(live)configure# ms ms_drbd_mysql drbd_mysql \
meta master-max="1" master-node-max="1" \
clone-max="1" clone-node-max="1" \
notify="true" target-role="Slave"
crm(live)configure# order drbd_after_right \
inf: p_ip_float_right ms_drbd_mysql
crm(live)configure# colocation drbd_on_right
inf: ms_drbd_mysql p_ip_float_right
crm(live)configure# commit
bye
在加入這些配置到CIB后整葡,Pacemaker會執(zhí)行以下動作:
1、 啟用ip地址10.9.9.101(在charlie或者是daisy上)
2讥脐、 根據(jù)所配置的ip地址調(diào)用drbd資源遭居。
3、 保留drbd資源為次角色(是由target-role="Slave"確定的)
8.5.3 Site的故障轉(zhuǎn)移
在split-site配置中服務(wù)從一個site轉(zhuǎn)移到另外一個是非常必要的旬渠。這可能是一個預(yù)定的過渡也可能是一個有災(zāi)難性后果的事件俱萍。如果是過渡期則是非常正常的,可以預(yù)期的時間告丢,我們所期望也當(dāng)然是這樣:
在連接到集群的site上關(guān)于放棄資源枪蘑,改變影響資源的DRBD target-role,性要從主到從岖免。這將關(guān)閉任何依賴的主要角色DRBD資源岳颇,降級并繼續(xù)運行,并準備從新的主上接受更新觅捆。
連接到集群site上的接替資源赦役,改變受影響的DRBD資源的目標角色的屬性從到主。這將升級DRBD資源栅炒,啟動任何其他Pacemaker的資源掂摔,根據(jù)DRBD資源的主角色,并復(fù)制到遠程site的更新赢赊。
要故障切換回來乙漓,就是過程的反過來操作。
如果在活動的site上發(fā)生災(zāi)難性停電释移,site顯而易見的會置于offline叭披,而不在復(fù)制到備份的site上去。在這種情況下:
連接到集群上仍在運行的site資源玩讳,并改變受影響的DRBD資源的目標角色的屬性從到主涩蜘。這將升級DRBD資源嚼贡,并根據(jù)DRBD資源主角色啟動任何其他Pacemaker的資源。
當(dāng)原來的site被恢復(fù)或重建同诫,可能會再次連接的DRBD資源粤策,并隨后故障恢復(fù)使用相反的過程。
9 紅帽集群集成drbd
目錄
9.1紅帽集群的背景資料
9.1.1. Fencing
9.1.2資源組管理
9.2 紅帽集群配置
9.2.1 cluster.conf 文件
9.3在紅帽fail-over集群中使用drbd
本章介紹了如何在紅帽集群高可用性集群中使用DRBD的復(fù)制存儲误窖。
備注
本指南使用非官方的紅帽集群叮盘,是指其在歷史上的多個正式的產(chǎn)品名稱,包括紅帽集群套件霹俺,紅帽企業(yè)Linux的高可用性附加產(chǎn)品柔吼。
9.1紅帽集群的背景資料
9.1.1. Fencing
紅帽集群,最初設(shè)計是為了共享存儲集群丙唧,憑借節(jié)點的fencing放置并發(fā)愈魏、不協(xié)調(diào)的連接訪問共享資源。紅帽集群的fencing功能憑借fencing服務(wù)fenced和fencing代理艇棕,以腳本的形式實現(xiàn)的蝌戒。
即使基于DRBD集群沒有利用共同的存儲資源串塑,從而從drbd角度來看fencing不是必須的沼琉,紅帽集群套房甚至仍然需要fencing基于drbd的配置。
9.1.2資源組管理
資源組管理(rgmanager或clurgmgr)類似于Pacemaker桩匪。它是集群管理套件和配置管理的應(yīng)用程序的主要接口打瘪。
9.1.2.1 紅帽集群資源
在紅帽集群術(shù)語中單個的高可用應(yīng)用程序、文件系統(tǒng)傻昙、IP地址和類似的資源闺骚。
當(dāng)資源上相互依賴,例如妆档,NFS導(dǎo)出取決于正在安裝的文件系統(tǒng)-它們形成一個資源樹僻爽,這是一種嵌套樹資源中的另一個。內(nèi)嵌套層資源可以承受參數(shù)從資源在外層嵌套層贾惦。在Pacemaker中不存在資源樹的概念胸梆。
9.1.2.2 紅帽集群服務(wù)
資源形成一個相互依存的集合,該集合成為服務(wù)须板。這不同于Pacemaker碰镜,這樣的集合成為一個資源組。
9.1.2.3 rgmanager資源代理
資源代理被rgmanager調(diào)用习瑰,類似于在Pacemaker上的使用绪颖,在這個意義上,它們使用基于同一個在開放集群框架(OCF)所界定的shell api甜奄,雖然Pacemaker采用了沒有被定義的框架的擴展柠横。因此從理論上講窃款,資源代理和Pacemaker在一定程度是可以互換的—然而,在兩個集群管理實際使用不同的但功能和任務(wù)相似資源代理牍氛。
紅帽集群資源代理安裝在/usr/share/cluster下雁乡。和Pacemaker OCF資源代理的自己包含本身不同,一些紅帽集群資源代理被分割到包含a.sh文件的shell代碼和a.metadata文件包含xml資源代理元數(shù)據(jù)的文件糜俗。
Drbd包含紅帽集群資源代理踱稍。它以drbd.sh和drbd.metada的形式安裝到傳統(tǒng)的目錄里面。
9.2 紅帽集群配置
本節(jié)概述獲得紅帽集群運行所需的必要的配置步驟悠抹。準備集群配置是比較簡單的珠月,所有基于drbd的紅帽集群都需兩個節(jié)點(即為在紅帽文檔中所稱的集群成員)和fencing設(shè)備。
備注
欲了解更多有關(guān)配置紅帽集群的信息楔敌,請參閱紅帽的紅帽集群和GFS的文檔啤挎。
9.2.1 cluster.conf 文件
RHEL集群配置保存在一個單獨的配置文件/etc/cluster/cluster.conf中,可通過以下方面管理集群配置:
直接編輯配置文件卵凑。這是最簡單的的方法庆聘。不需要出文本編輯之外的其他先決條件。
使用GUI系統(tǒng)配置集群勺卢。這是寫在Python中使用Glade的一個GUI應(yīng)用程序伙判。它需要X顯示(無論是直接在服務(wù)器控制臺,或通過SSH隧道)的可用性黑忱。
使用基于web管理基礎(chǔ)設(shè)施conga宴抚。Conga的汲取設(shè)施包含一個節(jié)點代理與本地集群管理器、集群資源管理器以及集群LVM守護進程甫煞、頁面管理應(yīng)用程序(luci)轻庆∨可用一個簡單的web瀏覽器來配置集群的通信。
9.3在紅帽fail-over集群中使用drbd
備注
本節(jié)專門對紅帽集群fail-over設(shè)置drbd,而不涉及GFS拓春。GFS(和GFS2)的配置沛励,參見第11章“使用GFS整合drbd”
這部分類似于低8章言蛇,整合drbd和Pacemaker集群锌奴,假定使用如下配置參數(shù)配置高可用mysql數(shù)據(jù)庫:
drbd的資源被用為名為mysql的數(shù)據(jù)庫存儲,并管理設(shè)備/dev/drbd0.
drbd設(shè)備擁有一個被掛載/var/lib/mysql下的ext3文件系統(tǒng)(默認為mysql的數(shù)據(jù)目錄)
mysql數(shù)據(jù)庫利用文件系統(tǒng)弥雹,并監(jiān)聽在集群IP地址192.168.42.1上垃帅。
9.3.1設(shè)置群集配置
要配置高可用mysql數(shù)據(jù)庫,創(chuàng)建或者是修改包含以下配置項的/etc/cluster/cluster.conf文件剪勿。
打開/etc/cluster/cluster.conf文件贸诚,然后再資源中配置下列項目:
<rm>
<resources />
<service autostart="1" name="mysql">
<drbd name="drbd-mysql" resource="mysql">
<fs device="/dev/drbd/by-res/mysql/0"
mountpoint="/var/lib/mysql"
fstype="ext3"
name="mysql"
options="noatime"/>
</drbd>
<ip address="10.9.9.180" monitor_link="1"/>
<mysql config_file="/etc/my.cnf"
listen_address="10.9.9.180"
name="mysqld"/>
</service>
</rm>
備注
例子假設(shè)為一個單卷的資源。
內(nèi)嵌套資源引用另外一個<service/>是紅帽集群的表達方式資源依賴關(guān)系
務(wù)必增加config_version屬性,在配置完成之后酱固,在root中找到 <cluster>元素械念。然后發(fā)出以下命令修改正在運行的集群配置:
ccs_tool update /etc/cluster/cluster.conf
cman_tool version -r <version>
在第二個命令中,注意需要將<version>替換為你配置的最新的版本號运悲。
備注
無論是system-config-cluster GUI配置還是conga基于web集群管理的設(shè)施會控告在cluster.conf文件中涉及drbd資源代理的集群配置龄减。這是因為這個兩個應(yīng)用程序并不支持第三方擴展到集群基礎(chǔ)設(shè)施提供的集群管理的Python管理包。
這樣班眯,當(dāng)利用集群配置的drbd資源代理時希停,它是不建議使用system-config-cluster和Conga集群配置的。使用這些工具只監(jiān)控集群的狀態(tài)署隘,以保證它的正常工作宠能。
10 使用drbd結(jié)合LVM
目錄
10.1 LVM引子
10.2使用邏輯卷(LV)作為drbd的后端設(shè)備
10.3 DRBD的同步過程中使用自動化LVM快照
10.4 使用物理卷PV配置drbd資源
10.5 在現(xiàn)有卷組中添加一個新的DRBD卷
10.6 嵌套的LVM配置與DRBD
10.7 高可用LVM Pacemaker
本章涉及與管理DRBD技術(shù)結(jié)合的LVM2。特別是涵蓋:
使用LVM邏輯卷作為drbd的后端設(shè)備磁餐;
使用LVM物理卷的drbd設(shè)備违崇;
結(jié)合這些概念,使用drbd實現(xiàn)一個使用LVM分層方法诊霹。
如果不熟悉這些羞延,從10.1節(jié)“LVM引子“可作為LVM的起點,同時也鼓勵通過自己的方式了解除本節(jié)提供的以外的LVM的知識脾还。
10.1 LVM引子
LVM2是邏輯卷管理的linux設(shè)備映射框架的背景下實施的伴箩。與原來的LVM出了名稱和首字母縮寫意外是沒有任何的共同之處的。老的(現(xiàn)在追溯命名為“LVM1”)是過時了的荠呐,這在本節(jié)中未涉及赛蔫。
使用LVM時砂客,重要的是要了解其最基本的概念:
物理卷(PV)泥张。一個物理卷(PV)是一個完全由LVM管理的底層塊設(shè)備。PV可是單個磁盤或者是單個分區(qū)鞠值。常見是在磁盤上創(chuàng)建一個分區(qū)專門被linux的LVM使用媚创。
備注
這個分區(qū)類型“Linux LVM”(簽名 0x8e)可用于識別單獨使用的LVM分區(qū)。然而彤恶,這不是必須的—LVM認可物理卷設(shè)備初始化后的書面簽名的方式钞钙。
卷組(VG)。一個卷組(VG)是LVM的基本管理單元声离。一個VG可能包括一個或多個幾的PV芒炼。每個VG都有一個唯一的名稱。VG可以在運行時添加額外的PV术徊,或擴大現(xiàn)有的PV本刽。
邏輯卷(LV)。LV可在運行期間的VG內(nèi)創(chuàng)建,并且對內(nèi)核的其他部分可視為常規(guī)塊設(shè)備子寓。因此暗挑,它們可用來保存一個文件系統(tǒng),或者用于其他任何目的的塊設(shè)備斜友。LV可以在線調(diào)整大小炸裆,也可以從一個PV轉(zhuǎn)移到另外一個上(只要PV屬于相同的VG)。
快照邏輯卷(SLV)鲜屏∨肟矗快照是暫時的LV的時間點副本。創(chuàng)建快照幾乎是瞬間就完成的洛史,即使原來的LV(原點卷)有大小數(shù)百GiByte听系。通常情況下,快照需要的空間大大低于原來的LV虹菲。
圖10.1靠胜。 LVM的概述
10.2使用邏輯卷(LV)作為drbd的后端設(shè)備
在linux上由于邏輯卷(LV)是一個簡單的塊設(shè)備,因此它可作為drbd設(shè)備使用毕源。要以這種方式使用LV浪漠,只需要創(chuàng)建然后像其他的設(shè)備一樣進行初始化即可。
在這個例子中假設(shè)卷組(vg)名為foo已經(jīng)在存在在兩個LVM系統(tǒng)的節(jié)點上霎褐,就可以在該VG上使用LVM創(chuàng)建一個名為r0的drbd資源址愿。
首先,創(chuàng)建邏輯卷:
lvcreate --name bar --size 10G foo
Logical volume "bar" created
當(dāng)然冻璃,需要在兩個drbd集群的節(jié)點上都運行以上命令响谓,之后在兩個節(jié)點上都應(yīng)該會產(chǎn)生一個名為/dev/foo/bar的塊設(shè)備。
然后省艳,可以在資源中配置中輸入新創(chuàng)建的卷:
resource r0 {
...
on alice {
device /dev/drbd0;
disk /dev/foo/bar;
...
}
on bob {
device /dev/drbd0;
disk /dev/foo/bar;
...
}
}
現(xiàn)在可以像沒有LVM塊設(shè)備一樣繼續(xù)啟動資源娘纷。
10.3 DRBD的同步過程中使用自動化LVM快照
盡管drbd是同步的,但是SyncTarget同步目標的狀態(tài)會直到同步完成前都會是Inconsistent狀態(tài)跋炕。如果在這種情況下SyncSource同步源發(fā)生故障(無法修復(fù))赖晶,則將是非常不幸的。有好數(shù)據(jù)的節(jié)點是死的辐烂,而有壞數(shù)據(jù)的節(jié)點是存活的遏插。
drbd使用LVM邏輯卷可通過創(chuàng)建一個自動化的快照啟動同步,并刪除成功同步后的相同的快照纠修,從而減輕這個問題帶來的損失胳嘲。
為了使用快照自動同步,需要在資源中添加如下配置:
DRBD自動化同步前的快照扣草。
resource r0 {
handlers {
before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh";
after-resync-target "/usr/lib/drbd/unsnapshot-resync-target-lvm.sh";
}
}
兩個腳本解析$DRBD_RESOURCE$環(huán)境變量了牛,drbd將之傳遞給任何它調(diào)用的處理程序吁系。snapshot-resync-target-lvm.sh腳本在同步開始前創(chuàng)建一個包含所有資源的LVM的快照,在這種情況下白魂,如果腳本失敗汽纤,則不進行同步。
一旦同步完成福荸,unsnapshot-resync-target-lvm.sh腳本自動刪除不需要快照蕴坪,如果刪除快照失敗,快照將繼續(xù)存在敬锐。
重要
應(yīng)該盡快審查搖擺不定的快照背传。一個完整的快照會導(dǎo)致快照本身和來源的失敗。
任何時候出現(xiàn)SyncSource同步源不能修復(fù)的故障台夺,并且你決定恢復(fù)到最新的對等節(jié)點的最近的快照径玖,就可使用使用的lvconvert –M命令。
10.4 使用物理卷PV配置drbd資源
為了準備一個使用物理卷作為DRBD資源颤介,必須在DRBD設(shè)備上創(chuàng)建一個PV簽名梳星。為了做到這一點,在主角色的節(jié)點上運行一下命令:
pvcreate /dev/drbdX
或者是
pvcreate /dev/drbd/by-res/<resource>/0
備注
本例中假設(shè)是一個單卷的資源滚朵。
目前LVM掃描包括該設(shè)備在內(nèi)的PV簽名是必需的冤灾。為了重要做,需要編輯LVM的配置文件辕近,其通常為/etc/lvm/lvm.conf韵吨、找到包括過濾關(guān)鍵字在內(nèi)的設(shè)備部分進行在線編輯,如果所有的PV都存儲在drbd設(shè)備上移宅,下面則為一個合適的過濾選項:
filter = [ "a|drbd.|", "r|.|" ]
這種過濾器表示接受任何在DRBD設(shè)備上找到的簽名归粉,而拒絕其他的。
備注
默認情況下漏峰,LVM掃描所有在/dev的PV簽名的所有塊設(shè)備糠悼。這相當(dāng)于filter = [ "a|.*|" ].
如果想使用堆疊的資源為LVM的PV,那就需要一個明確的過濾器配置芽狗。需要確保LVM在堆疊的資源上探測到PV簽名绢掰,而忽略與之對應(yīng)的地產(chǎn)的資源和后端塊設(shè)備。本例假設(shè)底層的drbd資源使用設(shè)備從0到9童擎,而在堆疊的資源上則是10以上的:
filter = [ "a|drbd1[0-9]|", "r|.*|" ]
這種過濾器表示只接受在drbd設(shè)備/dev/drbd10到/dev/drbd19以內(nèi)的PV簽名,而忽略其他的攻晒。
在修改lvm.conf文件后顾复,必須運行vgscan命令使LVM丟棄他的配置緩存并重新掃描設(shè)備的PV簽名。
當(dāng)然也可以使用不同的過濾器配置鲁捏,以滿足特定系統(tǒng)的配置芯砸。但是千萬要注意:
接受(含)你希望作為PV的drbd設(shè)備
拒絕(不包含)相應(yīng)底層的設(shè)備,以避免LVM發(fā)現(xiàn)重復(fù)的PV簽名。
此外假丧,通過設(shè)置禁用LVM緩存:
write_cache_state = 0
急用LVM緩存后双揪,確保要刪除/etc/lvm/cache/.cache.中任何過時的緩存。
必須對等節(jié)點上重復(fù)上述步驟包帚。
當(dāng)配置新的PV后渔期,可以繼續(xù)將它添加到卷組,或從它創(chuàng)建一個新的卷組渴邦。 在主節(jié)點上注意操作drbd資源是必須的疯趟。
vgcreate <name> /dev/drbdX
備注
雖然可在一個卷組中混用DRBD和非DRBD卷組,但是這不推薦并且也不具有任何實用價值谋梭。
當(dāng)創(chuàng)建VG后信峻,必須使用lvcreate命令操作邏輯卷(與非基于drbd的卷組)
10.5 在現(xiàn)有卷組中添加一個新的DRBD卷
有時可能想在VG中添加一個新的drbd支持的物理卷,每當(dāng)這樣做時瓮床,一個新的卷就應(yīng)該添加到現(xiàn)有的資源配置中盹舞。這將保留所有的VG中PV的寫保真度。
重要
如果LVM卷組是由Pacemaker管理的隘庄,可參見10.7節(jié)“高可用LVM Pacemaker”矾策。它必須在維護模式改變前對drbd進行配置更改。
在本例中峭沦,擴展包括額外卷的資源的配置:
resource r0 {
volume 0 {
device /dev/drbd1;
disk /dev/sda7;
meta-disk internal;
}
volume 1 {
device /dev/drbd2;
disk /dev/sda8;
meta-disk internal;
}
on alice {
address 10.1.1.31:7789;
}
on bob {
address 10.1.1.32:7789;
}
}
確保您的DRBD配置在每個節(jié)點上都是相同贾虽,然后執(zhí)行如下命令:
drbdadm new-minor r0 1
這將保證資源r0為新的第一卷。一旦新的卷被添加到復(fù)制流吼鱼,就需要初始化然后將它添加到卷組中:
pvcreate /dev/drbd/by-res/<resource>/1
lvextend <name> /dev/drbd/by-res/<resource>/1
這將新增PV /dev/drbd/by-res/<resource>/1到<name>VG蓬豁,維護整個VG的寫保真度。
10.6 嵌套的LVM配置與DRBD
如果有可能菇肃,稍微先進點可即使用LV作為drbd的后端設(shè)備地粪,又同時使用drbd設(shè)備本身作為PV。為提供一個例子可參見如下配置:
有兩個分別名為/dev/sda1和/dev/sda2準備作為物理卷使用的分區(qū)
兩個PV都可作為本地卷組的一部分
意圖咋該VG中創(chuàng)建一個名為r0的10Gib的LV
這個LV將成為drbd資源的本地也命名為r0的備份設(shè)備琐谤,對應(yīng)設(shè)備未/dev/drbd0
該設(shè)備將是對另一個名為replicated的VG的唯一PV
這個VG包含兩個LV蟆技,分別名為foo(4GiB)he bar(6GiB)
為了使此配置,請按照下列步驟操作:
在/etc/ LVM/lvm.conf中設(shè)置一個適當(dāng)?shù)倪^濾器選項:
indexterm:[LVM]indexterm:[filter expression (LVM)]
filter = ["a|sd.|", "a|drbd.|", "r|.*|"]
該過濾器表示接受任何scsi和drbd設(shè)備上的PV簽名斗忌,而拒絕其他所有的质礼。
在修改lvm.conf文件后,必須運行vgscan命令使LVM丟棄緩存的配置并重新掃描設(shè)備的PV簽名织阳。
通過設(shè)置禁用LVM緩存:
write_cache_state = 0
急用LVM緩存后眶蕉,確保要刪除/etc/lvm/cache/.cache.中任何過時的緩存。
必須對等節(jié)點上重復(fù)上述步驟唧躲。
現(xiàn)在就可初始化兩個scsi的分區(qū)為PV:
pvcreate /dev/sda1
Physical volume "/dev/sda1" successfully created
pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
下一步是創(chuàng)建本地底層的VG造挽,包括剛才初始化的兩個PV:
vgcreate local /dev/sda1 /dev/sda2
Volume group "local" successfully created
現(xiàn)在可以創(chuàng)建LV作為drbd的后端設(shè)備:
lvcreate --name r0 --size 10G local
Logical volume "r0" created
在這里復(fù)制所有的步驟到對等節(jié)點上
然后編輯/etc/drbd.conf創(chuàng)建一個名為r0的資源:
resource r0 {
device /dev/drbd0;
disk /dev/local/r0;
meta-disk internal;
on <host> { address <address>:<port>; }
on <host> { address <address>:<port>; }
}
在創(chuàng)建好新的資源配置后千萬要注意將drbd.conf復(fù)制到對等節(jié)點碱璃。
在此之后,可參見5.4節(jié)“首次啟用資源”初始化資源(在兩個節(jié)點上)饭入。
之后在一個節(jié)點上晉升資源:
drbdadm primary r0
現(xiàn)在嵌器,在剛晉升的資源節(jié)點上拼坎,將drbd設(shè)備初始化為一個新的物理卷:
pvcreate /dev/drbd0
Physical volume "/dev/drbd0" successfully created
創(chuàng)建名為replicated的VG痘儡,在同一節(jié)點上初始化PV:
vgcreate replicated /dev/drbd0
Volume group "replicated" successfully created
最后,在新創(chuàng)建的VG上創(chuàng)建新的LV:
lvcreate --name foo --size 4G replicated
Logical volume "foo" created
lvcreate --name bar --size 6G replicated
Logical volume "bar" created
邏輯卷foo和bar將以/dev/replicated/foo 和 /dev/replicated/bar的形式出現(xiàn)在本地節(jié)點上:
vgchange -a n replicated
0 logical volume(s) in volume group "replicated" now active
drbdadm secondary r0
然后卒密,對等節(jié)點上發(fā)出以下命令:
drbdadm primary r0
vgchange -a y replicated
2 logical volume(s) in volume group "replicated" now active
在此之后庇谆,塊設(shè)備/dev/replicated/foo 和 /dev/replicated/bar將在對等節(jié)點可用岳掐。
10.7 高可用LVM Pacemaker
對等節(jié)點間傳輸卷組,并提供相應(yīng)的邏輯卷的過程實現(xiàn)自動化饭耳。Pacemaker LVM資源代理正是以此為目的而設(shè)計的串述。
為了管理存在的支持drbd卷組的管理下,在shell中運行以下命令:
DRBD支持LVM卷組的Pacemaker配置
primitive p_drbd_r0 ocf:linbit:drbd \
params drbd_resource="r0" \
op monitor interval="15s"
ms ms_drbd_r0 p_drbd_r0 \
meta master-max="1" master-node-max="1" \
clone-max="2" clone-node-max="1" \
notify="true"
primitive p_lvm_r0 ocf:heartbeat:LVM \
params volgrpname="r0"
colocation c_lvm_on_drbd inf: p_lvm_r0 ms_drbd_r0:Master
order o_drbd_before_lvm inf: ms_drbd_r0:promote p_lvm_r0:start
commit
當(dāng)完成該設(shè)置后寞肖,Pacemaker將自動使r0卷組在任何drbd資源當(dāng)前為主角色節(jié)點上可用纲酗。
11 使用drbd結(jié)合GFS
目錄
11.1 GFS 引子
11.2 創(chuàng)建適用于GFS的drbd資源
11.3 配置LVM認識的drbd資源
11.4 配置支持GFS的集群
11.5 創(chuàng)建一個GFS文件系統(tǒng)
11.6 使用GFS文件系統(tǒng)
本章概述以塊設(shè)備共享全局文件系統(tǒng)(GFS)建立一個drbd資源的必要步驟。它涵蓋了GFS和GFS2新蟆。
如果在drbd上使用GFS觅赊,必須配置drbd為雙主模式。
11.1 GFS 引子
紅帽全局文件系統(tǒng)(GFS)是紅帽執(zhí)行并發(fā)訪問共享存儲文件系統(tǒng)的琼稻。因為任何這樣的文件系統(tǒng)吮螺,GFS允許多個基點訪問相同的存儲設(shè)備,在讀寫方面不用擔(dān)心數(shù)據(jù)損壞帕翻。它是通過分布式鎖管理器(DLM)管理集群成員的并發(fā)訪問的鸠补。
GFS從一開始涉及的目的就是像傳統(tǒng)的共享存儲設(shè)備使用。因此drbd是完全可能在雙主模式下將GFS作為復(fù)制的存儲設(shè)備的嘀掸。應(yīng)用程序可能會受益于減少drbd整讀寫到本地存儲紫岩,而不是通常配置運行的SAN設(shè)備GFS。此外drbd對每個GFS文件系統(tǒng)增加一個額外的物理考慮睬塌,從而保證了冗余泉蝌。
GFS使用LVM的集群感知的變體,稱作集群邏輯卷管理器或CLVM揩晴。因此勋陪,一些并發(fā)存在在使用drbd作為GFS的數(shù)據(jù)存儲和使用drbd作為傳統(tǒng)LVM的PV之間。
通常GFS文件是集成在紅帽的集群管理的框架內(nèi)的文狱,即紅帽集群粥鞋。本章介紹在紅帽集群中使用DRBD和GFS。
GFS瞄崇、CLVM和紅帽集群在RHEL以及從它所衍生出來的CentOS中是可用的呻粹。同樣對于Debian GNU/Linux也有相應(yīng)的安裝包。本章加上在紅帽企業(yè)Linux(RHEL)中運行GFS苏研。
11.2 創(chuàng)建適用于GFS的drbd資源
由于GFS是一個集群文件系統(tǒng)等浊,期望從所有的集群節(jié)點進行并發(fā)的讀和寫,任何用于存儲GFS文件系統(tǒng)的drbd資源都必須配置為雙主模式摹蘑。此外筹燕,它建議使用drbd的特性自動處理裂腦的自動恢復(fù)。將資源在啟動后立即切換到主角色是非常必要的衅鹿。為了做到這一些撒踪,如下在資源中配置如下行:
resource <resource> {
startup {
become-primary-on both;
...
}
net {
allow-two-primaries yes;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
...
}
...
}
一旦添加了上面的這些新選項,就需要像往常一樣初始化資源大渤。由于資源的allow-two-primaries選項設(shè)置的為yes制妄,因此能同時晉升兩個節(jié)點的資源為主角色。
11.3 配置LVM認識的drbd資源
GFS使用CLVM泵三,即VLM的集群變種版本耕捞,管理GFS使用的塊設(shè)備。為了drbd使用CLVM烫幕,需要配置LVM俺抽。
使用集群鎖〗下可在/etc/lvm/lvm.conf中配置如下選項:
locking_type = 3
掃描drbd設(shè)備磷斧,使之從新識別基于drbd的物理卷(PV)。這同樣適用于傳統(tǒng)的(非集群)的LVM捷犹。參見10.4節(jié)“使用物理卷PV配置drbd資源”了解詳細內(nèi)容弛饭。
11.4 配置支持GFS的集群
在創(chuàng)建新的drbd資源并完成初始化配置,在GFS集群的兩個節(jié)點必須確保并啟動一下系統(tǒng)服務(wù):
cman(它同時啟動ccsd和fencend)
clvmd.
11.5 創(chuàng)建一個GFS文件系統(tǒng)
為了在雙主的drbd資源上創(chuàng)建一個GFS文件系統(tǒng)伏恐,就必要先初始化它作為LVM的邏輯卷(LV)孩哑。
與傳統(tǒng)的相反,非集群感知LVM配置翠桦,由于CLVM的集群感知性必須只在一個節(jié)點上完成下列步驟:
pvcreate /dev/drbd/by-res/<resource>/0
Physical volume "/dev/drbd<num>" successfully created
vgcreate <vg-name> /dev/drbd/by-res/<resource>/0
Volume group "<vg-name>" successfully created
lvcreate --size <size> --name <lv-name> <vg-name>
Logical volume "<lv-name>" created
備注
這個例子假設(shè)一個單卷的資源横蜒。
CLVM會立即通知對等節(jié)點這些變化;對等節(jié)點發(fā)出的LVS(或lvdisplay)將列出新創(chuàng)建的邏輯卷销凑。
現(xiàn)在可以創(chuàng)建實際的文件系統(tǒng):
mkfs -t gfs -p lock_dlm -j 2 /dev/<vg-name>/<lv-name>
或者是一個GFS2文件系統(tǒng):
mkfs -t gfs2 -p lock_dlm -j 2 -t <cluster>:<name>
/dev/<vg-name>/<lv-name>
在此命令中-j選項是指為GFS所保持的journals的數(shù)量丛晌。這必須和GFS集群中節(jié)點數(shù)量相同的,由于drbd不支持對于兩個的節(jié)點斗幼,因此這里設(shè)置的值為2.
-t選項只適用于GFS2文件系統(tǒng)澎蛛,定義所表的名稱。其格式如下<cluster>:<name>,這里<cluster>必須匹配在/etc/cluster/cluster.conf中定義的集群名蜕窿。因此谋逻,只有該集群成員被允許使用文件系統(tǒng)呆馁。相反<name>是集群中的獨特的任意一個文件系統(tǒng)的名稱。
11.6 使用GFS文件系統(tǒng)
在創(chuàng)建文件紫銅后毁兆,必須將之添加到/etc/fstab:
/dev/<vg-name>/<lv-name> <mountpoint> gfs defaults 0 0
而對于GFS2文件系統(tǒng)浙滤,只需要更改定義的文件系統(tǒng)的類型即可:
/dev/<vg-name>/<lv-name> <mountpoint> gfs2 defaults 0 0
千萬不要忘記以上操作需要在兩個節(jié)點上進行的。
在此之后气堕,就可以啟動GFS服務(wù)掛載新的文件系統(tǒng)(在兩個節(jié)點上):
service gfs start
從此時起纺腊,只要系統(tǒng)啟動時drbd配置自動在RHCS服務(wù)器和GFS服務(wù)前,就可使用GFS文件系統(tǒng)就像在普通的共享存儲上設(shè)置一樣茎芭。
12 使用OCFS2整合DRBD
目錄
12.1 OCFS2引子
12.2創(chuàng)建一個適用于OCFS2的DRBD資源
12.3 創(chuàng)建OCFS2文件系統(tǒng)
12.4 Pacemaker OCFS2管理
12.4.1 給Pacemaker增加一個雙主模式的資源
12.4.2 Pacemaker增加對OCFS2的管理能力
12.4.3 給Pacemaker添加OCFS2文件系統(tǒng)
12.4.4 增加要求的Pacemaker約束管理OCFS2文件系統(tǒng)
12.5 傳統(tǒng)的OCFS2管理(不含Pacemaker)
12.5.1 配置集群支持OCFS2
12.5.2 使用OCFS2文件系統(tǒng)
12.1 OCFS2引子
Oracle集群文件系統(tǒng)2版本(OCFS2)是有甲骨文公司開發(fā)的并發(fā)訪問共享存儲的文件系統(tǒng)揖膜。不同于其前任OCFS是專門設(shè)計并只適應(yīng)Oracle數(shù)據(jù)庫的有效載荷,OCFS2是一個通用的實現(xiàn)了大多POSIX的標準的文件系統(tǒng)梅桩。ORACLE真正應(yīng)用集群(RAC)是OCFS2的比較常見的用例壹粟,但是OCFS2同樣可以使用在負載均衡的NFS集群。
盡管最初設(shè)計是使用傳統(tǒng)的共享存儲設(shè)備摘投,OCFS2也同樣是適用于部署雙主drbd的煮寡。從文件系統(tǒng)讀取的應(yīng)用程序可能會受益于降低讀延遲,因為DRBD從本地存儲讀和寫犀呼,而不是正常運行的SAN設(shè)備OCFS2上幸撕。另外,DRBD以增加格外的每個文件系統(tǒng)鏡像增加OCFS2的冗余外臂,而不是單一的文件系統(tǒng)鏡像(也即共享)坐儿。
和其他的共享集群文件系統(tǒng)如GFS,OCFS2允許多個節(jié)點在讀寫模式下訪問相同的存儲設(shè)備宋光,而不用擔(dān)心數(shù)據(jù)損壞貌矿。同時使用分布式鎖管理器(DLM)管理集群節(jié)點的并發(fā)訪問。DLM本身的使用一個虛擬文件系統(tǒng)(ocfs2_dlmfs)罪佳,它獨立于實際OCFS2文件系統(tǒng)存在于系統(tǒng)逛漫。
OCFS2即可以一種內(nèi)在的集群通信層也可以掛載和卸載的文件系統(tǒng)進行操作來管理集群成員,或者是推遲Pacemaker集群執(zhí)行這些任務(wù)赘艳。
OCFS2是在SUSE Linux企業(yè)服務(wù)器(它主要是支持共享的集群文件系統(tǒng))酌毡,centos、Debian GNU/Linux, 和Ubuntu Server Edition可用蕾管。Oracle還同樣為紅帽企業(yè)版linux(RHEL)提供了包枷踏。本章假定OCFS2是運行在SUSE linux企業(yè)服務(wù)器系統(tǒng)上的。
12.2創(chuàng)建一個適用于OCFS2的DRBD資源
由于OCFS2是一個共享集群文件系統(tǒng)期望于并發(fā)讀寫在所有的節(jié)點上掰曾,所有的drbd資源都必須配置為雙主模式用于存儲OCFS文件系統(tǒng)旭蠕。此外,建議使用drbd的一些特性,配置裂腦自動修復(fù)掏熬。而且啟動之后立即切換到主角色也是必要的佑稠。要做到這些可用按照以下方式配置資源:
resource <resource> {
startup {
become-primary-on both;
...
}
net {
# allow-two-primaries yes;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
...
}
...
}
在初始化配置前是不建議設(shè)置allow-two-primaries為yes的,而是應(yīng)該在初始化資源同步完成后這樣做孽江。
一旦你添加了這些選項用于刷新資源的配置讶坯,就可正常的初始化資源番电。當(dāng)設(shè)置該資源的allow-two-primaries選項為yes后岗屏,就可在兩個節(jié)點上都晉升資源為主角色。
12.3 創(chuàng)建OCFS2文件系統(tǒng)
現(xiàn)在使用OCFS2的mkfs命令創(chuàng)建文件系統(tǒng):
mkfs -t ocfs2 -N 2 -L ocfs2_drbd0 /dev/drbd0
mkfs.ocfs2 1.4.0
Filesystem label=ocfs2_drbd0
Block size=1024 (bits=10)
Cluster size=4096 (bits=12)
Volume size=205586432 (50192 clusters) (200768 blocks)
7 cluster groups (tail covers 4112 clusters, rest cover 7680 clusters)
Journal size=4194304
Initial number of node slots: 2
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 0 block(s)
Formatting Journals: done
Writing lost+found: done
mkfs.ocfs2 successful
這將在兩個節(jié)點上的/dev/drbd0上創(chuàng)建一個OCFS2文件系統(tǒng)漱办,并設(shè)置文件系統(tǒng)的標簽為ocfs2_drbd0这刷。也可以在mkfs時指定其他選項,請參閱mkfs.ocfs2系統(tǒng)手冊了解詳細內(nèi)容娩井。
12.4 Pacemaker OCFS2管理
12.4.1 給Pacemaker增加一個雙主模式的資源
添加一個存在的雙主模式的drbd資源為Pacemaker資源資源暇屋,使用如下drm配置:
primitive p_drbd_ocfs2 ocf:linbit:drbd \
params drbd_resource="ocfs2"
ms ms_drbd_ocfs2 p_drbd_ocfs2 \
meta master-max=2 clone-max=2 notify=true
重要
注意master-max=2變量,對Pacemaker的主從設(shè)置啟用雙主模式洞辣。要求drbd的資源配置allow-two-primaries選項需要設(shè)置為yes咐刨。否則,Pacemaker會在資源校驗時報配置錯誤扬霜。
12.4.2 Pacemaker增加對OCFS2的管理能力
為了管理OCFS2和內(nèi)核分布鎖管理(DLM)定鸟,Pacemaker使用一下三種不同的資源代理:
ocf:pacemaker:controld---Pacemaker的DLM接口
ocf:ocfs2:o2cb---Pacemaker對OCFS2集群管理的接口
ocf:heartbeat:Filesystem---當(dāng)配置Pacemaker克隆支持集群文件系統(tǒng)的通用文件系統(tǒng)管理的資源代理。
使用一下crm配置著瓶,在所有的Pacemaker OCFS2集群管理的節(jié)點上創(chuàng)建一克隆組的資源:
primitive p_controld ocf:pacemaker:controld
primitive p_o2cb ocf:ocfs2:o2cb
group g_ocfs2mgmt p_controld p_o2cb
clone cl_ocfs2mgmt g_ocfs2mgmt meta interleave=true
一旦完成這個配置联予,Pacemaker會在集群所有的節(jié)點上啟動controld和o2cb資源類型的實例。
12.4.3 給Pacemaker添加OCFS2文件系統(tǒng)
雖然在clone模式下Pacemaker使用傳統(tǒng)的ocf:heartbeat:Filesystem資源代理管理OCFS2文件系統(tǒng)材原。為使OCFS2文件系統(tǒng)在Pacemaker的管理下沸久,使用一下crm配置:
primitive p_fs_ocfs2 ocf:heartbeat:Filesystem \
params device="/dev/drbd/by-res/ocfs2/0" directory="/srv/ocfs2" \
fstype="ocfs2" options="rw,noatime"
clone cl_fs_ocfs2 p_fs_ocfs2
注意
這個例子假設(shè)一個單卷的資源
12.4.4 增加要求的Pacemaker約束管理OCFS2文件系統(tǒng)
為了將所有的OCFS2相關(guān)的資源和clone的資源配合在一起,對Pacemaker配置添加一下約束:
order o_ocfs2 ms_drbd_ocfs2:promote cl_ocfs2mgmt:start cl_fs_ocfs2:start
colocation c_ocfs2 cl_fs_ocfs2 cl_ocfs2mgmt ms_drbd_ocfs2:Master
12.5 傳統(tǒng)的OCFS2管理(不含Pacemaker)
重要
在本節(jié)中介紹的信息適用于傳統(tǒng)系統(tǒng)余蟹,在Pacemaker中OCFS2的DLM不可用卷胯。它被保存在這里僅供參考。新裝置應(yīng)始終使用Pacemaker的方法威酒。
12.5.1 配置集群支持OCFS2
12.5.1.1創(chuàng)建配置文件
OCFS2使用中央配置文件/etc/ocfs2/cluster.conf窑睁。
當(dāng)創(chuàng)建OCFS2集群,一定要添加hosts到集群配置中兼搏。集群相互通信默認端口(7777)通常是可選擇的卵慰。如果你選擇了任何其他的端口,一定要注意選擇的drbd端口不能和其他的相沖突佛呻。
如果感覺直接編輯clust.conf不方便裳朋,也可以使用ocfs2console圖像化配置工具進行配置。無論選擇那種方法,your /etc/ocfs2/cluster.conf文件都會大致如下:
node:
ip_port = 7777
ip_address = 10.1.1.31
number = 0
name = alice
cluster = ocfs2
node:
ip_port = 7777
ip_address = 10.1.1.32
number = 1
name = bob
cluster = ocfs2
cluster:
node_count = 2
name = ocfs2
當(dāng)配置好集群的配置鲤嫡,使用scp將其拷貝到集群的其他的兩個節(jié)點送挑。
12.5.1.1 配置O2CB驅(qū)動程序
======的SUSE Linux Enterprise系統(tǒng)
在SLES中,可能會利用O2CB init腳本的配置選項:
/etc/init.d/o2cb configure
Configuring the O2CB driver.
This will configure the on-boot properties of the O2CB driver.
The following questions will determine whether the driver is loaded on
boot. The current values will be shown in brackets ('[]'). Hitting
<ENTER> without typing an answer will keep that current value. Ctrl-C
will abort.
Load O2CB driver on boot (y/n) [y]:
Cluster to start on boot (Enter "none" to clear) [ocfs2]:
Specify heartbeat dead threshold (>=7) [31]:
Specify network idle timeout in ms (>=5000) [30000]:
Specify network keepalive delay in ms (>=1000) [2000]:
Specify network reconnect delay in ms (>=2000) [2000]:
Use user-space driven heartbeat? (y/n) [n]:
Writing O2CB configuration: OK
Loading module "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading module "ocfs2_nodemanager": OK
Loading module "ocfs2_dlm": OK
Loading module "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster ocfs2: OK
======的Debian GNU/ Linux系統(tǒng)Debian上暖眼,配置選項/ etc/init.d/o2cb是不可用的惕耕。相反,重新配置OCFS2工具包的驅(qū)動:
dpkg-reconfigure -p medium -f readline ocfs2-tools
Configuring ocfs2-tools
Would you like to start an OCFS2 cluster (O2CB) at boot time? yes
Name of the cluster to start at boot time: ocfs2
The O2CB heartbeat threshold sets up the maximum time in seconds that a node
awaits for an I/O operation. After it, the node "fences" itself, and you will
probably see a crash.
It is calculated as the result of: (threshold - 1) x 2.
Its default value is 31 (60 seconds).
Raise it if you have slow disks and/or crashes with kernel messages like:
o2hb_write_timeout: 164 ERROR: heartbeat write timeout to device XXXX after NNNN
milliseconds
O2CB Heartbeat threshold: 31
Loading filesystem "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading stack plugin "o2cb": OK
Loading filesystem "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Setting cluster stack "o2cb": OK
Starting O2CB cluster ocfs2: OK
12.5.2 使用OCFS2文件系統(tǒng)
當(dāng)完成集群配置并創(chuàng)建文件系統(tǒng)诫肠,就可像其他的文件系統(tǒng)一樣掛載:
mount -t ocfs2 /dev/drbd0 /shared
內(nèi)核日志(使用dmesg命令)應(yīng)包含類似的如下行:
ocfs2: Mounting device (147,0) on (node 0, slot 0) with ordered data mode.
在此之前司澎,在讀寫模式下,應(yīng)該同時在兩個節(jié)點上掛載OCFS2文件系統(tǒng)栋豫。
13 使用Xen整合drbd
目錄
13.1 Xen 引子
13.2 Xen下設(shè)置drbd的模塊參數(shù)
13.3 創(chuàng)建適用于Xen VBD的DRBD資源
13.4 使用DRBD的VBD
13.5 啟動挤安,停止和遷移DRBD支持的domU
13.6 DRBD/Xen的內(nèi)部整合
13.7 集成Xen和Pacemaker
本章概括了在XEN虛擬環(huán)境中使用drbd作為虛擬塊設(shè)備。
13.1 Xen 引子
Xen是最初是由英國劍橋大學(xué)開發(fā)丧鸯,后由XenSource公司(現(xiàn)在是Citrix的一部分)維護的一個虛擬化的框架蛤铜。它包含在大多數(shù)的linux發(fā)行版,如Debian GUN/Linux(從第四版后)丛肢、SUSE企業(yè)linux服務(wù)器(從第十版后)围肥、紅帽企業(yè)linux(從第五版之后)等等。
Xen使用準虛擬化技術(shù)---虛擬化的方法涉及虛擬主機和客戶虛擬機之間的高度合作---比傳統(tǒng)的虛擬化解決方案(如典型的基于硬件的仿真)提高了選定的客戶操作系統(tǒng)的性能蜂怎。Xen同時還支持適當(dāng)虛擬化擴展CPU穆刻,支持完整的硬件仿真,用Xen的說法派敷,這就是眾所周知的HVM(硬件輔助虛擬機)蛹批。
注意
在寫操作時,Xen支持HVM的CPU擴展是Intel的虛擬化技術(shù)(VT篮愉,以前稱為Vanderpool)和AMD的 安全虛擬機(SVM腐芍,以前稱為Pacifica)。
Xen支持實時遷移试躏,這是指從一個屋里主機遷移到來賓操作系統(tǒng)中猪勇,而不造成中斷。
當(dāng)drbd資源作為Xen的復(fù)制虛擬塊設(shè)備時颠蕴,它可用在兩臺服務(wù)器上高帖,然后配置為自動故障轉(zhuǎn)移到一個包含全部內(nèi)容的domU虛擬磁盤摊腋。在這種方式下装悲,DRBD不僅僅在linux服務(wù)器下(在非虛擬化的drbd技術(shù)的部署方案)贱除,而且在其他的任何操作系統(tǒng)都可使用Xen虛擬化技術(shù)實現(xiàn)冗余。在本質(zhì)上寡键,它包括32位和64位intel兼容的框架掀泳。
13.2 Xen下設(shè)置drbd的模塊參數(shù)
對于Xen Domain-0內(nèi)核,建議加載drbd模塊設(shè)置為1.創(chuàng)建或者是打開/etc/modprobe.d/drbd.conf文件,然后輸入如下行:
options drbd disable_sendpage=1
13.3 創(chuàng)建適用于Xen VBD的DRBD資源
將drbd資源配置為Xen虛擬化塊設(shè)備是比較簡單的员舵。事實上脑沿,典型的drbd配置可用于任何目的。但是马僻,如果想使guest實例實時遷移的話庄拇,就需要啟用資源的雙主模式。
resource <resource> {
net {
allow-two-primaries yes;
...
}
...
}
對Xen來說是必須啟用雙主模式的韭邓,在啟動遷移前措近,檢查所有VBD資源配置的來源和目的地主機的寫權(quán)限。
13.4 使用DRBD的VBD
為使用虛擬塊設(shè)備做drbd資源仍秤,必須在en domU的配置中添加如下行:
disk = [ 'drbd:<resource>,xvda,w' ]
這個配置例子中熄诡,命名為resource的drbd資源/dev/xvda在讀寫模式下對DomU可用。
當(dāng)然也可是一個單一的domU私用多個drbd資源诗力。這種情況下,需要添加剛那個多的條目我抠,并以分號將磁盤選項隔開苇本。
注意
有以下三種情況不能使用這種方法:
正在配置一個全虛擬化(HVM)的DomU
正使用圖形化安裝工具安裝DomU并且高圖形化安裝不支持drbd的語法
正配置一個DomU,無kernel菜拓、initrd和額外的選項瓣窄,以引導(dǎo)和bootloader_args使用不支持drbd的語法Xen pseudo-bootloader,pseudo-bootloader。
pygrub+(之前的Xen3.3)和domUloader.py(使用Xen的SUSE Linux Enterprise Server 10的運)兩個偽引導(dǎo)程序不支持DRBD的虛擬塊設(shè)備的配置語法的例子纳鼎。
pygrub從Xen3.3開始俺夕,domUloader.py版本SLES 11的附帶支持這個語法。
在這種情況下贱鄙,必須使用傳統(tǒng)的PHY設(shè)備語法和DRBD設(shè)備的名稱和資源劝贸,而不是資源的名稱相關(guān)聯(lián)的。然而逗宁,這需要管理DRBD之外的Xen映九,這是一個DRBD資源類型提供的狀態(tài)轉(zhuǎn)換靈活的方式。
13.5 啟動瞎颗,停止和遷移DRBD支持的domU
啟動domU件甥。當(dāng)配置DRBD支持domU,就可以像其他的任何DomU一樣的方式啟動:
xm create <domU>
Using config file "+/etc/xen/<domU>+".
Started domain <domU>
在這個過程中配置為VBD的drbd資源將被晉升為主角色哼拔,并能被Xen訪問引有。
停止domU。操作簡單如下:
xm shutdown -w <domU>
Domain <domU> terminated.
在domU成功關(guān)閉后倦逐,Drbd資源會轉(zhuǎn)變?yōu)榇谓巧?/p>
遷移domU譬正。通常使用Xen工具:
xm migrate --live <domU> <destination-host>
這種情況下,自動快速并連續(xù)的采取若干管理步驟。晉升目標主機的資源為主角色—本地主機上的實時遷移domU啟動---當(dāng)完成到目標主機的遷移本地主機的資源變成次角色导帝。
事實上資源必須在兩個主機上都處于主角色守谓,這也是將資源配置為雙主模式的首要原因。
13.6 DRBD/Xen的內(nèi)部整合
Xen本身支持兩種虛擬塊設(shè)備類型:
Phy您单。此設(shè)備類型用于交互物理塊設(shè)備斋荞,用于主機環(huán)境中,以實際透明的方式關(guān)閉guest domU虐秦。
File平酿。次設(shè)備類型用于提供給guest domU基于文件的塊設(shè)備鏡像。它的工作原理是創(chuàng)建一個循環(huán)塊設(shè)備悦陋,從原始圖像文件取出蜈彼,然后交給該塊設(shè)備,并以和PHY大致相同的方式關(guān)閉domU俺驶。
如果在domU的disk選項中配置一個虛擬塊設(shè)備使用任何前綴幸逆,而不是phy:, file:,或者是沒有前綴(這種情況下Xen默認使用PHY設(shè)備類型),在名為Xen的scripts目錄中可找到比較常用的腳本/etc/xen/scripts暮现。
DRBD分布給drbd設(shè)備類型提供一個名為/etc/xen/scripts/block-drbd的腳本还绘。這個腳本處理本章之前所描述的那些必要的drbd的資源狀態(tài)轉(zhuǎn)換。
13.7 集成Xen和Pacemaker
為了充分利用基于DRBD的Xen VBD栖袋,推薦心跳管理相關(guān)的domU心跳的資源拍顷。
可以配置Xen domU為Pacemaker資源,并自動化資源的故障轉(zhuǎn)移塘幅。需要使用Xen OCF資源代理實現(xiàn)它昔案。如果已經(jīng)使用本章所述的DRBD Xen相關(guān)的設(shè)備類型,將不需要配置單獨的drbd資源給Xen集群資源使用电媳。相反踏揣,block-drbd輔助腳本會幫你完成所有的必要的資源轉(zhuǎn)換。
當(dāng)連接時裂腦受害者將立即改變連接狀態(tài)為SyncTarget匆背,并被主節(jié)點覆蓋其余節(jié)點的修改呼伸。
第五篇 優(yōu)化DRBD性能
14 測試塊設(shè)備的性能
目錄
14.1 測量吞吐量
14.2 測量延遲
14.1 測量吞吐量
測試DRBD對系統(tǒng)的I/O吞吐量時,對而系統(tǒng)而言絕對吞吐量是無關(guān)緊要的钝尸。更意思的是drbd對I/O性能的影響是相對的括享。
注意
在本節(jié)中所描述的測試是侵入式的,通過覆蓋數(shù)據(jù)導(dǎo)致drbd之間不同步珍促。很重要的是測試要在可以在臨時的測試完成后可以丟失的卷上進行铃辖。
I/O吞吐量的測試是通過寫入大塊數(shù)據(jù)到一個設(shè)備上,測試系統(tǒng)完成寫操作所消耗的時間猪叙〗空叮可以使用比較實用的工具dd仁卷,它在新版本中有相應(yīng)的內(nèi)置吞吐量的估計。
下面是一個基于dd吞吐量的簡單標準犬第,假設(shè)對一個當(dāng)前連接并在兩個節(jié)點都處于次角色的名為test臨時資源:
TEST_RESOURCE=test
TEST_DEVICE=$(drbdadm sh-dev $TEST_RESOURCE)
TEST_LL_DEVICE=$(drbdadm sh-ll-dev $TEST_RESOURCE)
drbdadm primary $TEST_RESOURCE
for i in $(seq 5); do
dd if=/dev/zero of=$TEST_DEVICE bs=512M count=1 oflag=direct
done
drbdadm down $TEST_RESOURCE
for i in $(seq 5); do
dd if=/dev/zero of=$TEST_LL_DEVICE bs=512M count=1 oflag=direct
done
本測試只是寫一個大小為512M的塊到drbd設(shè)備锦积,然后進行對比和測試。每個測試都進行5次歉嗓,然后取平均值丰介。相關(guān)結(jié)果都是通過dd進行吞吐量的測試的。
備注
對新啟用的drbd設(shè)備鉴分,在第一次運行dd時刻明顯發(fā)現(xiàn)器性能有所下降哮幢,這主要是因為并不引人注意的“cold”日志引起的。
14.2 測量延遲
延遲量和吞吐量是基于完全不同的標準的:在I/O延遲測試中志珍,寫一個非常小的數(shù)據(jù)塊(理想情況下橙垢,為該系統(tǒng)能處理的最小數(shù)據(jù)塊),并觀察完成寫入所需的時間伦糯。該過程通常反復(fù)數(shù)次使之在正常的范圍波動柜某。
正如吞吐量測試,I/O延遲測試也可使用dd進行測試舔株,盡管有不同的設(shè)置以及完全不同的觀察重點莺琳。
下面是一個基于dd吞吐量的簡單標準,假設(shè)對一個當(dāng)前連接并在兩個節(jié)點都處于次角色的名為test臨時資源:
TEST_RESOURCE=test
TEST_DEVICE=$(drbdadm sh-dev $TEST_RESOURCE)
TEST_LL_DEVICE=$(drbdadm sh-ll-dev $TEST_RESOURCE)
drbdadm primary $TEST_RESOURCE
dd if=/dev/zero of=$TEST_DEVICE bs=512 count=1000 oflag=direct
drbdadm down $TEST_RESOURCE
dd if=/dev/zero of=$TEST_LL_DEVICE bs=512 count=1000 oflag=direct
在drbd設(shè)備上測試寫1000個512字節(jié)的數(shù)據(jù)塊载慈,之后對后端的設(shè)備進行對比。512字節(jié)的塊大小是linux所支持的做小的塊(S390以外的所有架構(gòu))珍手。
重要的是要了解到吞吐量產(chǎn)生的測試和dd測試是完全不相干的办铡。重要的進行1000次寫所耗費的時間。這段時間除以1000即是單一文件的延遲寫時間琳要。
15 優(yōu)化drbd的吞吐量
目錄
15.1 硬件注意事項
15.2 期望的吞吐量開銷
15.3 調(diào)整建議
15.3.1 設(shè)置 max-buffers 和 max-epoch-size
15.3.2 調(diào)整I/O unplug watermark
15.3.3 調(diào)整TCP發(fā)送緩沖區(qū)的大小
15.3.4 調(diào)整活動日志的大小
15.3.5 禁用barriers和磁盤刷新
本章涉及優(yōu)化DRBD的吞吐量寡具。為實現(xiàn)該目的,本文結(jié)合硬件的注意事項提出調(diào)整優(yōu)化和細節(jié)吞吐量的建議稚补。
15.1 硬件注意事項
Drbd的吞吐量收帶寬和底層I/O子系統(tǒng)(磁盤童叠、控制器和相應(yīng)的緩存),以及復(fù)制網(wǎng)絡(luò)的帶寬影響课幕。
I/O子系統(tǒng)的吞吐量厦坛。I/O子系統(tǒng)的吞吐量是在一定程度上確定的,為以并行寫入磁盤的數(shù)量乍惊。通常單一的杜秸、接近合理的、scsi或sas磁盤以40MB/s的流寫入單個磁盤润绎。當(dāng)部署一個條帶化配置時撬碟,I/O子系統(tǒng)以并行方式寫磁盤诞挨,有效的多條帶化配置則為單個磁盤吞吐量的乘積。因此呢蛤,40MB/s的磁盤支撐在raid0或者是raid-1+0三條帶中120MB/s惶傻,或者是5條帶的200MB/s。
備注
對新啟用的drbd設(shè)備其障,在第一次運行dd時刻明顯發(fā)現(xiàn)器性能有所下降银室,這主要是因為并不引人注意的“cold”日志引起的。
磁盤鏡像(RAID-1)對吞吐量的影響對應(yīng)比較小静秆。校驗(RAID- 5)的條帶化的磁盤對吞吐量的影響粮揉,則往往是不利的。
網(wǎng)絡(luò)吞吐量抚笔。網(wǎng)絡(luò)吞吐量通常是目前網(wǎng)絡(luò)中以路由/交換機等設(shè)置所支持的流量扶认。盡管drbd允許通過專用鏈接傳輸,但是這還是主要的drbd復(fù)制環(huán)節(jié)殊橙。因此辐宾,網(wǎng)絡(luò)吞吐量改善可通過切換到更好的網(wǎng)絡(luò)協(xié)議(如10G太網(wǎng))或者通過聚合多個網(wǎng)絡(luò)的連接綁定到指定的linux的網(wǎng)絡(luò)驅(qū)動設(shè)備上。
15.2 期望的吞吐量開銷
當(dāng)估算吞吐量和drbd相關(guān)的開銷時膨蛮,重要是考慮一下自然的限制:
drbd的吞吐量受原始I/O子系統(tǒng)的限制叠纹。
drbd的吞吐量受可用網(wǎng)絡(luò)帶寬的限制。
兩個之間的最小值就是drbd可支持的最大吞吐量敞葛。Drbd減少額外的吞吐量開銷大約小于最大吞吐量的3%誉察。
例如,考慮兩個集群節(jié)點包含I/O子系統(tǒng)能力為200MB/s惹谐,之間可以通過一個千兆以太網(wǎng)的鏈路持偏。千兆以太網(wǎng)可以預(yù)計將產(chǎn)生110MB/s的tcp連接的網(wǎng)絡(luò)吞吐量,從而在這個配置中的瓶頸就是所預(yù)計drbd的最大吞吐量為107MB/s氨肌。
相反鸿秆,如果I/O子系統(tǒng)的寫入能力只有100MB/s,那么它就成為了瓶頸怎囚,因此可以預(yù)計drbd的最大吞吐量為97MB/s卿叽。
15.3 調(diào)整建議
Drbd提供的大量的配置選項,這些都可能對系統(tǒng)的吞吐量產(chǎn)生影響恳守。本節(jié)中對吞吐量的調(diào)整提出一些建議考婴。然后,由于吞吐量在很大程度上依賴于硬件井誉,在這里所描述影響可能對不同的系統(tǒng)有極大的不同蕉扮。需要了解到這里的建議不是“靈丹妙藥”,不能解決所有的吞吐量的瓶頸颗圣。
15.3.1 設(shè)置 max-buffers 和 max-epoch-size
這些選項會影響次節(jié)點上寫的性能喳钟。max-buffers是drbd數(shù)據(jù)寫入到磁盤分配的緩沖區(qū)的最大數(shù)屁使,而max-epoch-size 的大小是兩個寫瓶頸的最大允許寫的數(shù)量。在大多數(shù)情況下奔则,應(yīng)該同時設(shè)置兩個選項蛮寂,并設(shè)置為相同的值。二者默認為2048易茬,將其設(shè)置在8000應(yīng)該是最合理的利用高性能硬件raid控制酬蹋。
resource <resource> {
net {
max-buffers 8000;
max-epoch-size 8000;
...
}
...
}
15.3.2 調(diào)整I/O unplug watermark
在正常操作期間I/O unplug watermark是可調(diào)整的,它影響I/O子系統(tǒng)控制器多久是“kicked”(被迫進程等待I/O請求)抽莱。對該選項的設(shè)置沒有統(tǒng)一的建議范抓,它的設(shè)置很大程度上是依賴于硬件的。
一些控制器在“kecked”頻繁時表現(xiàn)比較好食铐,所以這些控制器設(shè)置的較低是比較有意義的匕垫,甚至于低于drbd允許的最低值(16)。當(dāng)單獨離開時其他表現(xiàn)的比較好虐呻,對于這些控制器設(shè)置max-buffers高點是可取的象泵。
resource <resource> {
net {
unplug-watermark 16;
...
}
...
}
15.3.3 調(diào)整TCP發(fā)送緩沖區(qū)的大小
TCP發(fā)送緩沖區(qū)是內(nèi)存緩沖區(qū)傳出的TCP的流量。在默認情況下它設(shè)置大小為128KiB斟叼。適用于高吞吐量網(wǎng)絡(luò)使用(如專用的千兆以太網(wǎng)或者是負載均衡的連接)偶惠,它增大到512KiB或者更多是比較有意義的。不推薦發(fā)送緩沖區(qū)超過2MiB的大欣噬(也不可能帶來任何吞吐量的提高)忽孽。
resource <resource> {
net {
sndbuf-size 512k;
...
}
...
}
DRBD還支持發(fā)送緩沖區(qū)的自動調(diào)節(jié)。啟動該功能后谢床,drbd會動態(tài)的選擇一個合適的TCP發(fā)送緩沖區(qū)的大小扒腕。TCP發(fā)送緩沖區(qū)自動調(diào)節(jié)可以將將緩沖區(qū)的大小設(shè)置為0.
resource <resource> {
net {
sndbuf-size 0;
...
}
...
}
15.3.4 調(diào)整活動日志的大小
如果使用drbd的應(yīng)用程序?qū)懖僮鞅容^頻繁的寫到一個設(shè)備上,它通常最好使用一個相當(dāng)大的活動日志萤悴。否則,頻繁的元數(shù)據(jù)更新會影響寫性能皆的。
resource <resource> {
disk {
al-extents 3389;
...
}
...
}
15.3.5 禁用barriers和磁盤刷新
警告
本節(jié)中所述的建議只適用于非易失性(battery backed)控制器緩沖系統(tǒng)覆履。
系統(tǒng)配置battery backed write cache是都帶內(nèi)置的手段保護數(shù)據(jù)以面對停電预吆。這種情況下惨篱,處于同樣的目的它允許禁用drbd自己的保護措施嫩舟。這有利于吞吐量的提升烫饼。
resource <resource> {
disk {
disk-barrier no;
disk-flushes no;
...
}
...
}
16 優(yōu)化DRBD的延遲
目錄
16.1 硬件注意事項
16.2 期望的延遲開銷
16.3 調(diào)整建議
16.3.1 設(shè)置DRBD的CPU掩碼
16.3.2 修改網(wǎng)絡(luò)的MTU
16.3.3 啟用I / O期限調(diào)度
本章涉及優(yōu)化DRBD的延遲炬转。為實現(xiàn)該目的看铆,本文結(jié)合硬件的注意事項提出調(diào)整優(yōu)化和細節(jié)延遲的建議斤葱。
16.1 硬件注意事項
DRBD的延遲收I/O子系統(tǒng)延遲(磁盤赫蛇、控制器和對應(yīng)的緩存)和復(fù)制網(wǎng)絡(luò)延遲的影響召廷。
I/O子系統(tǒng)延遲凳厢。I/O子系統(tǒng)的延遲主要體現(xiàn)在磁盤的轉(zhuǎn)速上账胧,因此利用高轉(zhuǎn)速的磁盤可有效減少I/O子系統(tǒng)的延遲。
同樣先紫,使用支持高速寫緩存池(BBWC)減少寫完成的時間治泥,也能降低寫入延遲。最合理的存儲子系統(tǒng)與某種形式的高度緩存池遮精,并允許管理員配置詞緩存的那一部分用于讀取和寫入的操作居夹。推薦的方法是禁用磁盤的完全讀緩存并對磁盤寫緩存都使用內(nèi)存緩存。
網(wǎng)絡(luò)延遲本冲。網(wǎng)絡(luò)延遲本質(zhì)上是數(shù)據(jù)包在主機之間往返的時間准脂。它是由多項因素影響,其中大多數(shù)是專用的檬洞、使用與drbd復(fù)制連接無關(guān)的緊密的網(wǎng)絡(luò)連接狸膏。因此,在千兆以太網(wǎng)間的100到200微秒(μs)RTT秩序報的延遲是可以接受的疮胖。
網(wǎng)絡(luò)延遲可能只能使用低延遲的網(wǎng)絡(luò)協(xié)議降低延遲环戈,如通過Dolphin的SuperSockets在Dolphin Express運行drbd。
16.2 期望的延遲開銷
當(dāng)估算結(jié)合drbd的延遲的開銷時澎灸,對吞吐量有一些重要的自然的限制需要考慮:
drbd延遲受原始I/O子系統(tǒng)的限制院塞。
drbd延遲受可用網(wǎng)絡(luò)帶寬的延遲的限制。
兩者之后為drbd的理論的最低延遲性昭。Drbd預(yù)計會帶來不到1%的額外延遲開銷拦止。
加入本地磁盤子系統(tǒng)寫延遲為3ms而網(wǎng)絡(luò)延遲為0.2ms,那么drbd的延遲以及就為3.2ms或者比僅僅寫本地磁盤有大約一個7%的延遲糜颠。
備注
延遲還會受到一些其他的因素的影響汹族,包括CPU高速緩存為命中、上下文切換等其兴。
16.3 調(diào)整建議
16.3.1 設(shè)置DRBD的CPU掩碼
DRBD允許其內(nèi)核線程設(shè)置一個明確的CPU掩碼顶瞒,這對程序是特別有利的,否則會與drbd的CPU周期進行競爭元旬。
CPU掩碼是其在二進制的的最低有效位表示第一個CPU榴徐、第二低表示第二個等等。一個位掩碼意味著drbd對應(yīng)的可用的CPU匀归,否則該位置就必須別清空坑资。例如1(00000001)表示drbd只能使用第一個CPU,而12(00001100)則表示drbd可使用第三和第第四個CPU穆端。
例如袱贮,CPU資源的掩碼配置如下:
resource <resource> {
options {
cpu-mask 2;
...
}
...
}
重要
當(dāng)然為了減少drbd與其他程序的CPU競爭,必須配置其他應(yīng)用程序不使用drbd使用的CPU体啰。
某些應(yīng)用程序也可能提供像drbd這樣配置的配置的文件攒巍。而其他的應(yīng)用程序的init腳本中
包括taskset命令嗽仪。
16.3.2 修改網(wǎng)絡(luò)的MTU
當(dāng)基于塊的(而不是基于Extent的)文件系統(tǒng)出在drbd的上層,可能改變復(fù)制網(wǎng)絡(luò)的最大傳輸單元(MTU)大小是有益的窑业,其默認為1500字節(jié)钦幔。通俗的將這就是“啟用Jumbo 幀”。
備注
基于塊的文件系統(tǒng)常柄,包括ext3鲤氢、ReiserFS(版本3)以及GFS∥髋耍基于Extent的文件系統(tǒng)卷玉,如XFS、 Lustre 和 OCFS2喷市∠嘀郑基于Extent的文件系統(tǒng)只有當(dāng)擁有大量的文件時啟用jubmbo幀就會比較有益。
使用下面的命令可以改變的MTU:
ifconfig <interface> mtu <size>
或者
ip link set <interface> mtu <size>
<interface>是指用于DRBD的復(fù)制到網(wǎng)絡(luò)接口品姓。<SIZE>典型值為9000(字節(jié))寝并。
16.3.3 啟用I / O期限調(diào)度
當(dāng)結(jié)合高性能使用時,回寫啟用硬件的raid控制器腹备,drbd的延遲可能會因使用I/O調(diào)度的期限而大大減少衬潦,而不是使用CFQ的調(diào)度。后者通常在最新的內(nèi)核配置中(2.6.18之后)默認是啟用的植酥。
通過sysfs虛擬文件系統(tǒng)修改I/O調(diào)度配置镀岛,掛載在/sys下。調(diào)度程序配置在/sys/block/<device>中友驮,這里<device>是使用的后端設(shè)備漂羊。
可通過如下命令啟用最后期限調(diào)度:
echo deadline > /sys/block/<device>/queue/scheduler
然后還可以通過設(shè)置下面的提供額外的延遲效益的值:
禁用前合并:
echo 0 > /sys/block/<device>/queue/iosched/front_merges
減少讀取I / O期限為150毫秒(默認為500ms):
echo 150 > /sys/block/<device>/queue/iosched/read_expire
減少寫入I / O的截止日期為1500毫秒(默認為3000ms):
echo 1500 > /sys/block/<device>/queue/iosched/write_expire
如果這些對延遲有所改進,那么要想永久使用的話卸留,也可在系統(tǒng)啟動時自動設(shè)置走越。Debian和Ubuntu系統(tǒng)通過sysfsutils和配置文件/etc/sysfs.conf提供該功能。
也可通過內(nèi)部命令設(shè)置一個全局性的I/O調(diào)度耻瑟。編輯引導(dǎo)裝載程序配置(如果使用grub引導(dǎo)的haunted买喧,通常在/boot/grub/menu.lst中),同時添加elevator=deadline選項設(shè)置內(nèi)核啟動選項匆赃。
第六篇 更多有關(guān)drbd的知識
17 DRBD的內(nèi)部
目錄
17.1 Drbd元數(shù)據(jù)
17.1.1 內(nèi)部元數(shù)據(jù)
17.1.2 外部元數(shù)據(jù)
17.1.3 元數(shù)據(jù)大小估算
17.2 代標識
17.2.1 數(shù)據(jù)的代
17.2.2 代標識的元組
17.2.3 生成標識符如何改變
17.2.4 如何DRBD使用代標識符
17.3 活動日志
17.3.1 目的
17.3.2 活躍程度
17.3.3 選擇合適的活動日志的大小
17.4 快速同步位圖
17.5 對等節(jié)點的fencing接口
本章提供一些關(guān)于drbd內(nèi)部算法和結(jié)構(gòu)的背景資料。目的是給那些對背景知識感興趣的用戶提供drbd的背景資料今缚。對drbd的開發(fā)不做深入drbd的內(nèi)部運作做深入的參考算柳。因此請參閱18.6節(jié)“出版物”中所累出的文件,其對drbd的源代碼進行了注釋姓言。
17.1 Drbd元數(shù)據(jù)
一個專門存儲drbd各種相關(guān)信息的區(qū)域瞬项。此元數(shù)據(jù)包括:
drbd設(shè)備的大小
代標識(GI蔗蹋,詳細信息參見第17.2節(jié)“代標識”)
活動日志(AL,詳細介紹參見第17.3節(jié)“活動日志”)
快速同步位圖(詳細參見17.4節(jié)“快速同步位圖”)
此元數(shù)據(jù)可以存儲在內(nèi)部和外部,使用暗中方法是在每個資源的基礎(chǔ)上進行配置的囱淋。
17.1.1 內(nèi)部元數(shù)據(jù)
配置資源使用內(nèi)部元數(shù)據(jù)意味著drbd存在和實際生成數(shù)據(jù)相同的底層物理設(shè)備上猪杭。預(yù)留一個區(qū)域明確用戶存儲元數(shù)據(jù)。
優(yōu)點妥衣。由于元數(shù)據(jù)和實際的數(shù)據(jù)有著千絲萬縷的聯(lián)系皂吮,如果硬盤出現(xiàn)故障管理員沒有特殊的操作需求。這樣元數(shù)據(jù)和實際都將一起丟失或者是一起恢復(fù)税手。
缺點蜂筹。如果底層設(shè)備是一單個的物理硬盤(沒有raid設(shè)置),內(nèi)部元數(shù)據(jù)可能會對寫入吞吐量產(chǎn)生負面影響芦倒。應(yīng)用程序的的寫請求可能會觸發(fā)drbd元數(shù)據(jù)的更新艺挪,如在統(tǒng)一磁盤存儲元數(shù)據(jù),寫操作可能會導(dǎo)致磁盤的讀/寫有額外開銷兵扬。
重要
如果計劃使用內(nèi)部元數(shù)據(jù)結(jié)合現(xiàn)有的已有數(shù)據(jù)的底層的塊設(shè)備麻裳,就必須考慮drbd的元數(shù)據(jù)所需的空間。
否則器钟,drbd的資源創(chuàng)建后津坑,新創(chuàng)的元數(shù)據(jù)將覆蓋底層設(shè)備的其他元數(shù)據(jù),并破壞進程中存在的問題俱箱。為了避免這種情況国瓮,如下做下面的事情:
擴展底層設(shè)備。任何邏輯卷管理設(shè)施(如LVM)只要有可用的空閑空間提供相應(yīng)卷的grouplt狞谱,就可能被硬件存儲解決方案所支持乃摹。
在底層設(shè)備上收縮現(xiàn)有的文件系統(tǒng)。這可能會也可能不會被文件系統(tǒng)所支持跟衅。
如果兩者都不能的話孵睬,就使用外部元數(shù)據(jù)替代。
估算擴展底層設(shè)備以及收縮文件系統(tǒng)的大小伶跷,可參閱17.1.3節(jié)“元數(shù)據(jù)大小估算”掰读。
17.1.2 外部元數(shù)據(jù)
外部元數(shù)據(jù)是單獨存儲、專用的塊設(shè)備存儲的生產(chǎn)數(shù)據(jù)叭莫。
優(yōu)點蹈集。使用外部元數(shù)據(jù)對于寫操作的延遲將有所改善。
缺點雇初。元數(shù)據(jù)與實際的生產(chǎn)數(shù)據(jù)聯(lián)系不緊密拢肆。這意味著,在硬件發(fā)生故障,破壞了生產(chǎn)數(shù)據(jù)(而不是drbd的元數(shù)據(jù))郭怪,需認為干預(yù)從幸存節(jié)點到被替換節(jié)點的數(shù)據(jù)同步支示。
如果出現(xiàn)以下情況,外部元數(shù)據(jù)是唯一可選擇的:
正在使用的drbd復(fù)制的設(shè)備已經(jīng)包含了有用的數(shù)據(jù)鄙才。
現(xiàn)有設(shè)備不支持擴展颂鸿。
設(shè)備上的現(xiàn)有文件系統(tǒng)不支持收縮。
估算擴展底層設(shè)備以及收縮文件系統(tǒng)的大小攒庵,可參閱17.1.3節(jié)“元數(shù)據(jù)大小估算”嘴纺。
17.1.3 元數(shù)據(jù)大小估算
可使用下面的公式精確估算出drbd元數(shù)據(jù)對空間的需求:
圖17.1。計算DRBD技術(shù)元數(shù)據(jù)的大行鸬椤(完全)
Cs是扇區(qū)中的數(shù)據(jù)設(shè)備的大小颖医。
備注
可以檢索設(shè)備的大小使用blockdev --getsz <device>命令
結(jié)果Ms也用扇區(qū)表示。要處以2048(一個512字節(jié)的扇區(qū)大小裆蒸,這是在S390外所有的linux平臺上默認的)轉(zhuǎn)換才MB熔萧。
在實踐中,可使用下面給出的一個很近似僚祷、合理的方式計算佛致。注意在公式中,單位是兆字節(jié)辙谜,而不是扇區(qū)俺榆。
圖17.2。估計DRBD技術(shù)元數(shù)據(jù)尺寸(大約)
17.2 代標識
Drbd使用代表示(GI)確定復(fù)制數(shù)據(jù)的“代”装哆。
這是drbd的內(nèi)部機制罐脊,用于:
確定兩個節(jié)點是不是屬于同一集群的事實(而不是意外連接的兩個節(jié)點)
確定重新同步時同步的方向(如果必要的話)
確定是完全重新同步或者是部分重新同步是否滿足需求
確定裂腦
17.2.1 數(shù)據(jù)的代
發(fā)送下列情況標志著drbd產(chǎn)生一個新的數(shù)據(jù)代:
最初設(shè)備的完全同步
一個斷開連接的資源切換到住角色
主角色的資源斷開連接
由此可以總結(jié)出,只要資源處于連接狀態(tài)蜕琴,兩個節(jié)點的磁盤狀態(tài)為UpToDate萍桌,目前兩個節(jié)點上數(shù)據(jù)生成是相同的。反過來也是如此凌简。
每個新的數(shù)據(jù)生成的標識都由一個8字節(jié)的上炎、全局唯一的標識符(UUID)標志。
17.2.2 代標識的元組
Drbd保持四個當(dāng)前的和歷史數(shù)據(jù)代在當(dāng)?shù)刭Y源元數(shù)據(jù)的信息:
當(dāng)前的UUID雏搂。從本地節(jié)點的角度看藕施,這是當(dāng)前數(shù)據(jù)代的代標識符。當(dāng)一個資源連接并完全同步時凸郑,目前兩節(jié)點之間的UUID是相同的裳食。
位圖的UUID。這是磁盤的同步位圖是跟蹤更改的代的UUID芙沥。只有在斷開模式磁盤上的同步位圖本身才與該標識符有關(guān)胞谈。如果資源是連通的尘盼,此UUID總是空(零)。
兩個歷史UUID烦绳。這是前幾代的兩個數(shù)據(jù)的標識符。
總的來說配紫,這四個項目被稱為一代標識元組径密,或簡稱GI tuple。
17.2.3 生成標識符如何改變
17.2.3.1 開始一個新的數(shù)據(jù)代
當(dāng)一個節(jié)點失去與對等節(jié)點的連接(無論是網(wǎng)絡(luò)故障還是人為干預(yù))躺孝,drbd通過以下方式修改本地的代標識:
圖17.3 GI元組的變化在一個新的數(shù)據(jù)代開始
給新的數(shù)據(jù)代創(chuàng)建一個新的UUID享扔。這將成為當(dāng)前主節(jié)點新的UUID。
之前的UUID現(xiàn)在指代的位圖跟蹤到變化植袍,它在主節(jié)點變成新的位圖UUID惧眠。
在輔助節(jié)點上,GI元組保持不變于个。
17.2.3.2 開始重新同步
DRBD重新同步啟動后氛魁,在本地生成標識符執(zhí)行這些修改:
圖17.4 開始重新同步的GI元組的變化
當(dāng)前同步源的UUID保持不變。
同步源位圖的UUID是旋轉(zhuǎn)的第一個歷史UUID厅篓。
新的Bitmap(位圖) UUID生成同步源秀存。
此UUID將成為新的當(dāng)前同步目標的UUID。
位圖和歷史的UUID同步目標保持不變羽氮。
17.2.3.3 完成重新同步
重新同步結(jié)束時或链,進行以下更改:
圖17.5 重新同步完成GI元組的變化
當(dāng)前同步源的UUID保持不變。
在同步源上的位圖UUID翻轉(zhuǎn)為第一個歷史UUID档押,那個uuid移動為第二歷史項(任何現(xiàn)有的第二個歷史條項將被丟棄)澳盐。
UUID同步源位圖,然后清空(歸零)令宿。
同步的目標采用同步源的整個GI tuple元組叼耙。
17.2.4 如何DRBD使用代標識符
當(dāng)節(jié)點間建立連接,兩節(jié)點就交換目前可用的代標識掀淘,并進行相應(yīng)的處理旬蟋。存在一些可能的如下結(jié)果:
在兩個節(jié)點上的當(dāng)前UUID為空。本地節(jié)點檢測到其當(dāng)前的UUID和對等節(jié)點當(dāng)前的UUID是空的革娄。這是一個新配置的資源倾贰,沒有進行完整初始同步。沒有同步發(fā)生拦惋,必須手動啟動鸿脓。
目前的UUID在一個節(jié)點上空。本地節(jié)點的檢測對等節(jié)點的當(dāng)前UUID為空勺远,而它自己則不是蝶锋。這是一個新配置的資源,剛啟動初始完全同步的正常情況,本地節(jié)點被選中作為初始同步源软能。 DRBD在磁盤上的同步位圖(這意味著它進行整個設(shè)備同步)現(xiàn)在設(shè)置的所有位迎捺,并開始作為一個同步源進行同步。 (當(dāng)?shù)禺?dāng)前UUID為空查排,對等節(jié)點非空)凳枝,相反情況下,DRBD的執(zhí)行相同的步驟跋核,除非本地節(jié)點成為同步的目標岖瑰。
當(dāng)前UUID相等。本地節(jié)點檢測到其當(dāng)前的UUID和同行的當(dāng)前的UUID非空且相等砂代。當(dāng)它處于次角色時發(fā)生了斷開的情況蹋订,兩個斷開的節(jié)點都沒有提升資源。沒有同步發(fā)生刻伊,因次是沒有必要露戒。
位圖的UUID與對等節(jié)點的當(dāng)前的UUID匹配。本地節(jié)點檢測到它的位圖的UUID匹配對等節(jié)點當(dāng)前的UUID娃圆,同時對等節(jié)點的的位圖的UUID為空玫锋。這是當(dāng)本地節(jié)點為主角色次要節(jié)點故障后的正常和預(yù)期發(fā)生的。這意味著在此期間對等節(jié)點從來沒有成為主角色并在相同的數(shù)據(jù)生成的基礎(chǔ)上都單獨工作∷夏兀現(xiàn)在DRBD正常啟動撩鹿,本地成為同步源節(jié)點,后臺重新同步悦屏。反過來說节沦,如果本地節(jié)點檢測到它的位圖的UUID是空的,同時對等節(jié)點的位圖與本地節(jié)點的當(dāng)前的UUID匹配础爬,那么本地節(jié)點的失敗后這就是正常的和預(yù)期發(fā)生甫贯。DRBD現(xiàn)在啟動正常當(dāng)?shù)氐墓?jié)點成為同步目標,后臺重新同步看蚜。
當(dāng)前的UUID匹配對等節(jié)點的歷史UUID叫搁。本地節(jié)點的檢測當(dāng)前的UUID匹配對等節(jié)點的的歷史UUID之一。這意味著供炎,兩個數(shù)據(jù)集同父渴逻,而且本地節(jié)點是最新的數(shù)據(jù),保存在本地節(jié)點的位圖的信息是過時的和不可用的音诫。因此惨奕,一個正常的同步是不夠的。本地節(jié)點成為同步源竭钝,DRBD現(xiàn)在標識整個設(shè)備過時并初始化重新進行同步梨撞。在相反的情況下(本地節(jié)點的歷史的UUID匹配對等節(jié)點當(dāng)前的UUID)雹洗,DRBD執(zhí)行相同的步驟,除非本地節(jié)點成為同步的目標卧波。
位圖的UUID匹配时肿,當(dāng)前UUID不匹配。本地節(jié)點檢測到當(dāng)前的UUID和對等節(jié)點當(dāng)前的UUID不同港粱,而位圖的UUID的匹配嗜侮。這就是腦裂,但一個數(shù)據(jù)代具有相同的父啥容。這意味著如果配置,DRBD的調(diào)用裂腦自動恢復(fù)策略顷霹。否則咪惠,DRBD斷開連接,并等待人工腦裂進行處理淋淀。
當(dāng)前和位圖UUID都不匹配遥昧。本地節(jié)點檢測到其當(dāng)前的UUID和對等節(jié)點的UUID不同,同時位圖的UUID也不匹配朵纷。這是腦裂且一個數(shù)據(jù)代具有不同的父炭臭,從而即使配置自動恢復(fù)策略,也沒有實際意義袍辞。 DRBD斷開鞋仍,并等待人工腦裂進行處理。
沒有相匹配的UUID搅吁。最后威创,DRBD技術(shù)的情況下無法檢測到兩個節(jié)點的GI tuples元組一個都不匹配,它記錄一個警告一無關(guān)的數(shù)據(jù)并斷開谎懦。這是DRBD意外連接兩個節(jié)點的集群肚豺,彼此之間并不認識。
17.3 活動日志
17.3.1 目的
Drbd本地寫操作支持寫在Drbd本地塊設(shè)備界拦,同時也將寫操作通過網(wǎng)絡(luò)發(fā)送數(shù)據(jù)塊吸申。對所有的實際目的這兩個動作都是同時發(fā)生。隨機時序可能會導(dǎo)致一個寫操作已經(jīng)完成享甸,但是通過網(wǎng)絡(luò)的傳輸卻未發(fā)生截碴。
如果此時活動的節(jié)點故障,故障轉(zhuǎn)移啟動枪萄,則該數(shù)據(jù)塊在兩節(jié)點間不同步—它已在崩潰前寫入失敗的節(jié)點隐岛,但是尚未完成復(fù)制。因此瓷翻,最終恢復(fù)節(jié)點時此塊必須在隨后的同步數(shù)據(jù)中刪除聚凹。否則割坠,失敗的節(jié)點將是“一個超前寫”的幸存節(jié)點,這將違反“全有全無”的存儲原則妒牙。其實這不僅限于drbd彼哼,這個問題是在幾乎所有復(fù)制的存儲配置中都存在的問題。許多其他的存儲解決方案(就像drbd本身湘今,在0.7之前的版本)敢朱,因此需呀i在活動的節(jié)點故障后進行完全同步,然后再修復(fù)摩瞎。
在0.7版本之前的drbd是與之不同的拴签。活動日志(AL)存儲在元數(shù)據(jù)區(qū)旗们,保持“最近”被寫入塊軌道蚓哩。也就是俗稱的熱程度。
如果暫時失敗的節(jié)點處于主動模式發(fā)生同步故障上渴,只有那些在AL突出的熱程度岸梨,而不是完整的設(shè)備需要同步。這大大減少了主動節(jié)點崩潰后的同步時間稠氮,曹阔。
17.3.2 活躍程度
活動日志有配置參數(shù):活躍度。每個活躍度增加4MiB數(shù)據(jù)量用于主崩潰后的傳輸隔披。這個參數(shù)必須被理解為以下方面之間的折中:
大量的活躍度赃份。為調(diào)高讀寫吞吐量,保持一個大型的活動日志锹锰。每一個新活躍度被激活時芥炭,舊的不活躍的活躍度被復(fù)位。這種轉(zhuǎn)變需要元數(shù)據(jù)區(qū)的寫操作恃慧。如果活躍度高园蝠,舊的活躍度的換出則比較少見,減少元數(shù)據(jù)的寫操作可以提高性能痢士。
很少的活躍度彪薛。為減少同步時間則保持比較小的活動日志,主節(jié)點故障并隨之恢復(fù)怠蹂。
17.3.3 選擇合適的活動日志的大小
應(yīng)根據(jù)給定同步速率所需的同步時間定義活躍度的值善延。活躍度可利用如下公式計算:
圖17.6 基于同步率和目標同步時間的活躍程度計算
R為同步速率城侧,單位為MB/s易遣,Tsync為目標同步時間,單位為秒(s)嫌佑。E則為活躍度豆茫。
提供這樣一個例子侨歉,假設(shè)集群有一個I/O子系統(tǒng)吞吐率90MiByte/s,而配置速率為30MiBytes/s(R=30)揩魂,而同時想保持目標同步時間在4分鐘或240s(Tsync=240)
圖17.7 活躍度的計算基于同步率和目標同步時間(例如)
精確的計算結(jié)果為1800幽邓,但為保持DRBD hash功能的AL在最好的程度需設(shè)置為素數(shù),因此選擇1801火脉。
17.4 快速同步位圖
DRBD使用的內(nèi)部數(shù)據(jù)結(jié)構(gòu)為快速同步位圖牵舵,基于每一個資源之上保持塊的同步(在兩個節(jié)點上相同)或者不同步。在節(jié)點處于斷開模式時它是唯一相關(guān)的資源倦挂。
在快速同步位圖中畸颅,一個位代表磁盤上一個4KIB塊數(shù)據(jù),如果該位被清零方援,就意味著對等節(jié)點的相應(yīng)的塊仍然是同步的重斑。這就意味著從斷開以來沒有被寫入的時間。相反肯骇,如果該位置被設(shè)置,就意味該塊被修改祖很,需要在連接重新可用時進行重新同步笛丙。
Drbd在斷開連接的設(shè)備上檢測寫I/O,并因此在RAM中開始設(shè)置快速位圖同步的位—這樣避免了開銷較大的同步元數(shù)據(jù)的I/O操作假颇。只有相應(yīng)的塊變冷(即“活動日志”屆滿)胚鸯,drbd則對快速同步位圖的位進行適當(dāng)?shù)男薷摹M瑯颖考Γ绻Y源被手動關(guān)閉姜钳,其余接上斷開,則drbd刷新完整的快速同步位圖為永久存儲形耗。
當(dāng)對等節(jié)點恢復(fù)或重新建立連接哥桥,drbd結(jié)合兩個節(jié)點的位圖信息,確定必須重新同步的數(shù)據(jù)集激涤。同時drbd檢查生成的標示符以確定同步的方向拟糕。
作為同步源的節(jié)點傳輸商定的塊到對等節(jié)點,清除同步目標確認的修改的位圖中同步位倦踢。如果重新同步中斷(如另一個網(wǎng)絡(luò)中斷)送滞,隨后將從它離開的地方進行恢復(fù)—--當(dāng)然,與此同時任何額外塊的修改被添加到重新同步數(shù)據(jù)集辱挥。
備注
重新同步也可以使用drbdadm pause-sync和drbdadm resume-sync命令進行暫停和恢復(fù)犁嗅。然后操作并不輕松---中斷重新同步會導(dǎo)致次節(jié)點的磁盤超過實際需要的不一致。
17.5 對等節(jié)點的fencing接口
Drbd有一個明確定義的接口晤碘,fences在對等節(jié)點以防止復(fù)制連接時被中斷褂微。drbd-peer-outdater幫助功蜓,參考綁定heartbeat以實現(xiàn)該接口。然而蕊梧,可很容易的實現(xiàn)對等節(jié)點fencing的輔助程序霞赫。
Fencing幫助在下列情況相愛調(diào)用:
fence-peer handler被定義為資源(或者common)處理的一部分。
資源的fencing選項設(shè)置為resource-only 或者是 resource-and-stonith 肥矢。
復(fù)制連接中斷的時間對Drbd檢測網(wǎng)絡(luò)故障足夠長端衰。
當(dāng)程序或者腳本作為fence-peer handler調(diào)用時,需要設(shè)置DRBD_RESOURCE和DRBD_PEER環(huán)境變量可用甘改。它們分別包含受影響drbd資源的名字和對等節(jié)點的主機名旅东。
任何對等節(jié)點的fencing幫助程序(或腳本)都必須返回以下退出的代碼之一:
表17.1 fence-peer handler退出代碼
退出代碼
含義
3
對等節(jié)點的磁盤狀態(tài)不一致(Inconsistent)
4
對等節(jié)點磁盤狀態(tài)成功設(shè)置為Outdated(或者是Outdated開始)
5
對等節(jié)點連接失敗,對等節(jié)點不可達十艾。
6
因為受影響的資源為主角色拒絕了對等節(jié)點變?yōu)閛utdated
7
對等節(jié)點集群成功fenced off抵代。除非fencing設(shè)置受影響的資源為resource-and-stonith,否則不可能發(fā)生忘嫉。
18 獲取更多信息
目錄
18.1 商用DRBD支持
drbd項目的贊助公司linbit提供對商用drbd支持荤牍、咨詢和培訓(xùn)服務(wù)。
18.2 公開郵件列表
普通的使用問題可以反饋給公開郵箱:drbd-user@lists.linbit.com
可通過http://lists.linbit.com/drbd-user訂閱郵件庆冕。
完整的列表文檔:http://lists.linbit.com/pipermail/drbd-user康吵。
18.3 公共IRC渠道
一些Drbd開發(fā)有時可從公開的IRC服務(wù)irc.freenode.net,特別是一下渠道獲得信息:
· #drbd,
· #linux-ha,
· #linux-cluster.
在IRC上可以公開討論給drbd的開發(fā)層面提建議访递。
18.4 博客
本指南的共同作者之一Florian Haas的技術(shù)的博客
Martin Loschwitz a.k.a. madkiss晦嵌,另一個LINBIT雇員和合作的Debian DRBD技術(shù)包的維護者,在德國保持一個個人博客拷姿。
Planet HA是一個聚合信息的高可用性開發(fā)惭载,技術(shù)顧問和用戶的數(shù)量集中的博客。
18.5 官方Twitter賬戶
LINBIT有一個官方Twitter帳戶:linbit响巢。
如果呼叫DRBD描滔,請注明#drbd hashtag。
18.6 刊物
Drbd的作者撰寫和發(fā)表關(guān)于drbd或者drbd的某一方面的論文踪古。下面為一個簡單的列表:
Lars Ellenberg. DRBD v8.0.x and beyond. 2007. Available athttp://www.drbd.org/fileadmin/drbd/publications/drbd8.linux-conf.eu.2007.pdf
Philipp Reisner. DRBD v8 - Replicated Storage with Shared Disk Semantics. 2007. Available athttp://www.drbd.org/fileadmin/drbd/publications/drbd8.pdf.
Philipp Reisner. Rapid resynchronization for replicated storage. 2006. Available athttp://www.drbd.org/fileadmin/drbd/publications/drbd-activity-logging_v6.pdf
18.7 其他有用的資源
維基百科有DRBD技術(shù)的項目http://en.wikipedia.org/wiki/DRBD伴挚。
無論是Linux - HA的wiki http://wiki.linux-ha.org/ 還是ClusterLabshttp://www.clusterlabs.org/都有一些利用DRBD技術(shù)在高可用性集群有用的信息。
第七篇 附錄
http://www.drbd.org/users-guide-emb/p-appendices.html
來源:http://blog.csdn.net/liuyunfengheda/article/details/6460814
分類: Linux
好文要頂 關(guān)注我 收藏該文
feisky
關(guān)注 - 5
粉絲 - 836
+加關(guān)注
0 0
? 上一篇:mpstat
? 下一篇:[轉(zhuǎn)]drbd中文應(yīng)用指南
Feedback
1樓
2014-09-25 14:59 by chenhangbiao
翻譯的很好啊
支持(0)反對(0)
刷新評論刷新頁面返回頂部
注冊用戶登錄后才能發(fā)表評論灾炭,請 登錄 或 注冊茎芋,訪問網(wǎng)站首頁。
【推薦】超50萬VC++源碼: 大型組態(tài)工控蜈出、電力仿真CAD與GIS源碼庫田弥!
【緬懷】傳奇謝幕,回顧霍金76載傳奇人生
【推薦】業(yè)界最快速.NET數(shù)據(jù)可視化圖表組件
【推薦】騰訊云校園拼團福利铡原,1核2G服務(wù)器10元/月偷厦!
【活動】2050 科技公益大會 - 年青人因科技而團聚
qcloud0314
最新IT新聞:
· 微博回話抖音:與騰訊商叹、快手、美拍均有合作只泼,“只是沒有你”
· 南京大學(xué)人工智能學(xué)院招聘:年薪40萬起
· 騰訊QQ帳號支持注銷
· 斯諾登談臉書5000萬用戶信息被竊:這種公司該叫監(jiān)控公司
· 眾安在線發(fā)布2017年財報剖笙,保費增長逾七成,虧損近10億
? 更多新聞...
阿里云0308
最新知識庫文章:
· 寫給自學(xué)者的入門指南
· 和程序員談戀愛
· 學(xué)會學(xué)習(xí)
· 優(yōu)秀技術(shù)人的管理陷阱
· 作為一個程序員请唱,數(shù)學(xué)對你到底有多重要
? 更多知識庫文章...
Powered by:
博客園
Copyright ? feisky
無覓相關(guān)文章插件弥咪,快速提升流量