環境: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
drbd
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.