drbd

環境:RHEL6.0 x86-64  selinux and iptables disabled
軟件下載:http://oss.linbit.com/drbd


系統管理:drbd的使用


一. DRBD介紹


DRBD(Distributed Replicated Block Device)是linux平臺上由內核模塊和相關腳本而構成的分散式儲存系統,也可以說是一種塊設備。用以構建高可用性(HA)的集羣。其實現方式是通 過網絡來鏡像整個設備。它類似於一個網絡RAID-1功能。
使用DRBD後,當你將數據寫入本地文件系統時,數據還將會被髮送到網絡中另一臺主機上.以相同的形式記錄在一個文件系統中.本地(主節點)與遠程主機(備節點)的數據可以保證實時同步.當本地系統出現故障時,遠程主機上還會保留有一份相同的數據,可以繼續使用。
也可以說,DRBD負責接受數據,把數據寫到本地磁盤,然後發送給另一個主機。另一個主機再將數據存到自己的磁盤中。

在高可用(HA)中使用DRBD功能,可以代替使用一個共享盤陣.因爲數據同時存在於本地主機和遠程主機上,切換時,遠程主機只要使用它上面的那份備份數據,就可以繼續進行服務了.
DRBD的工作原理如下圖:
          +----------+
          | 文件系統 |
          +----------+
                 |
                V
        +-----------------+
        |     塊設備層     |
        | (/dev/drbd1) |
        +-----------------+
         |                   |
         |                   |
         V                 V
 +-------------+  +-----------------+
 | 本地硬盤     |  | 遠程主機硬盤 |
 |(/dev/hdb1)|  | (/dev/hdb1) |
 +--------------+  +----------------+
DRBD官方網站:http://www.drbd.org/
DRBD是以GPL2授權散佈的自由軟體。

二. DRBD的安裝

從官方網站(www.drbd.org)下載源碼包:drbd-8.0.4版本.然後分別在兩臺主機上安裝DRBD:

# tar jxf drbd-8.0.4.tar.gz
# cd drbd-8.0.4
# make
# make install


make install執行之後:
drbd.ko被安裝到/lib/modules/$KernelVersion/kernel/drivers/block下.
drbd相關工具(drbdadm,drbdsetup)被安裝到/sbin下.
並會在/etc/init.d/下建立drbd啓動腳本.

三. DRBD的配置

1.DRBD使用的硬盤分區
你需要爲本地主機和遠程主機,指定一個DRBD使用的硬盤分區.這兩個分區的大小必須相同.
我們指定兩臺主機的/dev/hdb1分區作爲DRBD的使用的分區.這兩個分區大小都爲300MB.

2.drbd.conf配置文件
DRBD運行時,會讀取一個配置文件/etc/drbd.conf.這個文件裏描述了DRBD設備與硬盤分區的映射關係,和DRBD的一些配置參數.
下面是一個drbd.conf文件的簡單示例:
<主機>Turbolinux 10.5操作系統,主機名爲g105-1,IP地址爲 10.0.1.2,DRBD分區爲/dev/hdb1.
<備機>Turbolinux 10.5操作系統,主機名爲g105-2,IP地址爲 10.0.2.2,DRBD分區爲/dev/hdb1.

       # 是否參加DRBD使用者統計.默認是yes
       global { usage-count yes; }
       # 設置主備節點同步時的網絡速率最大值,單位是字節.
       common { syncer { rate 1M; } }
       # 一個DRBD設備(即:/dev/drbdX),叫做一個"資源".裏面包含一個DRBD設備的主備節點的
       # 相關信息.
       #
       resource r0 {
            # 使用協議C.表示收到遠程主機的寫入確認後,則認爲寫入完成.
            protocol C;
            net {
                 # 設置主備機之間通信使用的信息算法.
                 cram-hmac-alg sha1;
                 shared-secret "FooFunFactory";
            }
            # 每個主機的說明以"on"開頭,後面是主機名.在後面的{}中爲這個主機的配置.
            on g105-1 {
                 # /dev/drbd1使用的磁盤分區是/dev/hdb1
                 device    /dev/drbd1;
                 disk      /dev/hdb1;
                 # 設置DRBD的監聽端口,用於與另一臺主機通信
                 address   10.0.1.2:7898;
                 meta-disk  internal;
            }
            on g105-2 {
                 device    /dev/drbd1;
                 disk      /dev/hdb1;
                 address   10.0.2.2:7898;
                 meta-disk  internal;
            }
       }


