天天看點

drbd配置參數

使用者手冊:

http://www.drbd.org/users-guide

文法及詳解參數:

http://www.drbd.org/users-guide-emb/re-drbdconf.html

官方示例:

drbd及其配置檔案中的相關名詞:

failover:失效轉移。通俗地說,即當A無法為客戶服務時,系統能夠自動地切換,使B能夠及時地頂上繼續為客戶提供服務,且客戶感覺不到這個為他提供服務的對象已經更換。(注:來自百度百科。)

diskless mode:無盤模式。在此模式下,節點放棄自己的底層裝置,轉而通過網絡到遠端節點上去讀寫資料。

參考:http://oss.clusterlabs.org/pipermail/pacemaker/2010-September/007385.html,以及

http://www.drbd.org/users-guide/s-handling-disk-errors.html

peer:對等端,在兩個NameNode的環境下,指另外一個NameNode

stonith:Shoot The Other Node In The Head的簡寫,爆其它節點的頭!它是避免split brain的一個措施,若發生split brain,則一個node會發出指令讓另一個node關機,避免兩台node都浮動成primary。但這個功能本身也有一定的風險。

參考:http://yimu1023.blog.163.com/blog/static/362522822008621511567/

fence-peer:drbd有一個機制,當複制連接配接被中斷時它将隔離對等節點。drbd為這個機制定義一個接口,而與heartbeat綁定的drbd-peer-outdater helper就是個通過此接口來實作此機制的工具。但是我們可以很輕松地實施我們自己的peer fencing helper程式,而實施我們自己的peer fencing程式的前提條件之一就是,必須在handlers配置段中定義fence-peer處理器!

參考:http://www.drbd.org/users-guide/s-fence-peer.html

StandAlong mode:即節點無法與其它節點進行通信的狀态。

參考:http://www.drbd.org/users-guide/ch-admin.html#s-connection-states

write barriers:日志檔案系統中的一種保護機制,用來保持資料的一緻性。

日志檔案系統在磁盤的專門區域維護着一個日志。當檔案系統發覺到中繼資料的變化時,它将首先把這些變化寫入日志,而不是立刻去更改中繼資料。當這些變化資訊(事件資訊)寫入日志後,檔案系統将向日志中添加一個“送出報告”來表明文中繼資料的更改是合法的。隻有當“送出報告”寫入日志後,核心才會真正對中繼資料進行寫操作。

在寫“送出報告”以前,必須完全保證事件資訊已經寫入了日志。僅僅如此還不夠,與此同時驅動器還維護了一個巨大的内部caches,而且為了更好的性能表現,它會重新對操作進行排序,是以在寫“送出報告”之前,檔案系統必須明确地指導磁盤來擷取所有的日志資料,并存入媒體。如果“送出報告”先于事件資訊寫入日志,日志将被損壞!

核心的I/O子系統通過使用barriers來實作上述功能。大體來說,一個barrier生成後,它将禁止其後的所有資料塊的寫入,直到該barrier之前的資料塊寫入被送出到媒體。

注意:ext3和ext4檔案系統預設不使用barriers,管理者必須明确啟用它們才能使用該功能。而且,并非所有檔案系統都支援barrier。

參考:http://lwn.net/Articles/283161

meta data:DRBD在專門的區域存儲關于資料的各種各樣的資訊,這些資訊就是metadata,它包括如下資訊:

1、 DRBD裝置的空間大小

2、 Generation Identifier(GI)

3、 Activity Log(AL)

4、 quick-sync bitmap

這些metadata有兩種存儲方式:internally和externally。存儲方式是在每個resource配置段中指定的。這兩種存儲方式各有優缺點。

Internal metadata:

一個resource被配置成使用internal metadata,意味着DRBD把它的metadata,和實際生産資料存儲于相同的底層實體裝置中。該存儲方式是在裝置的最後位置留出一個區域來存儲metadata。

該存儲方式的優點是:因為metadata是和實際生産資料緊密聯系在一起的,如果發生了硬碟損壞,不需要管理者做額外的工作,因為metadata會随實際生産資料的丢失而丢失,同樣會随着生産資料的恢複而恢複。

它的缺點在于:如果底層裝置隻有一塊實體硬碟(和RAID相反),這種存儲方式對寫操作的吞吐量有負面影響,因為應用程式的寫操作請求會觸發DRBD的metadata的更新。如果metadata存儲于硬碟的同一塊盤片上,那麼,寫操作會導緻額外的兩次磁頭讀寫移動。

要注意的是:如果你打算在已有資料的底層裝置中使用internal metadata,需要計算并留出DRBD的metadata所占的空間大小,并采取一些特殊的操作,否則很有可能會破壞掉原有的資料!至于需要什麼樣的特殊操作,可以參考本條目末尾的連結文章。我要說的是,最好不要這樣做!

