1. 程式人生 > 實用技巧 >儲存高可用——DRBD單主模式的搭建

儲存高可用——DRBD單主模式的搭建


儲存高可用——DRBD

DRDB官網:http://drbd.linbit.com/home/what-is-drbd/

wKioL1TEjg3y8EcZAAH_VFH3Fq8850.jpg

拓撲圖說明:

分別在兩臺機器上實現網路 raid0 功能

試驗環境:workstation 10

作業系統:rhel6.2(64位)

核心版本:2.6.32-220.el6.x86_64

兩臺節點配置

節點角色
主機名IP地址
DRBD分割槽
Primary節點node01192.168.1.12/dev/sdb1
Secondary節點node02192.168.1.13/dev/sdb1

軟體下載列表地址: http://oss.linbit.com/drbd/

軟體版本:drbd-8.4.3.tar.gz

------------------------------------以下是node01上的操作------------------------------------


[[email protected]~]#sed-i's/HOSTNAME=localhost.localdomain/HOSTNAME=node01/g'/etc/sysconfig/network#修改主機名
[[email protected]~]#echo-e"192.168.1.12node01\n192.168.1.13node02">>/etc/hosts#設定域名臨時解析
[[email protected]~]#cat>fdisk.sh#建立自動分割槽指令碼
#!/bin/bash
fdisk/dev/sdb<<EOF
n
p
1
1
wq
EOF
[[email protected]~]#shfdisk.sh#分割槽
[[email protected]~]#fdisk-l|grep"sd"
Disk/dev/mapper/VolGroup-lv_rootdoesn'tcontainavalidpartitiontable
Disk/dev/mapper/VolGroup-lv_swapdoesn'tcontainavalidpartitiontable
Disk/dev/sda:10.7GB,10737418240bytes
/dev/sda1*16451200083Linux
/dev/sda264130699727368eLinuxLVM
Disk/dev/sdb:16.1GB,16106127360bytes
/dev/sdb11195815727603+83Linux

注:/dev/sdb1為我上一步所分的區

[[email protected]~]#mkdir/data#建立分割槽的掛載目錄
[[email protected]~]#reboot#這裡最好重啟下,目的是使剛才的設定生效

[[email protected]~]#uname-r#檢視核心版本
2.6.32-220.el6.x86_64
[[email protected]~]#yuminstall-ykernel-headerskernel-develflex
warning:kernel-headers-2.6.32-220.el6.x86_64.rpm:HeaderV3RSA/SHA256Signature,keyIDfd431d51:NOKEY
Preparing...###########################################[100%]
1:kernel-headers###########################################[100%]

注:kernel-devel和kernel-headers版本要和uname -r顯示的核心版本一致,建議用本地源安裝

[[email protected]~]#yuminstall-ywget#安裝wget工具
[[email protected]~]#wgethttp://oss.linbit.com/drbd/8.4/drbd-8.4.3.tar.gz#下載drbd軟體
[[email protected]~]#tarxvfdrbd-8.4.3.tar.gz#解壓軟體包
drbd-8.4.3/.gitignore
drbd-8.4.3/COPYING
drbd-8.4.3/ChangeLog
......
[[email protected]drbd-8.4.3]#yuminstall-y*gcc*#安裝編譯工具
[[email protected]drbd-8.4.3]#./configure--prefix=/usr/local/drbd--with-km

注意:--with-km是啟用核心模組

[[email protected]drbd-8.4.3]#makeKDIR=/usr/src/kernels/2.6.32-220.el6.x86_64/

注:KDIR的路徑 (這個核心原始碼路徑需要根據自己的系統修改)

[[email protected]drbd-8.4.3]#makeinstall
[[email protected]drbd-8.4.3]#mkdir-p/usr/local/drbd/var/run/drbd
[[email protected]drbd-8.4.3]#cp/usr/local/drbd/etc/rc.d/init.d/drbd/etc/rc.d/init.d/
[[email protected]drbd-8.4.3]#chkconfig--adddrbd
[[email protected]drbd-8.4.3]#chkconfigdrbdon

以下是安裝drbd模組:

