在CentOS 7.3上,DRBD 8.4无法运行drbdadm

节点:

  • 节点1
  • 节点2

在这两个节点上使用这种方式安装DRBD:

rpm -ivh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org yum -y install drbd84-utils kmod-drbd84 

添加新的硬盘,并在两个节点上执行分区

 fdisk /dev/sdb 

然后格式化分区:

 mkfs.ext4 /dev/sdb 

(在node2上失败,所以删除它,并添加一个新的磁盘成为/dev/sdc 。格式化它。)

按照官方指南configuration两个节点上的基本资源:

http://docs.linbit.com/docs/users-guide-8.4/p-build-install-configure/#ch-configure

在两个节点上创build/etc/drbd.d/r0.res

 resource r0 { protocol C; on node1 { device /dev/drbd0; disk /dev/sdb; address 192.168.0.1:7789; meta-disk internal; } on node2 { device /dev/drbd0; disk /dev/sdc; address 192.168.0.2:7789; meta-disk internal; } } 

在两个节点上编辑iptables:

 iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 7788 -j ACCEPT iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 7799 -j ACCEPT service iptables save 

在两个节点上初始化数据:

 drbdadm create-md r0 

一切都好。

把资源放在两个节点上: drbdadm up r0

节点1:

 Device '0' is configured! Command 'drbdmeta 0 v08 /dev/sdb internal apply-al' terminated with exit code 20 

节点2:

 ??: Failure: (162) Invalid configuration request additional info from kernel: minor exists in different resource Command 'drbdsetup-84 new-minor r0 0 0' terminated with exit code 10 

他们两人都遇到了问题。

在两个节点上运行cat /proc/drbd

节点1:

 version: 8.4.9-1 (api:1/proto:86-101) GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by akemi@Build64R7, 2016-12-04 01:08:48 0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----s ns:0 nr:0 dw:0 dr:912 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:2097052 

节点2:

 version: 8.4.9-1 (api:1/proto:86-101) GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by akemi@Build64R7, 2016-12-04 01:08:48 0: cs:WFConnection ro:Secondary/Unknown ds:Diskless/DUnknown C r----s ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 

PrimarySecondary不详。

在node1上运行drbdadm connect all

 r0: Failure: (125) Device has a net-config (use disconnect first) Command 'drbdsetup-84 connect r0 ipv4:192.168.0.1:7789 ipv4:192.168.0.2:7789 --protocol=C' terminated with exit code 10 

运行drbdadm -- --discard-my-data connect all node2上的drbdadm -- --discard-my-data connect all

 r0: Failure: (102) Local address(port) already in use. Command 'drbdsetup-84 connect r0 ipv4:192.168.0.1:7789 ipv4:192.168.0.2:7789 --protocol=C --discard-my-data' terminated with exit code 10 

使用它有什么不好?


编辑1

在运行dd if=/dev/zero of=/dev/sdb(sdc) bs=1M oflag=direct status=progress两个节点上的dd if=/dev/zero of=/dev/sdb(sdc) bs=1M oflag=direct status=progress ,它们也无法成功运行drbdadm up r0

节点1

 No valid meta data found Command 'drbdmeta 0 v08 /dev/sdb internal apply-al' terminated with exit code 255 

节点2

 ??: Failure: (162) Invalid configuration request additional info from kernel: minor exists in different resource Command 'drbdsetup-84 new-minor r0 0 0' terminated with exit code 10 

编辑2

此时,在两个节点上运行systemctl start brdb ,所有这些都挂起。 等待很长时间没有结果。

然后跑了lsblk -a现在:

 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 10G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 9G 0 part ├─cl-root 253:0 0 8G 0 lvm / └─cl-swap 253:1 0 1G 0 lvm [SWAP] sdb 8:32 0 16G 0 disk sr0 11:0 1 1024M 0 rom drbd0 147:0 0 2G 0 disk 

您不想在DRBD( sdbsdc )的支持磁盘上创build文件系统; 你想先创buildDRBD,然后用你的文件系统格式化生成的DRBD设备。 这可以通过其他方式完成,但是您需要增大后备分区,或者减小文件系统的大小,以便为DRBD的元数据(使用内部元数据时位于块设备的末端)腾出空间。

这个过程应该是这样的:

像上面所做的那样安装所有的软件。

– 在两个节点上清除分区(可选,但是这样做):

 # dd if=/dev/zero of=/dev/sdb bs=1M oflag=direct status=progress # dd if=/dev/zero of=/dev/sdc bs=1M oflag=direct status=progress 

– 像上面所做的那样为您的DRBD资源创buildconfiguration文件。

– 像上面所做的一样添加防火墙规则(除非您确实不需要端口7799,因为您的configuration中没有使用端口)。

– 在支持块设备上创buildDRBD的元数据,并在两个节点上r0

 # drbdadm create-md r0 # drbdadm up r0 # cat /proc/drbd 

– 检查cat /proc/drbd的输出,你会看到你的设备是ConnectedSecondary/Secondary ,以及Inconsistent/Inconsistent 。 如果这些事情中的任何一个都不是真的, 停下来 ,就是不对的。

– 然后,select任一节点(不是两个),强制它是主要的(DRBD不会让你主要在Inconsistent数据节点上)并创buildFS:

 # drbdadm primary r0 --force # mkfs.ext4 /dev/drbd0 

那么你可以像使用/dev/sda/dev/sdc一样使用/dev/drbd0 ; 除非你对你正在做的事情有信心,否则不要再触摸/dev/sdb/dev/sdc 。 触摸DRBD的支持磁盘会引起DRBD不知道的不一致(直到您运行verify或以其他方式覆盖该块)。

继续阅读LINBIT的文档。 DRBD显然是一个很好的工具,一旦你理解了基础知识,就很容易使用,但是你正在处理存储,所以有很多空间可以永久地把事情弄糟。