然後將這個drbd.conf文件分別複製到兩臺主機的/etc目錄下.

3.DRBD的啓動
在啓動DRBD之前,你需要分別在兩臺主機的hdb1分區上,創建供DRBD記錄信息的數據塊.分別在
兩臺主機上執行:

[root@g105-1 /]# drbdadm create-md r0
[root@g105-2 /]# drbdadm create-md r0


“r0”是我們在drbd.conf裏定義的資源名稱.可修改.
現在我們可以啓動DRBD了,分別在兩臺主機上執行:

[root@g105-1 /]# /etc/init.d/drbd start
[root@g105-2 /]# /etc/init.d/drbd start


現在可以查看DRBD的狀態,然後在g105-1主機上執行:

[root@g105-1 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:22:30

 1: cs:Connected st: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
        resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0


”/proc/drbd”中顯示了drbd當前的狀態.第一行的st表示兩臺主機的狀態,都是”備機”狀態.ds是磁盤狀態,都是”不一致”狀態.
這是由於,DRBD無法判斷哪一方爲主機,以哪一方的磁盤數據作爲標準數據.所以,我們需要初始化一個主機.在g105-1上執行:

[root@g105-1 /]# drbdsetup /dev/drbd1 primary -o

現在再看一個g105-1上的DRBD狀態:

[root@g105-1 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:22:30

 1: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
    ns:42688 nr:0 dw:0 dr:42688 al:0 bm:2 lo:4 pe:0 ua:4 ap:0
        [==>.................] sync'ed: 14.7% (262464/305152)K
        finish: 0:02:58 speed: 1,440 (1,292) K/sec
        resync: used:1/31 hits:2669 misses:3 starving:0 dirty:0 changed:3
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0


主備機狀態分別是”主/備”,主機磁盤狀態是”實時”,備機狀態是”不一致”.
在第3行,可以看到數據正在同步中,即主機正在將磁盤上的數據,傳遞到備機上.現在的進度是14.7%.
現在看一下g105-2上面的DRBD狀態.

[root@g105-2 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-2, 2007-07-28 07:13:14

 1: cs:SyncTarget st:Secondary/Primary ds:Inconsistent/UpToDate C r---
    ns:0 nr:56608 dw:56608 dr:0 al:0 bm:3 lo:0 pe:0 ua:0 ap:0
        [===>................] sync'ed: 20.0% (248544/305152)K
        finish: 0:02:57 speed: 1,368 (1,284) K/sec
        resync: used:0/31 hits:3534 misses:4 starving:0 dirty:0 changed:4
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0


稍等一會,在數據同步完後,再查看一下g105-1的DRBD狀態:

[root@g105-1 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:22:30

 1: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
    ns:305152 nr:0 dw:0 dr:305152 al:0 bm:19 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:19053 misses:19 starving:0 dirty:0 changed:19
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0



磁盤狀態都是”實時”,表示數據同步完成了.

4.使用DRBD
你現在可以把主機上的DRBD設備掛載到一個目錄上進行使用.備機的DRBD設備無法被掛載,因爲它是用來接收主機數據的,由DRBD負責操作.
在g105-1上執行:

[root@g105-1 /]# mount /dev/drbd1 /mnt/drbd1
[root@g105-1 /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda3             9.3G  6.5G  2.4G  73% /
/dev/hda1              99M  9.3M   85M  10% /boot
none                  249M     0  249M   0% /dev/shm
/dev/drbd1            289M   11M  264M   4% /mnt/drbd1


現在,我們在drbd1目錄裏建立一個200M的文件:

[root@g105-1 /]# dd if=/dev/zero of=/mnt/drbd1/tempfile1.tmp bs=104857600 count=2

操作完成後,在g105-2(備機)上執行:
我們先停止DRBD

[root@g105-2 /]# /etc/init.d/drbd stop


現在,我們可以將hdb1進行掛載

[root@g105-2 /]# mount /dev/hdb1 /mnt/drbd1
[root@g105-2 /]# ls /mnt/drbd1 -hl
total 201M
drwx------  2 root root  12K Jul 28 23:44 lost+found
-rw-r--r--  1 root root 200M Jul 29 00:20 tempfile1.tmp
[root@g105-2 /]# umount /mnt/drbd1


可以看到,在主機g105-1上產生的文件tmpfile1.tmp,也完整的保存在備機g105-2的DRBD分區上.這就是DRBD的網絡RAID-1功能. 在主機上的任何操作,都會被同步到備機的相應磁盤分區上,達到數據備份的效果.

5.DRBD的主備機切換
有時,你需要將DRBD的主備機互換一下.可以執行下面的操作:
在主機上,先要卸載掉DRBD設備.

[root@g105-1 /]# umount /mnt/drbd1

將主機降級爲”備機”.

[root@g105-1 /]# drbdadm secondary r0
[root@g105-1 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:13:14

 1: cs:Connected st:Secondary/Secondary ds:UpToDate/UpToDate C r---
    ns:0 nr:5 dw:5 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0


現在,兩臺主機都是”備機”.
在備機g105-2上,將它升級爲”主機”.

[root@g105-2 /]# drbdadm primary r0
[root@g105-2 /]# cat /proc/drbd
version: 8.0.4 (api:86/proto:86)
SVN Revision: 2947 build by root@g105-2, 2007-07-28 07:13:14

 1: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
    ns:0 nr:5 dw:5 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
        act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0


現在,g105-2成爲了”主機”.你可以把它的/dev/drbd1進行掛載和使用了.同樣,數據會被同步到g105-1上面.





四、實驗

主機:momo 192.168.0.178
    desktop115 192.168.0.115


在做此實驗時,要注意網絡要通,且能鏈接到外網。即:
[root@momo ~]# ping www.baidu.com
PING www.a.shifen.com (119.75.218.77) 56(84) bytes of data.
64 bytes from 119.75.218.77: icmp_seq=1 ttl=54 time=41.8 ms
...........................................................
[root@desktop115 ~]# ping www.baidu.com
PING www.a.shifen.com (119.75.218.77) 56(84) bytes of data.
64 bytes from 119.75.218.77: icmp_seq=1 ttl=54 time=42.5 ms
...........................................................
-------------------------------------------------------------------------------------------------------------
#在本地服務器上下載軟件
[root@momo ~]# lftp 192.168.0.254
lftp 192.168.0.254:/pub/docs/drbd/rhel6> mget pub/docs/drbd/rhel6/drbd-8.4.0.tar.gz                              
lftp 192.168.0.254:/pub/docs/drbd/rhel6> quit

#在主機momo上安裝DRBD
[root@momo ~]# tar zxf drbd-8.4.0.tar.gz
[root@momo ~]# yum install -y gcc flex rpm-build kernel-devel gi    #解決軟件依賴性
[root@momo ~]# rpmbuild ~    #在家目錄生成rpmbuild編譯所需路徑;在這裏會出現錯誤,但是家目錄中生成了rombuild目錄

[root@momo ~]# cd drbd-8.4.0
[root@momo drbd-8.4.0]# ./configure
[root@momo drbd-8.4.0]# make rpm    #編譯 drbd
[root@momo drbd-8.4.0]# make km-rpm    #編譯 drbd 內核模塊

#執行以上步驟後,會在/root/rpmbuild/RPMS/x86_64/裏生成rpm包
[root@momo drbd-8.4.0]# cd /root/rpmbuild/RPMS/x86_64/
[root@momo x86_64]# ls         #生成的rpm包
drbd-8.4.0-1.el6.x86_64.rpm
drbd-bash-completion-8.4.0-1.el6.x86_64.rpm
drbd-heartbeat-8.4.0-1.el6.x86_64.rpm
drbd-km-2.6.32_71.el6.x86_64-8.4.0-1.el6.x86_64.rpm
drbd-pacemaker-8.4.0-1.el6.x86_64.rpm
drbd-udev-8.4.0-1.el6.x86_64.rpm
drbd-utils-8.4.0-1.el6.x86_64.rpm
drbd-xen-8.4.0-1.el6.x86_64.rpm
[root@momo x86_64]# rpm -ivh *     #安裝軟件包
[root@momo x86_64]# scp * 192.168.0.115:    #拷貝生成的rpm包到另一主機,並安裝軟件包   
-------------------------------------------------------------------------------------------------------------
[root@desktop115 ~]# ls
drbd-8.4.0-1.el6.x86_64.rpm
drbd-bash-completion-8.4.0-1.el6.x86_64.rpm
drbd-heartbeat-8.4.0-1.el6.x86_64.rpm
drbd-km-2.6.32_71.el6.x86_64-8.4.0-1.el6.x86_64.rpm
drbd-pacemaker-8.4.0-1.el6.x86_64.rpm
drbd-udev-8.4.0-1.el6.x86_64.rpm
drbd-utils-8.4.0-1.el6.x86_64.rpm
drbd-xen-8.4.0-1.el6.x86_64.rpm
[root@desktop115 ~]# rpm -ivh *    #安裝軟件包

-------------------------------------------------------------------------------------------------------------
[root@momo x86_64]# cd /etc/drbd.d/
[root@momo drbd.d]# ls
global_common.conf
[root@momo drbd.d]# cd /etc/   
[root@momo etc]# cat drbd.conf     #全局配置文件
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

include "drbd.d/global_common.conf";
include "drbd.d/*.res";

[root@momo etc]# cd /usr/share/doc/drbd-utils-8.4.0/
[root@momo drbd-utils-8.4.0]# ls
ChangeLog  COPYING  drbd.conf.example  README   
[root@momo drbd-utils-8.4.0]# cd /etc                       
[root@momo etc]# cp /usr/share/doc/drbd-utils-8.4.0/drbd.conf.example /etc/drbd.d/drbd.res  #注意:一定要是.res文件
[root@momo etc]# cd /etc/drbd.d/
[root@momo drbd.d]# ls
drbd.res  global_common.conf
[root@momo drbd.d]# vim drbd.res     #drbd.res裏面可以定義很多資源
 on momo.example.com {
                address 192.168.0.178:7780;

                volume 0 {
                       device minor 0;
                       disk /dev/vdb;
                       meta-disk internal;
                }
        }
        on desktop115.example.com {
                address 192.168.0.115:7780;

                volume 0 {
                       device minor 0;
                       disk /dev/vdb;
                       meta-disk internal;
                }
        }
}
[root@momo drbd.d]# scp drbd.res 192.168.0.115:/etc/drbd.d/
    
[root@momo drbd.d]# drbdadm create-md example  #example你的資源名,默認是example。僅僅是資源名字
..........................................
New drbd meta data block successfully created.
success
[root@momo drbd.d]# /etc/init.d/drbd start
Starting DRBD resources: [
     create res: example
   prepare disk: example
    adjust disk: example
     adjust net: example
]
..........

***************************************************************
 DRBD's startup script waits for the peer node(s) to appear.
 - In case this node was already a degraded cluster before the
   reboot the timeout is 0 seconds. [degr-wfc-timeout]
 - If the peer was available before the reboot the timeout will
   expire after 0 seconds. [wfc-timeout]
   (These values are for resource 'example'; 0 sec -> wait forever)
 To abort waiting enter 'yes' [  20]:
.


-------------------------------------------------------------------------------------------------------------

[root@desktop115 ~]# drbdadm create-md example    
............................................
New drbd meta data block successfully created.
success
[root@desktop115 ~]# /etc/init.d/drbd start
Starting DRBD resources: [
     create res: example
   prepare disk: example
    adjust disk: example
     adjust net: example
]
.
[root@desktop115 ~]# cat /proc/drbd     #查看同步狀態
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: 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:d oos:1048508

[root@desktop115 ~]# ll /dev/drbd0
brw-rw---- 1 root disk 147, 0 May 19 12:05 /dev/drbd0

-------------------------------------------------------------------------------------------------------------
[root@momo drbd.d]# cat /proc/drbd
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: 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:d oos:1048508

#將momo設置爲primary節點,並同步數據;只有primary時纔可用
[root@momo drbd.d]# drbdsetup /dev/drbd0 primary --force

[root@momo drbd.d]# watch  cat /proc/drbd   #查看同步狀態
[root@momo drbd.d]# mkfs.ext4 /dev/drbd0     #數據同步結束後創建文件系統
........................................
[root@momo drbd.d]# mount /dev/drbd0 /mnt/    #掛載文件系統

[root@momo drbd.d]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/vda3              7247916   3680044   3199696  54% /
tmpfs                   390440       260    390180   1% /dev/shm
/dev/vda1               396672     30589    345603   9% /boot
/dev/drbd0             1032020     17668    961928   2% /mnt
[root@momo drbd.d]# cd /mnt/
[root@momo mnt]# ls
lost+found
[root@momo mnt]# cp /boot/* .    #存放數據
[root@momo mnt]# ls
config-2.6.32-71.el6.x86_64         symvers-2.6.32-71.el6.x86_64.gz
initramfs-2.6.32-71.el6.x86_64.img  System.map-2.6.32-71.el6.x86_64
lost+found                          vmlinuz-2.6.32-71.el6.x86_64
[root@momo mnt]# cd

[root@momo ~]# umount /mnt/    #卸載文件系統
[root@momo ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/vda3              7247916   3680044   3199696  54% /
tmpfs                   390440       260    390180   1% /dev/shm
/dev/vda1               396672     30589    345603   9% /boot
[root@momo ~]# cat /proc/drbd     #查看同步狀態
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:1101484 nr:0 dw:52976 dr:1050077 al:18 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0
-------------------------------------------------------------------------------------------------------------
[root@desktop115 ~]# cat /proc/drbd     #查看同步狀態
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:1101484 dw:1101484 dr:0 al:0 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0

-------------------------------------------------------------------------------------------------------------

[root@momo ~]# drbdadm secondary example    #將momo設置爲 secondary 節點

[root@momo ~]# cat /proc/drbd     #查看同步狀態
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:1101484 nr:0 dw:52976 dr:1050077 al:18 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0

-------------------------------------------------------------------------------------------------------------
[root@desktop115 ~]# cat /proc/drbd     #查看同步狀態
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:0 nr:1101484 dw:1101484 dr:0 al:0 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0
[root@desktop115 ~]# drbdadm primary example      #將desktop115設置爲 primary 節點
[root@desktop115 ~]# cat /proc/drbd   #查看同步狀態
version: 8.4.0 (api:1/proto:86-100)
GIT-hash: 28753f559ab51b549d16bcf487fe625d5919c49c build by [email protected], 2012-05-19 11:48:50
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:0 nr:1101484 dw:1101484 dr:664 al:0 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0
[root@desktop115 ~]# mount /dev/drbd0 /mnt/    #掛載文件系統,查看數據是否同步
[root@desktop115 ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       4684748   1276780   3169992  29% /
tmpfs                   251696         0    251696   0% /dev/shm
/dev/vda1               495844     29176    441068   7% /boot
/dev/drbd0             1032020     37276    942320   4% /mnt
[root@desktop115 ~]# cd /mnt/
[root@desktop115 mnt]# ls
config-2.6.32-71.el6.x86_64         symvers-2.6.32-71.el6.x86_64.gz
initramfs-2.6.32-71.el6.x86_64.img  System.map-2.6.32-71.el6.x86_64
lost+found                          vmlinuz-2.6.32-71.el6.x86_64

-------------------------------------------------------------------------------------------------------------

注意:兩臺主機上的/dev/drbd0 不能同時掛載,只有狀態爲primary 時,才能被掛載使用,而此時另一方的狀態爲 secondary
 

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