[[email protected]drbd-8.4.3]#cddrbd
[[email protected]drbd]#makeclean
rm-rf.tmp_versionsModule.markersModule.symversmodules.order
rm-f*.[oas]*.ko.*.cmd.*.d.*.tmp*.mod.c.*.flags.depend.kernel*
rm-fcompat/*.[oas]compat/.*.cmd
[[email protected]drbd]#makeKDIR=/usr/src/kernels/2.6.32-220.el6.x86_64/

Callingtoplevelmakefileofkernelsourcetree,whichIbelieveisin
KDIR=/usr/src/kernels/2.6.32-220.el6.x86_64/

make-C/usr/src/kernels/2.6.32-220.el6.x86_64/SUBDIRS=/root/drbd-8.4.3/drbdmodules
make[1]:Enteringdirectory`/usr/src/kernels/2.6.32-220.el6.x86_64'
CC[M]/root/drbd-8.4.3/drbd/drbd_buildtag.o
CC[M]/root/drbd-8.4.3/drbd/drbd_bitmap.o
CC[M]/root/drbd-8.4.3/drbd/drbd_proc.o
CC[M]/root/drbd-8.4.3/drbd/drbd_worker.o
......
[[email protected]drbd]#cpdrbd.ko/lib/modules/`uname-r`/kernel/lib/
[[email protected]drbd]#modprobedrbd#載入drbd模組
[[email protected]drbd]#lsmod|grepdrbd#驗證模組載入是否成功
drbd3286260
libcrc32c12461drbd

以下是drbd配置部分:

[[email protected]etc]#pwd
/usr/local/drbd/etc
[[email protected]etc]#moredrbd.conf#主配置檔案裡面已經包含了全域性配置檔案和drbd目錄下以.res結尾檔案,所需要修改全域性配置檔案和建立.res檔案即可。
#Youcanfindanexamplein/usr/share/doc/drbd.../drbd.conf.example
include"drbd.d/global_common.conf";
include"drbd.d/*.res";
[[email protected]drbd.d]#viglobal_common.conf#修改drbd全域性配置檔案


global {

usage-count no;

# minor-count dialog-refresh disable-ip-verification

}


common {

protocol C;#使用drbd的同步協議

handlers {

# These are EXAMPLE handlers only.

# They may have severe implications,

# like hard resetting the node under certain circumstances.

# Be careful when chosing your poison.


pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; #去掉註釋

pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; #去掉註釋

local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f"; #去掉註釋

# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";

# split-brain "/usr/lib/drbd/notify-split-brain.sh root";

# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";

# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";

# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;

}


startup {

# wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb

}


options {

# cpu-mask on-no-data-accessible

}


disk {

on-io-error detach;#配置I/O錯誤處理策略為分離

rate 50M;#設定主備節點同步時的網路速率

}


net {

# protocol timeout max-epoch-size max-buffers unplug-watermark

# connect-int ping-int sndbuf-size rcvbuf-size ko-count

# allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri

# after-sb-1pri after-sb-2pri always-asbp rr-conflict

# ping-timeout data-integrity-alg tcp-cork on-congestion

# congestion-fill congestion-extents csums-alg verify-alg

# use-rle}

注:加黑字部分為修改或新增

[[email protected]drbd.d]#touch/usr/local/drbd/etc/drbd.d/drbd.res#建立資源配置檔案

[[email protected] drbd.d]# more drbd.res

resourcer1{
onnode01{
address192.168.1.12:7801;#設定DRBD的監聽埠,用於與另一臺主機通訊。
volume0{
device/dev/drbd1;
disk/dev/sdb1;
meta-diskinternal;
}
}
onnode02{
address192.168.1.13:7801;#設定DRBD的監聽埠,用於與另一臺主機通訊。
volume0{
device/dev/drbd1;
disk/dev/sdb1;
meta-diskinternal;
}
}
}
[[email protected]drbd.d]#drbdadmcreate-mdall#初始化資源
Writingmetadata...
initializingactivitylog
NOTinitializingbitmap
Newdrbdmetadatablocksuccessfullycreated.

--------------------------------------以上是node01上的操作----------------------------------------

node02上的操作和node01上的操作全部相同,在此就不重複了

[[email protected]drbd.d]#/etc/init.d/drbdstart#node01啟動drbd

Starting DRBD resources: [

create res: r1

prepare disk: r1

adjust disk: r1

adjust net: r1

]

..........

***************************************************************

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 'r1'; 0 sec -> wait forever)

To abort waiting enter 'yes' [ -- ]: [ 10]:[ 11]:[ 12]:

.

[[email protected]~]#/etc/init.d/drbdstart#node01啟動drbd
StartingDRBDresources:[
createres:r1
preparedisk:r1
adjustdisk:r1
adjustnet:r1
]

[

[[email protected]~]#netstat-lanput|grep7801#確認監聽埠起來

tcp 0 0 192.168.1.12:7801 192.168.1.13:41242 ESTABLISHED -

tcp 0 0 192.168.1.12:50401 192.168.1.13:7801 ESTABLISHED -

[[email protected]~]#netstat-lanput|grep7801#確認監聽埠起來

tcp 0 0 192.168.1.13:7801 192.168.1.12:50401 ESTABLISHED -

tcp 0 0 192.168.1.13:41242 192.168.1.12:7801 ESTABLISHED -

[email protected]~]#cat/proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2015-01-25 12:08:01


1: 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:f oos:15727084

[[email protected]~]#drbdadm----overwrite-data-of-peerprimaryall#設定node01為主節點
[[email protected]~]#cat/proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2015-01-25 12:08:01


1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-

ns:197192 nr:0 dw:0 dr:201368 al:0 bm:11 lo:1 pe:2 ua:5 ap:0 ep:1 wo:f oos:15531500

[>....................] sync'ed: 1.3% (15164/15356)M

finish: 0:01:19 speed: 195,584 (195,584) K/sec

[[email protected]~]#mkfs.ext4/dev/drbd1#格式化檔案系統

mke2fs 1.41.12 (17-May-2010)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

983040 inodes, 3931771 blocks

......

[[email protected]~]#mount/dev/drbd1/data/#掛載檔案系統

[[email protected] ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root

7.5G 1.3G 5.9G 18% /

tmpfs 495M 0 495M 0% /dev/shm

/dev/sda1 485M 31M 429M 7% /boot

/dev/sr0 3.4G 3.4G 0 100% /iso

/dev/drbd1 15G 166M 14G 2% /data

[[email protected]~]#cp/boot/./data/-rvf#模擬資料的寫入

`/boot/./.vmlinuz-2.6.32-220.el6.x86_64.hmac' -> `/data/./.vmlinuz-2.6.32-220.el6.x86_64.hmac'

`/boot/./System.map-2.6.32-220.el6.x86_64' -> `/data/./System.map-2.6.32-220.el6.x86_64'

`/boot/./symvers-2.6.32-220.el6.x86_64.gz' -> `/data/./symvers-2.6.32-220.el6.x86_64.gz'

`/boot/./initramfs-2.6.32-220.el6.x86_64.img' -> `/data/./initramfs-2.6.32-220.el6.x86_64.img'

......

[[email protected]~]#ls/data/

config-2.6.32-220.el6.x86_64 grub System.map-2.6.32-220.el6.x86_64

efi initramfs-2.6.32-220.el6.x86_64.img symvers-2.6.32-220.el6.x86_64.gz

vmlinuz-2.6.32-220.el6.x86_64


主從切換

以下是主從切換:因為上面設定的是node01為primary,node02為secondary,現在目標是將node01設定為secondary,將node02設定為primary:

首先在node01上執行以下命令:

[[email protected]~]#ls/data/

config-2.6.32-220.el6.x86_64 grub lost+found System.map-2.6.32-220.el6.x86_64

efi initramfs-2.6.32-220.el6.x86_64.img symvers-2.6.32-220.el6.x86_64.gz vmlinuz-2.6.32-220.el6.x86_64

[[email protected]~]#cat/proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2015-01-25 12:08:01


1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:12 nr:8 dw:20 dr:2066 al:1 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[[email protected]~]#umount/data/
[[email protected]~]#drbdadmsecondaryall
然後在node02上執行以下命令:
[[email protected]~]#cat/proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2015-01-25 13:16:26


1: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----

ns:8 nr:16 dw:24 dr:1033 al:1 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[[email protected]~]#drbdadmprimaryall
[[email protected]~]#cat/proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2015-01-25 13:16:26


1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:8 nr:16 dw:24 dr:1697 al:1 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[[email protected]~]#mount/dev/drbd1/data/#並不需要在node02上在對磁碟mkfs.ext4
[[email protected]~]#ls/data/#biao#切換後看到拷貝的資料就表示成功

config-2.6.32-220.el6.x86_64 grub System.map-2.6.32-220.el6.x86_64

efi initramfs-2.6.32-220.el6.x86_64.img symvers-2.6.32-220.el6.x86_64.gz

vmlinuz-2.6.32-220.el6.x86_64

drbd腦裂的模擬借鑑:

http://zhangmaojun023.blog.163.com/blog/static/10919584620128270550813/

截圖是對drbd的一些說明

wKiom1TFqMDRxFYCAAMVJrSuu2g876.jpg

轉載於:https://blog.51cto.com/watchman110/1608052