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をダウンロードする
以下からダウンロードします。
私は、"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 : :