external metadata:

該存儲方式比較簡單,就是把metadata存儲于一個和生産資料分開的專門的裝置塊中。

它的優點:對某些寫操作,提供某些潛在的改進。

缺點:因為metadata和生産資料是分開的,如果發生了硬碟損壞,在更換硬碟後,需要管理者進行人工幹預,從其它存活的節點向剛替換的硬碟進行完全的資料同步。

什麼時候應該使用exteranl的存儲方式:裝置中已經存有資料,而該裝置不支援擴充(如LVM),也不支援收縮(shrinking)。

如果計算DRBD的中繼資料所需要的确切空間:

   注:圖檔來自drbd官網。

Cs是磁盤的扇區數,Ms也是使用扇區數來描述的,要轉化成MB,除以2048即可。

扇區數可以使用公式echo $(( $(blockdev --getsize64  device) / 512))來計算。

參考:http://www.drbd.org/users-guide-emb/ch-internals.html,以及http://www.wenzizone.cn/?p=280

<b>drbd</b><b>配置檔案:</b>

drbd安裝完成後,會自動建立一個配置檔案/etc/drbd.conf,内容為空,但你可以找到一個模闆檔案/usr/share/doc/drbd.../drbd.conf,該模闆檔案隻有兩個include語句。

為什麼模闆檔案如此簡潔?

drbd的配置檔案分成三個部分:global、common和resource。這三部分雖然可以全部寫入一個/etc/drbd.conf檔案中,但是按照官方慣例,這三部分是分開的:/etc/drbd.d目錄下的global_common.conf檔案包含global和common配置段,而目錄下的每個.res檔案包含一個resource配置段。

<b>關于global</b><b>配置段:</b>

如果所有配置段都在同一個drbd.conf檔案中,則該配置必須放在最頂端。

常用選項:

minor-count:從(裝置)個數,取值範圍1~255,預設值為32。該選項設定了允許定義的resource個數,當要定義的resource超過了此選項的設定時,需要重新載入drbd核心子產品。

dialog-refresh time:time取值0,或任一正數。預設值為1。我沒了解官方對該選項的解釋。很少見到此選項被啟用。

disable-ip-verification:是否禁用ip檢查

usage-count:是否參加使用者統計,合法參數為yes、no或ask

根據官方示例的說法,一般隻配置usage-count選項即可。不過,說實話,drbd的官方文檔确實挺操蛋,有些地方說的比較含糊。當然,也有我水準有限的原因。

 <b>關于common</b><b>配置段:</b>

該配置段不是必須的,但可以用來設定多個resource共有的選項,以減少重複性工作。該配置段中又包含如下配置段:disk、net、startup、syncer和handlers。

<b>disk</b><b>配置段:</b>

該配置段用來精細地調節drbd底層存儲的屬性。譯者注:這是一個非常重要的配置段,如果底層裝置(磁盤)發生了錯誤或損壞,該配置段将按照設定的政策發生作用。

on-io-error選項:此選項設定了一個政策,如果底層裝置向上層裝置報告發生I/O錯誤,将按照該政策進行處理。有效的政策包括:

 pass_on:把I/O錯誤報告給上層裝置。如果錯誤發生在primary節點,把它報告給檔案系統,由上層裝置處理這些錯誤(例如,它會導緻檔案系統以隻讀方式重新挂載),它可能會導緻drbd停止提供服務;如果發生在secondary節點,則忽略該錯誤(因為secondary節點沒有上層裝置可以報告)。該政策曾經是預設政策,但現在已被detach所取代。

 <b> </b>call-local-io-error:調用預定義的本地local-io-error腳本進行處理。該政策需要在resource配置段的handlers部分,預定義一個相應的local-io-error指令調用。該政策完全由管理者通過local-io-error指令(或腳本)調用來控制如何處理I/O錯誤。

 detach:發生I/O錯誤的節點将放棄底層裝置,以diskless mode繼續工作。在diskless mode下,隻要還有網絡連接配接,drbd将從secondary node讀寫資料,而不需要failover。該政策會導緻一定的損失,但好處也很明顯,drbd服務不會中斷。官方推薦和預設政策。

譯者注:如果使用detach政策來處理底層I/O錯誤,該政策會不會報告錯誤給管理者,以便管理者手動更換此節點的磁盤呢? handler處理器部分應該會有這方面的内容。

fencing選項:該選項設定一個政策來避免split brain的狀況。有效的政策包括:

dont-care:預設政策。不采取任何隔離措施。

