カスタム検索
tomo.gif (1144 ツバツイツト)line.gif (927 ツバツイツト)line.gif (927 ツバツイツト)line.gif (927 ツバツイツト)To previous pageTo home pageMailing to me

CentOS3.5でDRBDの実験

Modified: 3 December 2005

  いろんな情報を元に奮闘中です。

カーネルの再構築の方法が丁寧に書かれています。
http://wiki.linux-ha.org/DRBD_2fHowTo_2fInstall

DRBDの設定方法が書かれています。ただし、バージョン0.5の情報です。
http://www.wbc.co.jp/~drbd/documentation/HOWTO/index.html

ポイントのみしかかかれていませんが、RHEL3でのバージョン0.7の情報です。
http://www.9203.net/~takech/pukiwiki/index.php?HA%2FDRBD


カーネルソースの再構築

カーネルのソースをインストールします。

# rpm -ivh kernel-source-2.4.21-37.EL.i386.rpm 
Preparing...                ########################################### [100%]
   1:kernel-source          ########################################### [100%]

カーネルをMakeします。

# cd /usr/src/linux-2.4
# make mrproper
# cp /boot/config-2.4.21-37.ELsmp .config
# make -s oldconfig_nonint ; make -s oldconfig_nonint
# make dep
# make
make -C drbd drbd_buildtag.c
make[1]: 入ります ディレクトリ `/home/tomo/drbd-0.7.14/drbd'
make[1]: 出ます ディレクトリ `/home/tomo/drbd-0.7.14/drbd'
make[1]: 入ります ディレクトリ `/home/tomo/drbd-0.7.14/user'
gcc -c -Wall -I../drbd   -c -o drbdsetup.o drbdsetup.c
gcc -c -Wall -I../drbd   -c -o ../drbd/drbd_buildtag.o ../drbd/drbd_buildtag.c
gcc -o drbdsetup drbdsetup.o ../drbd/drbd_buildtag.o 
bison -d -o drbdadm_parser.c drbdadm_parser.y
flex -s -odrbdadm_scanner.c drbdadm_scanner.fl
gcc -c -Wall -I../drbd   -c -o drbdadm_scanner.o drbdadm_scanner.c
gcc -c -Wall -I../drbd   -c -o drbdadm_parser.o drbdadm_parser.c
gcc -c -Wall -I../drbd   -c -o drbdadm_main.o drbdadm_main.c
gcc -c -Wall -I../drbd   -c -o drbdadm_adjust.o drbdadm_adjust.c
gcc -o drbdadm drbdadm_scanner.o drbdadm_parser.o drbdadm_main.o drbdadm_adjust.o ../drbd/drbd_buildtag.o 
make[1]: 出ます ディレクトリ `/home/tomo/drbd-0.7.14/user'
make[1]: 入ります ディレクトリ `/home/tomo/drbd-0.7.14/scripts'
make[1]: `all' に対して行うべき事はありません。
make[1]: 出ます ディレクトリ `/home/tomo/drbd-0.7.14/scripts'
make[1]: 入ります ディレクトリ `/home/tomo/drbd-0.7.14/documentation'
To (re)make the documentation: make doc
make[1]: 出ます ディレクトリ `/home/tomo/drbd-0.7.14/documentation'
make[1]: 入ります ディレクトリ `/home/tomo/drbd-0.7.14/drbd'

    Calling toplevel makefile of kernel source tree, which I believe is in
    KDIR=/lib/modules/2.4.21-37.ELsmp/build

