Centos7

無法在 CentOS 7.3 上使用 DRBD 8.4 執行 drbdadm

  • July 21, 2017

節點:

  • 節點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在兩個節點上執行,所有節點都處於掛起狀態。等了很久沒有結果。

現在跑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) 的備份磁碟上創建文件系統;您想先創建 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,因為它沒有在你的配置中使用)。

  • 在備份塊設備上創建 DRBD 的元數據,並r0在兩個節點上啟動:

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

-檢查 的輸出cat /proc/drbd,您應該看到您的設備是ConnectedSecondary/SecondaryInconsistent/Inconsistent。如果這些事情中的任何一個正確,請停止,有些事情是不對的。

  • 然後,選擇任何一個節點(不是兩個),強制它成為主節點(DRBD 不會讓你在有Inconsistent數據的節點上成為主節點)並創建 FS:
# drbdadm primary r0 --force
# mkfs.ext4 /dev/drbd0

然後你會使用/dev/drbd0就像你會使用/dev/sdaor /dev/sdc; 除非您對自己正在做的事情有信心,否則不要再觸摸/dev/sdb或再次觸摸。/dev/sdc觸摸 DRBD 的備份磁碟可能會引入 DRBD 不會意識到的不一致(直到您執行verify或以其他方式覆蓋該塊)。

繼續閱讀 LINBIT 的文件。DRBD 顯然是一個很棒的工具,一旦你了解了基礎知識就很容易使用,但是你正在處理儲存,所以有很大的空間可以永久地搞砸事情。

引用自:https://serverfault.com/questions/863231