resource-only:在此政策下,如果一個節點處于split brain狀态,它将嘗試隔離對等端的磁盤。這個操作通過調用fence-peer處理器來實作。fence-peer處理器将通過其它通信路徑到達對等節點,并在這個對等節點上調用drbdadm outdate res指令。

 resource-and-stonith:在此政策下,如果一個節點處于split brain狀态,它将停止I/O操作,并調用fence-peer處理器。處理器通過其它通信路徑到達對等節點,并在這個對等節點上調用drbdadm outdate res指令。如果無法到達對等節點,它将向對等端發送關機指令。一旦問題解決,I/O操作将重新進行。如果處理器失敗,你可以使用resume-io指令來重新開始I/O操作。

<b>net</b><b>配置段:</b>

該配置段用來精細地調節drbd的屬性,網絡相關的屬性。常用的選項有: 

sndbuf-size:該選項用來調節TCP send buffer的大小,drbd 8.2.7以前的版本,預設值為0,意味着自動調節大小;新版本的drbd的預設值為128KiB。高吞吐量的網絡(例如專用的千兆網卡,或負載均衡中綁定的連接配接)中,增加到512K比較合适,或者可以更高,但是最好不要超過2M。

timeout:該選項設定一個時間值,機關為0.1秒。如果搭檔節點沒有在此時間内發來應答包,那麼就認為搭檔節點已經死亡,是以将斷開這次TCP/IP連接配接。預設值為60,即6秒。該選項的值必須小于connect-int和ping-int的值。

connect-int:如果無法立即連接配接上遠端DRBD裝置,系統将斷續嘗試連接配接。該選項設定的就是兩次嘗試間隔時間。機關為秒,預設值為10秒。

ping-int:該選項設定一個時間值,機關為秒。如果連接配接到遠端DRBD裝置的TCP/IP的空閑時間超過此值,系統将生成一個keep-alive包來檢測對等節點是否還存活。預設值為10秒。

ping-timeout:該選項設定一個時間值,機關是0.1秒。如果對等端沒有在此時間内應答keep-alive包,它将被認為已經死亡。預設值是500ms。

max-buffers:該選項設定一個由drbd配置設定的最大請求數,機關是頁面大小(PAGE_SIZE),大多數系統中,頁面大小為4KB。這些buffer用來存儲那些即将寫入磁盤的資料。最小值為32(即128KB)。這個值大一點好。

max-epoch-size:該選項設定了兩次write barriers之間最大的資料塊數。如果選項的值小于10,将影響系統性能。大一點好。

使用者手冊的另外一部分也提到了max-buffers和max-epoch-size,跟drbd.conf部分的解釋稍有不同:drbd.conf的幫助文檔中說,max-buffers設定的是最大請求數,max-epoch-size設定的是最高的資料塊數;而這部分的幫助文檔說,這兩個選項影響的是secondary節點寫操作的性能,max-buffers設定的是最大的buffers數,這些buffers是drbd系統是為即将寫入磁盤的資料而配置設定的;max-epoch-size設定的是兩次write barrier之間所允許的最大請求數。

多數情況下,這兩個選項應該并行地設定,而且兩個選項的值應該保持一緻。兩個選項的預設值都是2048,在大多數合理的高性能硬體RAID控制器中,把它們設定為8000比較好。

兩個部分的解釋結合起來看,max-buffers設定的是最大的資料塊數,max-epoch-size設定的是所能請求的最大塊數。

參考:http://www.drbd.org/users-guide-emb/s-throughput-tuning.html#s-tune-disable-barriers

ko-count:該選項設定一個值,把該選項設定的值 乘以 timeout設定的值,得到一個數字N,如果secondary節點沒有在此時間内完成單次寫請求,它将從叢集中被移除(即,primary node進入StandAlong模式)。取值範圍0~200,預設值為0,即禁用該功能。

allow-two-primaries:這個是drbd8.0及以後版本才支援的新特性,允許一個叢集中有兩個primary node。該模式需要特定檔案系統的支撐,目前隻有OCFS2和GFS可以,傳統的ext3、ext4、xfs等都不行!

cram-hmac-alg:該選項可以用來指定HMAC算法來啟用對等節點授權。drbd強烈建議啟用對等節點授權機制。可以指定/proc/crypto檔案中識别的任一算法。必須在此指定算法,以明确啟用對等節點授權機制。

shared-secret:該選項用來設定在對待節點授權中使用的密碼,最長64個字元。

data-integrity-alg:該選項設定核心支援的一個算法,用于網絡上的使用者資料的一緻性校驗。通常的資料一緻性校驗,由TCP/IP頭中所包含的16位校驗和來進行,而該選項可以使用核心所支援的任一算法。該功能預設關閉。

另外,還有after-sb-0pri, after-sb-1pri, after-sb-2pri這三個選項,split brian有關。

<b>startup</b><b>配置段:</b>

該配置段用來更加精細地調節drbd屬性,它作用于配置節點在啟動或重新開機時。