trying to make dep ...
make[2]: 入ります ディレクトリ `/usr/src/linux-2.4.21-37.EL'
make[3]: 入ります ディレクトリ `/usr/src/linux-2.4.21-37.EL'
make[4]: 入ります ディレクトリ `/home/tomo/drbd-0.7.14/drbd'
make[4]: 出ます ディレクトリ `/home/tomo/drbd-0.7.14/drbd'
make[3]: 出ます ディレクトリ `/usr/src/linux-2.4.21-37.EL'
make[3]: 入ります ディレクトリ `/usr/src/linux-2.4.21-37.EL'
/usr/src/linux-2.4.21-37.EL/include/linux/modversions.h was not updated
make[3]: 出ます ディレクトリ `/usr/src/linux-2.4.21-37.EL'
make[2]: 出ます ディレクトリ `/usr/src/linux-2.4.21-37.EL'
test -f ../scripts/adjust_drbd_config_h.sh && \
 KDIR=/lib/modules/2.4.21-37.ELsmp/build /bin/sh ../scripts/adjust_drbd_config_h.sh
  
  Adjusted drbd_config.h:
  --- ./linux/drbd_config.h     2005-10-17 23:34:21.000000000 +0900
  +++ ./linux/drbd_config.h.new 2005-12-04 04:13:50.000000000 +0900
  @@ -38 +38 @@
  -//#define SIGHAND_HACK           // Needed for RH 2.4.20 and later kernels.
  +#define SIGHAND_HACK           // Needed for RH 2.4.20 and later kernels.
  @@ -46 +46 @@
  -//#define HAVE_MM_INLINE_H
  +#define HAVE_MM_INLINE_H
  @@ -49 +49 @@
  -//#define HAVE_FIND_NEXT_BIT
  +#define HAVE_FIND_NEXT_BIT
  
