- 論壇徽章:
- 0
|
一:概述:
DRBD 是由內(nèi)核模塊和相關(guān)腳本而構(gòu)成,用以構(gòu)建高可用性的集群。其實現(xiàn)方式是通過網(wǎng)絡(luò)來鏡像整個設(shè)備。您可以把它看作是一種網(wǎng)絡(luò)RAID。 Drbd 負責接收數(shù)據(jù),把數(shù)據(jù)寫到本地磁盤,然后發(fā)送給另一個主機。另一個主機再將數(shù)據(jù)存到自己的磁盤中。
源碼下載http://oss.linbit.com/drbd/0.7/drbd-0.7.19.tar.gz
核心參考文檔:http://www.drbd.org/drbd-howto.html
二:主要實現(xiàn)
假設(shè)有兩臺機器nannan:192.168.0.136 需要鏡像的硬盤:/dev/hdc3
IXDBA.NET社區(qū)論壇
root:192.168.0.139 需要鏡像的硬盤:/dev/hdc2
主服務(wù)器為192.168.0.136 簡稱為136
備份服務(wù)器為192.168.0.139 簡稱為139
平常對數(shù)據(jù)讀寫都在136上實現(xiàn),當136 down掉后可以啟動139,實現(xiàn)數(shù)據(jù)的熱備份。
真正的熱切換需要才用HA 來實現(xiàn)。
三:下載安裝
安裝環(huán)境:Red Hat Enterprise Linux AS release 4,內(nèi)核版本:2.6.9-22.EL
確認內(nèi)核源碼存在,可到http://oss.linbit.com/drbd/去載.
下載源碼注意:當前最新的drbd-8.0pre3,配置文件無法正常配置,出現(xiàn)一大堆錯誤,所以下載以前的穩(wěn)定版本。tar源碼解包后
運行:
A、make KDIR=/usr/src/linux /*內(nèi)核所在的位置*/
/*如果你沒有更改內(nèi)核可以直接運行make,軟件會直接到/lib/module里邊去尋找系統(tǒng)環(huán)境,如果是新的內(nèi)核需要對內(nèi)核進行編譯安裝,
否則make時候會錯誤中斷掉*/
B、make install
安裝完主要生成命令:drbdsetup ,drbdadmin
和配置文件:/etc/drbd.conf ,啟動文件,/etc/init.d/drbd
模塊文件:drbd.ko(在編譯好的安裝包目錄下的drbd下可以找到)
所有命令和配置文件都可以在源碼包編譯成功的目錄下面找到。
./scripts/drbd.conf是最原始的配置文件,當/etc/drbd.conf被破壞,可以直接拷貝覆蓋掉。
C、創(chuàng)建硬件設(shè)備drbd
mknod /dev/drbd0 b 147 0
mknod /dev/drbd1 b 147 1
mknod /dev/drbd2 b 147 2
或者用shell來建立多個:
#for i in $(seq 0 15) ; do mknod /dev/drbd$i b 147 $i ; done
D、DRBD 協(xié)議說明
A 數(shù)據(jù)一旦寫入磁盤并發(fā)送到網(wǎng)絡(luò)中就認為完成了寫入操作。
B 收到接收確認就認為完成了寫入操作。
C 收到寫入確認就認為完成了寫入操作。
您還可以選擇其它參數(shù)來將數(shù)據(jù)傳輸給磁盤和網(wǎng)絡(luò)選項。更多詳情,請參見drbdsetup 手冊頁。
四:配置drbd
修改/etc/drbd.conf
主要修改了:機器名和設(shè)備名ip地址
==================================================
on web1{
device /dev/drbd0;
disk /dev/hdc3;
address 192.168.0.136:7788;
meta-disk internal;
# meta-disk is either 'internal' or '/dev/ice/name [idx]'
#
# You can use a single block device to store meta-data
# of multiple DRBD's.
# E.g. use meta-disk /dev/hde6[0]; and meta-disk /dev/hde6[1];
# for two different resources. In this case the meta-disk
# would need to be at least 256 MB in size.
#
# 'internal' means, that the last 128 MB of the lower device
# are used to store the meta-data.
# You must not give an index with 'internal'.
}
on web2 {
device /dev/drbd0;
disk /dev/hdc2;
address 192.168.0.139:7788;
meta-disk internal;
}
==================================================
下面是整個drbd.conf的配置文件:
注意:配置的版本是drbd-0.7.19.tar.gz,不同版本無法兼容。修改的地方就以上幾個地方和注釋,還有把除了resource r0 外的其他配置塊如resource r1等全部去掉。
也就是說
/****
on root {
device /dev/drbd0;
disk /dev/hdc2;
address 192.168.0.139:7788;
meta-disk internal;
}
}
****/
后面的所有內(nèi)容全部去掉,
下面是一個完整的配置好的drbd.conf
#
# drbd.conf example
#
skip {
As you can see, you can also comment chunks of text
with a 'skip[optional nonsense]{ skipped text }' section.
This comes in handy, if you just want to comment out
some 'resource <some name> {...}' section:
just precede it with 'skip'.
The basic format of option assignment is
<option name><linear whitespace><value>;
It should be obvious from the examples below,
but if you really care to know the details:
<option name> :=
valid options in the respective scope
<value> := <num>|<string>|<choice>|...
depending on the set of allowed values
for the respective option.
<num> := [0-9]+, sometimes with an optional suffix of K,M,G
<string> := (<name>|\"([^\"\\\n]*|\\.)*\")+
<name> := [/_.A-Za-z0-9-]+
}
# global {
# use this if you want to define more resources later
# without reloading the module.
# by default we load the module with exactly as many devices
# as configured mentioned in this file.
#
# minor-count 5;
# The user dialog counts and displays the seconds it waited so
# far. You might want to disable this if you have the console
# of your server connected to a serial terminal server with
# limited logging capacity.
# The Dialog will print the count each 'dialog-refresh' seconds,
# set it to 0 to disable redrawing completely. [ default = 1 ]
#
# dialog-refresh 5; # 5 seconds
# You might disable one of drbdadm's sanity check.
# disable-ip-verification;
# }
#
# this need not be r#, you may use phony resource names,
# like "resource web" or "resource mail", too
#
resource r0 {
protocol C;
# what should be done in case the cluster starts up in
# degraded mode, but knows it has inconsistent data.
incon-degr-cmd "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f";
startup {
degr-wfc-timeout 120; # 2 minutes.
}
disk {
}
net {
}
syncer {
rate 10M;
group 1;
al-extents 257;
}
on web1{
device /dev/drbd0;
disk /dev/hdc3;
address 192.168.0.136:7788;
meta-disk internal;
}
on web2 {
device /dev/drbd0;
disk /dev/hdc2;
address 192.168.0.139:7788;
meta-disk internal;
}
}
=================================================
五、啟動drbd
先確認兩臺要鏡像的機器是否正常,之間的網(wǎng)絡(luò)是否通暢,需要加載的硬盤是否處于umount狀態(tài)。
A、 drbd采用的是模塊控制的方式
所以先要加載drbd.ko 模塊
在136服務(wù)器執(zhí)行:
#insmod drbd.ko 或者modprobe drbd
drbd.ko可以在編譯好的源碼包里找到。
判斷是否加載成功可以使用lsmod來查看:
#lsmod
Module size Used by
drbd 143088 -
有的話表示加載模塊成功
#drbdadm up all
啟動drbd服務(wù),使他掛在后臺狀態(tài)下運行.
可以使用命令netstat -an查看
有啟動端口7788,同時也監(jiān)聽對方的7788端口,來實現(xiàn)數(shù)據(jù)交換。
netstat -ant的輸出結(jié)果里有一行:
#netstat -ant
tcp 0 0 192.168.0.136:7789 0.0.0.0:* LISTEN
B:在139服務(wù)器執(zhí)行
#modprobe drbd
#/etc/rc.d/init.d/drbd start
netstat -atn的輸出結(jié)果,說明兩臺虛擬機的drbd服務(wù)已經(jīng)連接上了:
#netstat -ant
tcp 0 0 192.168.0.136:7789 192.168.0.139:32845 ESTABLISHED
tcp 0 0 192.168.0.136:32770 192.168.0.139:7789 ESTABLISHED
六:設(shè)置權(quán)限
drbd的基本服務(wù)都起來了,現(xiàn)在需要對主的服務(wù)器也就使192.168.0.136這臺服務(wù)器進行配置,讓他能夠?qū)rbd0設(shè)備進行讀寫。
在136機器上運行
#drbdadm -- --do-what-I-say primary all #設(shè)置136服務(wù)器為同步主目錄,也就是同步以136的這個分區(qū)為準.
注意命令格式需要一樣,沒有任何提示的話表示基本上成功了
#sfdisk -s
可以看見有一個硬件設(shè)備:/dev/drbd0
此時,兩臺設(shè)備之間就建立起一個鏡像,您可以查看/proc/drbd 進行核實。
# cat /proc/drbd
如果原來硬盤沒有文件系統(tǒng)的話,現(xiàn)在您可以在設(shè)備/dev/drbd0上創(chuàng)建一個文件系統(tǒng),然后把它加載到136上。
#mkfs.ext3 -j /dev/drbd0
#mkdir /mnt/gaojf
# mount /dev/drbd /mnt/gaojf
現(xiàn)在/dev/drbd0就等于你服務(wù)器上面的一個硬件設(shè)備,你可以對他進行任何的讀寫操作。
七:drbd測試:
1:在136主服務(wù)器上:
#drbdadm primary all
#touch /mnt/gaojf/gaojf
完后,在執(zhí)行
#umount /mnt/gaojf
#drbdadm secondary all
2:接著到139備用服務(wù)器上執(zhí)行
#drbdadm primary all
#mkdir -p /mnt/gaojf
#mount /dev/drbd0 /mnt/gaojf
#ls -l /mnt/gaojf/gaojf
gaojf
Ok,沒問題,可以看到數(shù)據(jù)在136服務(wù)器寫入,在139馬上可以看到.
幾點注意的地方:
1. mount drbd設(shè)備以前必須把設(shè)備切換到primary狀態(tài)。
2. 兩個節(jié)點中,同一時刻只能有一臺處于primary狀態(tài),另一臺處于secondary狀態(tài)。
3. 處于secondary狀態(tài)的服務(wù)器上不能加載drbd設(shè)備。
4. 主備服務(wù)器同步的兩個分區(qū)大小最好相同,這樣不至于浪費磁盤空間,因為drbd磁盤鏡像相當于網(wǎng)絡(luò)raid 1.
5: 在配置過程中,如果出現(xiàn)下面錯誤
Missing argument 'meta_data_dev'
USAGE:
disk lower_dev meta_data_dev meta_data_index [{--size|-d} 0 ... 8587575296]
[{--on-io-error|-e} {pass_on|call-local-io-error|detach}]
[{--fencing|-f} {dont-care|resource-only|resource-and-stonith}] [{--use-bmbv|-b}]
那么就還要初始化meta-data area
drbdadm create-md r0
更詳細的參考:http://www.ixdba.net/article/5c/125.html |
|