linux文件系統之drbd

一、drbd簡介

分佈式的塊設備

基於軟件的不共享任何東西的分佈式複製存儲解決方案,而這種解決方案是通過鏡像兩個塊設備中的內容來實現的.而這兩個塊設備是位於不同的主機上

塊設備可以是一個磁盤、分區、甚至可以是一個邏輯卷

drbd在實現數據鏡像的時候,有以下三個特點

1.實時的

2.透明的

3.數據傳輸過程可以做到同步或者異步,也可以做成半同步

一般做成同步性能最差,但安全性最佳。默認情況是做主從模式。不能解決文件系統鎖的問題

drbd是工作在內核當中的。類似於一種驅動模塊

他工作的位置在文件系統的buffer cache和磁盤調度器之間

通過tcp/ip發給另外一臺主機到對方的tcp/ip最終發送給對方的drbd,再由對方的drbd存在本地對應磁盤上

因爲drbd是工作在內核當中,所以我們要對內核進行打補丁。

不過在2.6.33內核之後已經被做進內核當中了

如果做成drbd當本地一個進程往磁盤寫入數據的時候他在什麼情況下會認爲數據寫入完成?

他要不要等待在另外一臺主機寫入完成才認爲是完成呢?

這取決於數據傳輸模式 同步 異步 半同步

異步指的是當數據寫到磁盤上,並且複製的數據已經被放到我們的tcp緩衝區並等待發送以後 就認爲寫入完成

半同步指的是數據已經寫到磁盤上,並且這些數據已經發送到對方內存緩衝區,對方的tcp已經收到數據,並宣佈寫入

同步指的是主節點已寫入,從節點磁盤也寫入


官方的drbd介紹

1.drbd是兩段式的 用戶空間和管理工具

內核空間有內核模塊

用戶空間的管理工具就是drbdadm還有drbdsetup和drbdmeta


對於drbd的resources來說resources就是誰跟誰的鏡像關係,而且這個resources還有名字

關聯某一個特定的drbd設備的相關所有屬性的定義就是resources

1.資源名只能使用純ascii碼 而且不能使用空白字符 用於表示資源名稱

2.所關聯的兩個設備是誰,至少要關聯兩個設備,這個設備是drbd管理的,主設備號是147,次設備號從0開始

因此在一組主機上,drbd的設備的設備名稱就在/dev/drbdN,這個N通常給他的次設備號表示一致。

這個設備號是系統自動分配的

3.磁盤配置信息通常指的是兩個磁盤之間在複製數據的時候最高速率是多大,是不是在數據傳輸的時候進行加密或者簽名.

這些都叫磁盤配置信息或者傳輸屬性.

最重要的是磁盤配置的源數據在什麼地方

4.網絡配置主要用於確保drbd雙主機通訊的時候是否加密,是否簽名,使用多大帶寬.


在drbd配置當中用的最多的是數據源在哪.


resources roles

資源的角色

在主從架構中是不是就有角色了,在某一時刻只能有一個是主的,因爲是主從架構

每一個資源在主從架構當中都有這樣角色

在所有設爲primary的資源將不受限制進行讀寫操作。可以創建文件系統,可以使用裸設備,甚至直接io

在所有設爲secondary的設備中不能掛載,不能讀寫

drbd也有drbd mode 一種是單主模型(主從) 一種叫雙主模型

drbd只有在8.0以後的版本才支持雙主模型

在單主模型下drbd可以使用任意的文件系統

單在雙主模型下只能使用集羣文件系統

開源的集羣文件系統

1.ocfs2

2.gfs2


複製模型就是傳輸模式 同步 異步 半同步

他的複製模型是靠protocol關鍵字來定義的

protocol A表示異步

protocol B表示半同步

protocol C表示同步

默認爲protocol C

在同步模式下只有兩塊磁盤纔會導致數據丟失

在半同步模式下只有主掛了,從服務器停電了 同時 纔會導致數據丟失

drbd的主不會監控從的狀態 所以有可能會造成數據重傳

腦裂的問題

主從聯繫不上了 從也認爲自己變成主的了

最後又恢復了 就可能會出現腦裂

drbd腦裂恢復策略

丟棄最近一次變爲主的,以原來爲主

丟棄設置爲主的,以新的爲準

以誰修改的最少,來保證數據。

二、安裝

drbd安裝和常見高可用集羣安裝一樣

通常使用主機名來訪問對方主機

而且主機名要和uname -n一直

如果純粹使用drbd的話他本身並不依賴於高可用集羣

只不過在高可用集羣當中時候的時候它被定義爲一種資源

如果純粹使用的話 需要手動切換


關於drbd版本

在linux 2.6.33以後的版本中,drbd已經集成到內核中

目前在用的drbd主要8.0 8.2 8.3 三個版本,對應的rpm包是drbd,drbd82和drbd83,因此需要安裝對應的內核模塊,對應的名字爲kmod-drbd,kmod-drbd82,kmod-drbd83.

個版本的功能和配置略有差異我們這裏用的是centos 5.4和x86的系統

我們這裏使用的是drbd83-8.3.13和kmod-drbd83-8.3.13

下載地址爲http://mirror.centos.org/centos/5/extras/i386/RPMS/

注意版本一定要一致 同時drbd83-8.3.13可能需要升級內核到2.6.18-308.8.2.el5

測試環境

1.本次測試有兩個節點,分別爲web01和web02對於的ip爲192.168.0.11和192.168.0.22