make -C /lib/modules/2.4.21-37.ELsmp/build SUBDIRS=/home/tomo/drbd-0.7.14/drbd  modules
make[2]: 入ります ディレクトリ `/usr/src/linux-2.4.21-37.EL'
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -o scripts/split-include scripts/split-include.c
scripts/split-include include/linux/autoconf.h include/config
make -r -f tmp_include_depends all
make[3]: 入ります ディレクトリ `/usr/src/linux-2.4.21-37.EL'
make[3]: 循環 /usr/src/linux-2.4.21-37.EL/include/asm/smplock.h <- /usr/src/linux-2.4.21-37.EL/include/linux/interrupt.h 依存関係が破棄されました。
make[3]: 循環 /usr/src/linux-2.4.21-37.EL/include/linux/netfilter_ipv4/ip_conntrack_helper.h <- /usr/src/linux-2.4.21-37.EL/include/linux/netfilter_ipv4/ip_conntrack.h 依存関係が破棄されました。
make[3]: 出ます ディレクトリ `/usr/src/linux-2.4.21-37.EL'
make -C  /home/tomo/drbd-0.7.14/drbd CFLAGS="-D__KERNEL__ -I/usr/src/linux-2.4.21-37.EL/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common  -Wno-unused -fomit-frame-pointer -pipe -freorder-blocks -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.21-37.EL/include/linux/modversions.h" MAKING_MODULES=1 modules
make[3]: 入ります ディレクトリ `/home/tomo/drbd-0.7.14/drbd'
gcc -D__KERNEL__ -I/usr/src/linux-2.4.21-37.EL/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common  -Wno-unused -fomit-frame-pointer -pipe -freorder-blocks -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.21-37.EL/include/linux/modversions.h -I/home/tomo/drbd-0.7.14/drbd  -nostdinc -iwithprefix include -DKBUILD_BASENAME=drbd_sizeof_sanity_check  -c -o drbd_sizeof_sanity_check.o drbd_sizeof_sanity_check.c
gcc -D__KERNEL__ -I/usr/src/linux-2.4.21-37.EL/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common  -Wno-unused -fomit-frame-pointer -pipe -freorder-blocks -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.21-37.EL/include/linux/modversions.h -I/home/tomo/drbd-0.7.14/drbd  -nostdinc -iwithprefix include -DKBUILD_BASENAME=drbd_buildtag  -c -o drbd_buildtag.o drbd_buildtag.c
gcc -D__KERNEL__ -I/usr/src/linux-2.4.21-37.EL/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common  -Wno-unused -fomit-frame-pointer -pipe -freorder-blocks -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.21-37.EL/include/linux/modversions.h -I/home/tomo/drbd-0.7.14/drbd  -nostdinc -iwithprefix include -DKBUILD_BASENAME=drbd_bitmap  -c -o drbd_bitmap.o drbd_bitmap.c
gcc -D__KERNEL__ -I/usr/src/linux-2.4.21-37.EL/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common  -Wno-unused -fomit-frame-pointer -pipe -freorder-blocks -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.21-37.EL/include/linux/modversions.h -I/home/tomo/drbd-0.7.14/drbd  -nostdinc -iwithprefix include -DKBUILD_BASENAME=drbd_fs  -c -o drbd_fs.o drbd_fs.c
gcc -D__KERNEL__ -I/usr/src/linux-2.4.21-37.EL/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common  -Wno-unused -fomit-frame-pointer -pipe -freorder-blocks -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.21-37.EL/include/linux/modversions.h -I/home/tomo/drbd-0.7.14/drbd  -nostdinc -iwithprefix include -DKBUILD_BASENAME=drbd_proc  -c -o drbd_proc.o drbd_proc.c
gcc -D__KERNEL__ -I/usr/src/linux-2.4.21-37.EL/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common  -Wno-unused -fomit-frame-pointer -pipe -freorder-blocks -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.21-37.EL/include/linux/modversions.h -I/home/tomo/drbd-0.7.14/drbd  -nostdinc -iwithprefix include -DKBUILD_BASENAME=drbd_worker  -c -o drbd_worker.o drbd_worker.c
gcc -D__KERNEL__ -I/usr/src/linux-2.4.21-37.EL/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common  -Wno-unused -fomit-frame-pointer -pipe -freorder-blocks -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.21-37.EL/include/linux/modversions.h -I/home/tomo/drbd-0.7.14/drbd  -nostdinc -iwithprefix include -DKBUILD_BASENAME=drbd_receiver  -c -o drbd_receiver.o drbd_receiver.c
gcc -D__KERNEL__ -I/usr/src/linux-2.4.21-37.EL/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common  -Wno-unused -fomit-frame-pointer -pipe -freorder-blocks -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.21-37.EL/include/linux/modversions.h -I/home/tomo/drbd-0.7.14/drbd  -nostdinc -iwithprefix include -DKBUILD_BASENAME=drbd_req  -c -o drbd_req.o drbd_req.c
gcc -D__KERNEL__ -I/usr/src/linux-2.4.21-37.EL/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common  -Wno-unused -fomit-frame-pointer -pipe -freorder-blocks -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.21-37.EL/include/linux/modversions.h -I/home/tomo/drbd-0.7.14/drbd  -nostdinc -iwithprefix include -DKBUILD_BASENAME=drbd_actlog  -c -o drbd_actlog.o drbd_actlog.c
gcc -D__KERNEL__ -I/usr/src/linux-2.4.21-37.EL/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common  -Wno-unused -fomit-frame-pointer -pipe -freorder-blocks -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.21-37.EL/include/linux/modversions.h -I/home/tomo/drbd-0.7.14/drbd  -nostdinc -iwithprefix include -DKBUILD_BASENAME=lru_cache  -c -o lru_cache.o lru_cache.c
gcc -D__KERNEL__ -I/usr/src/linux-2.4.21-37.EL/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common  -Wno-unused -fomit-frame-pointer -pipe -freorder-blocks -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.21-37.EL/include/linux/modversions.h -I/home/tomo/drbd-0.7.14/drbd  -nostdinc -iwithprefix include -DKBUILD_BASENAME=mempool_2.4  -c -o mempool-2.4.o mempool-2.4.c
gcc -D__KERNEL__ -I/usr/src/linux-2.4.21-37.EL/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common  -Wno-unused -fomit-frame-pointer -pipe -freorder-blocks -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.21-37.EL/include/linux/modversions.h -I/home/tomo/drbd-0.7.14/drbd  -nostdinc -iwithprefix include -DKBUILD_BASENAME=drbd_main  -c -o drbd_main.o drbd_main.c
ld -m elf_i386 -r -o drbd.o drbd_sizeof_sanity_check.o drbd_buildtag.o drbd_bitmap.o drbd_fs.o drbd_proc.o drbd_worker.o drbd_receiver.o drbd_req.o drbd_actlog.o lru_cache.o mempool-2.4.o drbd_main.o
make[3]: 出ます ディレクトリ `/home/tomo/drbd-0.7.14/drbd'
make[2]: 出ます ディレクトリ `/usr/src/linux-2.4.21-37.EL'
Memorizing module configuration ... done.
make[1]: 出ます ディレクトリ `/home/tomo/drbd-0.7.14/drbd'

        Build successful.
#

再起動します。


DRBDをダウンロードする

以下からダウンロードします。

http://oss.linbit.com/drbd/

私は、"drbd-0.7.14.tar.gz"をダウンロードしました。(2005年12月3日)


解凍し
インストールする

$ tar zxvf drbd-0.7.14.tar.gz
$ cd drbd-0.7.14
$ make
$ su
password: ******
# make install
make[1]: 入ります ディレクトリ `/home/tomo/drbd-0.7.14/user'
install -d /sbin/
install -m 755 drbdsetup /sbin/
install -m 755 drbdadm /sbin/
make[1]: 出ます ディレクトリ `/home/tomo/drbd-0.7.14/user'
make[1]: 入ります ディレクトリ `/home/tomo/drbd-0.7.14/scripts'
mkdir -p /etc/ha.d/resource.d
install -d /etc/rc.d/init.d/
install -m 755 drbd /etc/rc.d/init.d/drbd
install -m 755 drbddisk /etc/ha.d/resource.d

