节点:
- 节点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
。对其进行了格式化。)
按照官方指南在两个节点上配置基本资源:
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;
}
}
在两个节点上编辑 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
Primary
和Secondary
未知。
在节点1上运行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
在节点2上运行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
,也同样无法运行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
在两个节点上运行,全部都处于pending状态。等待了很久也没有结果。
现在就跑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
答案1
您不想在 DRBD 的备份磁盘上创建文件系统(sdb
和sdc
);您想先创建 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
-像上面所做的那样为您的 DRBD 资源创建配置文件。
- 像上面一样添加防火墙规则(除了您实际上不需要端口 7799,因为您的配置中没有使用它)。
r0
-在支持块设备上创建 DRBD 的元数据,并在两个节点上启动:
# drbdadm create-md r0
# drbdadm up r0
# cat /proc/drbd
-检查 的输出cat /proc/drbd
,您应该看到您的设备是Connected
、Secondary/Secondary
和Inconsistent/Inconsistent
。如果其中任何一个是不是真的,停止,有些不对劲。
—然后,选择任一节点(不是两个都选),强制其成为主节点(DRBD 不会让您在具有Inconsistent
数据的节点上成为主节点)并创建 FS:
# drbdadm primary r0 --force
# mkfs.ext4 /dev/drbd0
/dev/drbd0
然后,您将像使用/dev/sda
或一样使用;除非您对所做的事情有信心,否则/dev/sdc
不要再碰/dev/sdb
或。触碰 DRBD 的备份磁盘可能会引起 DRBD 无法察觉的不一致(直到您运行或以其他方式覆盖该块)。/dev/sdc
verify
继续阅读 LINBIT 的文档。DRBD 显然是一个很棒的工具,一旦你理解了基础知识,它就很容易使用,但是你处理的是存储,因此有很大空间会永久地搞乱事情。