2.web01和web02兩個節點各提供了一個大小相同的分區作爲drbd設備;大小爲20g

3.系統爲CentOS 5.4 x86

注意請修改/etc/hosts裏面對應的主機名稱和ip

配置drbd

drbd的主配置文件爲/etc/drbd.conf;默認安裝完之後是空的,但是給了一個樣例複製一下就可以了.爲了管理的便捷性,目前通常會將這些配置文件分成多個部分,並且都保存在/etc/drbd.d/目錄中,主配置文件僅使用

"include"指令將這些配置文件片段整合起來。通常/etc/drbd.d目錄中的配置文件爲global_common.conf和所有以.res結尾的文件,其中global_common.conf

中主要定義global段和common段,而每一個.res的文件用於定義一個資源.


在配置文件中global段只能出現一次,如果所有的配置信息都保存至同一個配置中而不分開爲多個文件的話,global段必須位於配置文件的最開始處.

目前global段可以定義的參數僅有 minor-count,dialog-refresh,disable-ip-verification和usage-count。


common段則用於定義被每一個資源默認繼承的參數,可以在資源定義中使用的參數都可以在common中定義,實際應用中,common段並非必須,但建議將

多個資源共享的參數定義爲common段中的參數以降低配置文件的複雜度。


resource段則用於定義drbd資源,每個資源通常定義在一個單獨的位於/etc/drbd.d目錄中的以.res結尾的文件中。資源在定義時必須爲其命名,名字可以

由非空白的ascii字符組成。每個資源段的定義中至少要包含兩個host字段,以定義此資源關聯至的節點,其他參數均可以從common段或者drbd的默認中進行繼承

而無需定義.

下面開始安裝和配置

1.查看主機名
[root@web01 soft]# vim /etc/hosts
192.168.0.11 web01
192.168.0.22 web02
[root@web02 soft]# vim /etc/hosts
192.168.0.11 web01
192.168.0.22 web02
下面開始安裝drbd
node1:
[root@web01 soft]# yum --nogpgcheck -y localinstall *.rpm
配置文件主配置文件爲/etc/drbd.conf
複製樣例文件
[root@web01 ~]# cp /usr/share/doc/drbd83-8.3.13/drbd.conf /etc/drbd.conf
[root@web01 ~]# cd /etc/drbd.d/
[root@web01 drbd.d]# vim global_common.conf
usage-count yes;是否記錄drbd次數,如果沒用就改爲no
protocol C;同步模式 默認同步.A表示異步,B表示半同步
handlers處理方式
local-io-error 本地io有問題的時候怎麼辦
after-resync-target  重傳之前怎麼辦
before-resync-target 什麼時候做重傳
out-of-sync  同步之前怎麼辦
fence-peer   可以fence
split-brain  腦裂的時候怎麼辦
allow-two-primaries 雙主模型
cram-hmac-alg 數據傳輸中的算法是什麼
shared-secret 共享密碼是什麼
rate 定義同步的時候速率有多大
下面給一個簡單的配置
global_common.conf
    startup {
        wfc-timeout 120;
                degr-wfc-timeout 120;
    }
    disk {
        on-io-error detach;
                fencing resource-only;
    }
    net {
        cram-hmac-alg "sha1";
                shared-secret "testtest2";
    }
    syncer {
        rate 100M;
    }
定義資源
resource 資源名
on 對應的節點是誰
device /dev/drbd0;
disk 這個主機的磁盤分區是那個;
address 監聽在那個地址的哪個端口;
meta-disk 用於定義磁盤磁盤的數據如何保存和存儲; drbd有兩種存儲方式
定義資源的例子
[root@web01 drbd.d]# cat web.res
resource web {
       on web01 {
       device /dev/drbd0;
       disk /dev/sdb5;
       address 192.168.0.11:7789;
       meta-disk internal;
}
       on web02 {
       device /dev/drbd0;
       disk /dev/sdb5;
       address 192.168.0.22:7789;
       meta-disk internal;
}
}
注意兩個主機都要有
開始初始化資源並啓動服務
[root@web01 drbd.d]# drbdadm create-md web
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success
[root@web01 drbd.d]# /etc/init.d/drbd start
雙方都要啓動 啓動之後
[root@web01 drbd.d]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by [email protected], 2012-05-07 11:56:31
m:res  cs         ro                   ds                         p  mounted  fstype
0:web  Connected  Secondary/Secondary  Inconsistent/Inconsistent  C
[root@web01 ~]# drbdadm -- --overwrite-data-of-peer primary web 設置哪個資源爲主節點 這裏設置在web01節點上web資源爲主
對於主primary/Secondary模型的drbd服務來講,在某一個時刻只有一個節點爲primary,因此,要切換兩個節點的角色,只能在將原有的primary節點設置爲
Secondary後,才能將原來的Secondary設置爲primary
我們使用drbdadm secondary web將此節點設置爲secondary;然後再在另外一節點上使用drbdadm primary web將其提升爲primary
注意使用的時候一定要先umount分區
[root@web01 ~]# drbd-overview  查看同步狀態
[root@web01 drbd.d]# chkconfig drbd on
[root@web01 ~]# mkfs.ext3 /dev/drbd0 格式化分區
[root@web01 ~]# mkdir /web
[root@web01 ~]# mount /dev/drbd0 /web/

至此drbd實驗到此結束

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章