Don't forget to run update-rc.d or chkconfig
make[1]: 出ます ディレクトリ `/home/tomo/drbd-0.7.14/scripts'
make[1]: 入ります ディレクトリ `/home/tomo/drbd-0.7.14/documentation'
set -e; for f in drbdsetup.8 drbd.conf.5 drbd.8 drbdadm.8 drbddisk.8 ; do \
s=${f##*.}; \
install -v -D -m 644 $f /usr/share/man/man$s/$f ; \
done
`drbdsetup.8' -> `/usr/share/man/man8/drbdsetup.8'
`drbd.conf.5' -> `/usr/share/man/man5/drbd.conf.5'
`drbd.8' -> `/usr/share/man/man8/drbd.8'
`drbdadm.8' -> `/usr/share/man/man8/drbdadm.8'
`drbddisk.8' -> `/usr/share/man/man8/drbddisk.8'
make[1]: 出ます ディレクトリ `/home/tomo/drbd-0.7.14/documentation'
make[1]: 入ります ディレクトリ `/home/tomo/drbd-0.7.14/drbd'
install -d //lib/modules/2.4.21-37.ELcustom/block
install -m 644 drbd.o //lib/modules/2.4.21-37.ELcustom/block
[ -e /System.map ] && \
/sbin/depmod -F /System.map -e ./drbd.o 2>&1 >/dev/null || true
make[1]: 出ます ディレクトリ `/home/tomo/drbd-0.7.14/drbd'
#

モジュールのロードと確認をします。

# insmod /lib/modules/2.4.21-37.ELcustom/block/drbd.o 
Warning: kernel-module version mismatch
        /lib/modules/2.4.21-37.ELcustom/block/drbd.o was compiled for kernel version 2.4.21-37.ELcustom
        while this kernel is version 2.4.21-37.ELsmp
Warning: loading /lib/modules/2.4.21-37.ELcustom/block/drbd.o will taint the kernel: forced load
  See http://www.tux.org/lkml/#export-tainted for information about tainted modules
Module drbd loaded, with warnings
# lsmod
Module                  Size  Used by    Tainted: GF 
drbd                  136332   0  (unused)
audit                  90872   1  (autoclean)
ide-cd                 34016   0  (autoclean)
cdrom                  32896   0  (autoclean) [ide-cd]
pcnet32                22788   1 
mii                     4088   0  [pcnet32]
crc32                   3764   0  [pcnet32]
floppy                 57520   0  (autoclean)
sg                     37388   0  (autoclean)
ext3                   90088   2 
jbd                    55380   2  [ext3]
BusLogic               99228   3 
sd_mod                 14160   6 
scsi_mod              115756   3  [sg BusLogic sd_mod]
# modinfo /lib/modules/2.4.21-37.ELcustom/block/drbd.o 
filename:    /lib/modules/2.4.21-37.ELcustom/block/drbd.o
description: "drbd - Distributed Replicated Block Device v0.7.14"
author:      "Philipp Reisner <phil@linbit.com>, Lars Ellenberg <lars@linbit.com>"
license:     "GPL"
parm:        use_nbd_major int, description "DEPRECATED! use nbd device major nr (43) instead of the default 147"
parm:        minor_count int, description "Maximum number of drbd devices (1-255)"
#


デバイスを作成します

for i in `seq 0 15` ; do mknod /dev/drbd$i b 147 $i; done

作成を確認します。

# ls /dev/drbd*
/dev/drbd0   /dev/drbd11  /dev/drbd14  /dev/drbd3  /dev/drbd6  /dev/drbd9
/dev/drbd1   /dev/drbd12  /dev/drbd15  /dev/drbd4  /dev/drbd7
/dev/drbd10  /dev/drbd13  /dev/drbd2   /dev/drbd5  /dev/drbd8
# 

ディスクとネットワークの設定

Primary側("192.168.0.23")の設定

$ drbdsetup /dev/nb0 disk /dev/sdb1
$ drbdsetup /dev/nb0 net 192.168.23 192.168.24 B

 Primary側だけは、以下のようにPrimaryの宣言が必要です。

$ drbdsetup /dev/nb0 primary


Secondery側("192.168.0.24")の設定

$ drbdsetup /dev/nb0 disk /dev/sdb1
$ drbdsetup /dev/nb0 net 192.168.24 192.168.23 B


ディスクのフォーマットをする

Primary側("192.168.0.23")の設定

Primary側だけ、以下のようにフォーマットします。

# mkfs -b 4096 /dev/nb0
mke2fs 1.32 (09-Nov-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1310720 inodes, 2620595 blocks
131029 blocks (5.00%) reserved for the super user
First data block=0
80 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
#

そのディスクをマウントします。

# mkdir /data
# mount /dev/nb0 /data

Secondery側("192.168.0.24")の設定

Secondery側は、ディスクが装着してあればパーティション作成すら不要です。


状態を確認する

Primary側("192.168.0.23")の確認

確認時点で、プライマリ側は、1.2% だけ処理されています。

# cat /proc/drbd
version: 0.6.6 (api:62/proto:62)

0: cs:SyncingAll st:Primary/Secondary ns:121496 nr:0 dw:164660 dr:119453 pe:21 ua:0
        [>...................] sync'ed:  1.2% (10120/10236)M
        finish: 11:23h speed: 250 (250) K/sec
1: cs:Unconfigured st:Secondary/Unknown ns:0 nr:0 dw:0 dr:0 pe:0 ua:0
#

Secondery側("192.168.0.24")の設定

以下のように、確認時点で、セカンダリ側も、1.2% だけ処理されています。

# cat /proc/drbd
version: 0.6.6 (api:62/proto:62)

0: cs:SyncingAll st:Secondary/Primary ns:0 nr:122996 dw:122996 dr:0 pe:0 ua:0
        [>...................] sync'ed:  1.2% (10118/10236)M
        finish: 9:36h speed: 236 (251) K/sec
1: cs:Unconfigured st:Secondary/Unknown ns:0 nr:0 dw:0 dr:0 pe:0 ua:0
#

 以下のコマンドで、動作状況を監視できます。

# while : ; do cat /proc/drbd | grep % ; sleep 10 ; done
        [>...................] sync'ed:  3.9% (9841/10236)M
        [>...................] sync'ed:  4.0% (9836/10236)M
                 :
                 :

To previous pageTo home pageMailing to meJump to Top of pageline.gif (927 ツバツイツト)line.gif (927 ツバツイツト)tomo.gif (1144 ツバツイツト)
カスタム検索


Tweet