无法在 CentOS 7.3 上使用 DRBD 8.4 运行 drbdadm

clo*_*oud 2 partition drbd fdisk centos7

节点:

  • 节点 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
Run Code Online (Sandbox Code Playgroud)

添加了新硬盘并在两个节点上进行分区:

fdisk /dev/sdb
Run Code Online (Sandbox Code Playgroud)

然后格式化分区:

mkfs.ext4 /dev/sdb
Run Code Online (Sandbox Code Playgroud)

(在 node2 上失败,因此将其删除并添加了一个新磁盘/dev/sdc。将其格式化。)

按照官方指南在两个节点上配置基本资源:

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

/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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在两个节点上编辑 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
Run Code Online (Sandbox Code Playgroud)

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

drbdadm create-md r0
Run Code Online (Sandbox Code Playgroud)

一切都好。

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

节点 1:

Device '0' is configured!
Command 'drbdmeta 0 v08 /dev/sdb internal apply-al' terminated with exit code 20
Run Code Online (Sandbox Code Playgroud)

节点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
Run Code Online (Sandbox Code Playgroud)

他们俩都发生了问题。

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
Run Code Online (Sandbox Code Playgroud)

节点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
Run Code Online (Sandbox Code Playgroud)

PrimarySecondary未知。

drbdadm connect all在节点 1 上运行:

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
Run Code Online (Sandbox Code Playgroud)

drbdadm -- --discard-my-data connect all在 node2 上运行:

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
Run Code Online (Sandbox Code Playgroud)

使用它有什么问题?


编辑 1

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
Run Code Online (Sandbox Code Playgroud)

节点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
Run Code Online (Sandbox Code Playgroud)

编辑 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
Run Code Online (Sandbox Code Playgroud)

Mat*_*man 5

您不想在 DRBD(sdbsdc)的支持磁盘上创建文件系统;您想先创建 DRBD,然后使用您的文件系统格式化生成的 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
Run Code Online (Sandbox Code Playgroud)

- 像上面所做的那样,为您的 DRBD 资源创建配置文件。

- 像上面一样添加防火墙规则(除非你真的不需要端口 7799,因为它没有在你的配置中使用)。

- 在后备块设备上创建 DRBD 的元数据,并r0在两个节点上启动:

# drbdadm create-md r0
# drbdadm up r0
# cat /proc/drbd
Run Code Online (Sandbox Code Playgroud)

-检查的输出cat /proc/drbd,你应该看到您的设备ConnectedSecondary/SecondaryInconsistent/Inconsistent。如果这些事情中有任何正确,请停止,有些事情是不对的。

- 然后,选择任一节点(不是两个),强制将其设为主节点(DRBD 不会让您在具有Inconsistent数据的节点上成为主节点)并创建 FS:

# drbdadm primary r0 --force
# mkfs.ext4 /dev/drbd0
Run Code Online (Sandbox Code Playgroud)

然后你会/dev/drbd0像使用/dev/sdaor一样使用/dev/sdc;除非您对自己正在做的事情有信心,否则不要触摸/dev/sdb/dev/sdc再次触摸。接触 DRBD 的后备磁盘可能会引入 DRBD 不会意识到的不一致(直到您运行 averify或以其他方式覆盖该块)。

继续阅读 LINBIT 的文档。DRBD 显然是一个很棒的工具,一旦您了解了基础知识就很容易使用,但是您正在处理存储问题,因此有很大的空间以永久的方式将事情搞砸。