譯者注:我曾試過不配置此部分,在首次啟用第二個節點的DRBD塊裝置時,遇到了一個問題:它一直在等待有一個對等節點出現,而遲遲不肯啟動,必須手動讓它停止等待。如下: 

 常用選項有:

 wfc-timeout:該選項設定一個時間值,機關是秒。在啟用DRBD塊時,初始化腳本drbd會阻塞啟動程序的運作,直到對等節點的出現。該選項就是用來限制這個等待時間的,預設為0,即不限制,永遠等待。

 degr-wfc-timeout:該選項也設定一個時間值,機關為秒。也是用于限制等待時間,隻是作用的情形不同:它作用于一個降級叢集(即那些隻剩下一個節點的叢集)在重新開機時的等待時間。

 outdated-wfc-timeout:同上,也是用來設定等待時間,機關為秒。它用于設定等待過期節點的時間。

<b>syncer</b><b>配置段:</b>

該配置段用來更加精細地調節服務的同步程序。

常用選項有:

 rate:設定同步時的速率,預設為250KB。預設的機關是KB/sec,也允許使用K、M和G,如40M。注意:syncer中的速率是以bytes,而不是bits來設定的。

配置檔案中的這個選項設定的速率是永久性的,但可使用下列指令臨時地改變rate的值:

drbdsetup /dev/drbdnum syncer -r 100M

把上述指令中紅色的num替換成你的drbd裝置的從裝置号。隻能在所有節點的其中一個節點上運作此指令。

如果想重新恢複成drbd.conf配置檔案中設定的速率,執行如下指令: 

drbdadm adjust resource

官方提示:速率的設定,最好設為有效可用帶寬的30%。所謂有效可用帶寬,是指網絡帶寬和磁盤讀寫速度中的最小者。有兩個示例:

如果I/O子系統所能維持的讀寫速度為180MB/s,而千兆網絡所能維持的網絡吞吐速度為110MB/s,那麼有效可用帶寬為110MB/s,該選項的推薦值為110 x 0.3 = 33MB/s。

如果I/O速度為80MB/s,而網絡連接配接速度可達千兆,那麼有效可用帶寬為80MB/s,推薦的rate速率應該為80 x 0.3 = 24MB/s

 al-extents:該選項用來設定hot area(即active set)的塊數,取值範圍是7~3843,預設為127,每個塊标志4M大小的底層存儲(即底層裝置)。DRBD會自動檢測host area,如果主節點意外地從叢集中斷開,當該節點重新加入叢集時,hot area所覆寫的區域必須被重新同步。hot area的每次變化,實際上都是對metadata區域的寫操作,是以,該選項的值越大,重新同步的時間越長,但需要更新的meta-data也越少。

而使用者手冊的另外一部分提到,al-extents調整的是Activity Log的大小。如果使用DRBD裝置的應用程式的寫操作比較密集,那麼,一般建議使用較大的Activity Log(active set),否則metadata頻繁的更新操作會影響到寫操作的性能。建議值:3389。

參考:http://www.drbd.org/users-guide-emb/s-throughput-tuning.html#s-tune-al-extents

 verify-alg:該選項指定一個用于線上校驗的算法,核心一般都會支援md5、sha1和crc32c校驗算法。線上校驗預設關閉,必須在此選項設定參數,以明确啟用線上裝置校驗。DRBD支援線上裝置校驗,它以一種高效的方式對不同節點的資料進行一緻性校驗。線上校驗會影響CPU負載和使用,但影響比較輕微。drbd 8.2.5及以後版本支援此功能。

一旦啟用了該功能,你就可以使用下列指令進行一個線上校驗: 

drbdadm verify resource

該指令對指定的resource進行檢驗,如果檢測到有資料塊沒有同步,它會标記這些塊,并往核心日志中寫入一條資訊。這個過程不會影響正在使用該裝置的程式。

如果檢測到未同步的塊,當檢驗結束後,你就可以如下指令重新同步它們:

drbdadm disconnect resource

drbdadm connetc resource

可以安排一個cron任務來自動執行線上校驗,如:

42 0 * * 0 root /sbin/drbdadm verify resource

如果開啟了所有資源的線上檢驗,可以使用如下指令:

42 0 * * 0 root /sbin/drbdadm verify all

 csums-alg:該選項指定一個校驗算法,用來标志資料塊。如果不啟用該選項,rsync會從source發送所有的資料塊到destination;而如果啟用了此選項,那麼rsync将隻交換那些校驗值不同的資料塊,當網絡帶寬有限時,此選項非常有用。而且,在重新開機一個崩潰的primary節點時,該選項會降低CPU帶寬的占用。

handlers:

該配置段用來定義一系列處理器,用來回應特定事件。

具體的選項翻譯,以後再補上吧。。。

繼續閱讀