1.drbd多節點簡介 在drbd9以前,drbd一直只能配置兩個節點,要麼是primary/secondary,要麼是primary/primary。雖然在這些版本上也能配置第三個節點實現三路節點的同步,但這個第三節點一般都只當作備份drbd設備,幾乎沒人去使用drbd配置3節點。 但是在drbd ...
1.drbd多節點簡介
在drbd9以前,drbd一直只能配置兩個節點,要麼是primary/secondary,要麼是primary/primary。雖然在這些版本上也能配置第三個節點實現三路節點的同步,但這個第三節點一般都只當作備份drbd設備,幾乎沒人去使用drbd配置3節點。
但是在drbd9中,drbd可以定義環狀網路的多節點,最多支持16個節點。這些節點之間,兩兩都要握手。例如,下圖是5節點的drbd環狀圖。
對於host1節點來說,它有4個對端(peer)節點:host2、host3、host4、host5。這4個節點組成host1的"搭檔"(partner)。請區分peer和partner:peer是節點與節點之間的關係,稱為對端;partner是節點和其他所有節點的關係。雖然,是否區分peer和partner不影響drbd9的使用,但是看drbd9文檔的時候有用。
根據上圖,每節點都需要和其他任意一個節點建立連接,因此2節點的drbd只需一個連接對,3節點的drbd需要3個連接對,4個節點需要6個連接對,16個節點需要120個連接對。
在drbd84和以前的版本上,幾乎總是使用/proc/drbd文件來獲取節點之間的狀態信息。但是這個文件只能記錄兩個節點的信息,而drbd9支持多個節點,這個文件已經無法完整記錄各節點之間的關係,因此/proc/drbd已經完全廢棄了。
在drbd9上,可以使用drbdadm status
或drbdsetup status
等命令獲取各節點的信息。
由於每個節點都需要和其他所有節點通信,因此每個節點的元數據區的大小都要比兩節點時的元數據翻(N-1)倍,這意味著很容易出現元數據區空間不足的情況。因此,請保證每個節點的元數據區夠大。如果drbdadm up
啟動失敗,可以查看/var/log/message日誌進行排查是否是因為元數據區的問題。
drbd9.0中還不支持多節點的多主模型(雖能實現,但官方說沒有測試,很危險),在drbd9.1中將正式支持多節點的多主模型。而單主模型的drbd,又沒必要多節點,所以在drbd9中,新添加的多節點特性有點不上不下。
最後,目前還不適合使用drbd9.0,不少新添加的功能還沒有完善。
2.配置3節點的drbd
以下是/etc/drbd.d/rs0.res文件中的內容:
resource rs0 {
volume 0 {
device /dev/drbd0;
disk /dev/sdb2;
meta-disk /dev/sdb1;
}
volume 1 {
device /dev/drbd1;
disk /dev/sdb4;
meta-disk /dev/sdb3;
}
on drbd90.longshuai.com {
address 192.168.100.56:7788;
node-id 0; # 需要定義每個節點標識符id
}
on drbd91.longshuai.com {
address 192.168.100.55:7788;
node-id 1;
}
on drbd92.longshuai.com {
address 192.168.100.58:7788;
node-id 2;
}
connection { # 定義環狀網路中的連接對
host drbd90.longshuai.com port 7001;
host drbd91.longshuai.com port 7010;
}
connection {
host drbd91.longshuai.com port 7012;
host drbd92.longshuai.com port 7021;
}
connection {
host drbd90.longshuai.com port 7002;
host drbd92.longshuai.com port 7020;
}
}
其中connection指令定義節點與節點之間的連接對,由於這裡配置的是3節點,因此配置了3個連接對,分別是(drbd90,drbd91),(drbd90,drbd92),(drbd91,drbd92)。
此外還定義了每個連接對之間tcp通信的埠。如果伺服器上的網卡夠多,可以為每個連接對都使用單獨的IP地址。
如果各連接對之前都不單獨定義通信埠,而是使用address指令上的預設埠,則可以將上面所有connection指令簡化為一個"connection-mesh"指令。如下:
connection-mesh {
hosts drbd90.longshuai.com drbd91.longshuai.com drbd92.longshuai.com;
}
然後在三個節點上都執行:
drbdadm up rs0
這表示3個節點的所有捲組都建立連接、啟動資源。如果想要指定只和某節點建立連接,則可以使用"--peer"選項來指定host指令中的對端。
以下是drbd90.longshuai.com的狀態:
[root@drbd90 ~]# drbdadm status rs0
rs0 role:Secondary
volume:0 disk:Inconsistent
volume:1 disk:Inconsistent
drbd91.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent
volume:1 peer-disk:Inconsistent
drbd92.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent
volume:1 peer-disk:Inconsistent
以下是drbd91.longshuai.com的狀態:
[root@drbd91 ~]# drbdadm status rs0
rs0 role:Secondary
volume:0 disk:Inconsistent
volume:1 disk:Inconsistent
drbd90.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent
volume:1 peer-disk:Inconsistent
drbd92.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent
volume:1 peer-disk:Inconsistent
以下是drbd92.longshuai.com的狀態:
[root@drbd92 ~]# drbdadm status rs0
rs0 role:Secondary
volume:0 disk:Inconsistent
volume:1 disk:Inconsistent
drbd90.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent
volume:1 peer-disk:Inconsistent
drbd91.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent
volume:1 peer-disk:Inconsistent
將drbd90.longshuai.com節點升級為primary,並查看該節點的狀態。
[root@drbd90 ~]# drbdadm --force primary rs0
[root@drbd90 ~]# drbdadm status rs0
rs0 role:Primary
volume:0 disk:UpToDate
volume:1 disk:UpToDate
drbd91.longshuai.com role:Secondary
volume:0 replication:SyncSource peer-disk:Inconsistent done:0.01
volume:1 replication:SyncSource peer-disk:Inconsistent done:0.01
drbd92.longshuai.com role:Secondary
volume:0 replication:SyncSource peer-disk:Inconsistent done:0.01
volume:1 replication:SyncSource peer-disk:Inconsistent done:0.01
再查看drbd91.longshuai.com的狀態。
[root@drbd91 ~]# drbdadm status rs0
rs0 role:Secondary
volume:0 disk:Inconsistent
volume:1 disk:Inconsistent
drbd90.longshuai.com role:Primary
volume:0 replication:SyncTarget peer-disk:UpToDate done:2.53
volume:1 replication:SyncTarget peer-disk:UpToDate done:3.08
drbd92.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent resync-suspended:peer
volume:1 peer-disk:Inconsistent resync-suspended:peer
註意其中的resync-suspended狀態,表示本端和drbd92.longshuai.com節點之間並不同步,它們之間的同步操作處於掛起狀態。
同理,drbd92.longshuai.com節點上的狀態也這樣,和drbd91.longshuai.com節點之間是不會進行同步的,它們的同步操作被掛起。
[root@drbd92 ~]# drbdadm status rs0
rs0 role:Secondary
volume:0 disk:Inconsistent
volume:1 disk:Inconsistent
drbd90.longshuai.com role:Primary
volume:0 replication:SyncTarget peer-disk:UpToDate done:22.15
volume:1 replication:SyncTarget peer-disk:UpToDate done:6.72
drbd91.longshuai.com role:Secondary
volume:0 peer-disk:Inconsistent resync-suspended:peer
volume:1 peer-disk:Inconsistent resync-suspended:peer
如果啟動資源的時候出現如下錯誤:
[root@drbd90 ~]# drbdadm up rs0
0: Failure: (162) Invalid configuration request
Command 'drbdsetup attach 0 /dev/sdb2 /dev/sdb1 flexible' terminated with exit code 10
1: Failure: (162) Invalid configuration request
Command 'drbdsetup attach 1 /dev/sdb4 /dev/sdb3 flexible' terminated with exit code 10
且查看資源的狀態時發現本端節點是Diskless,說明資源沒有和底層設備關聯成功。這可能是底層設備的問題,而底層設備的問題,大多數都是元數據區的問題。
[root@drbd90 ~]# drbdadm status rs0
rs0 role:Secondary
volume:0 disk:Diskless
volume:1 disk:Diskless
drbd91.longshuai.com connection:StandAlone
drbd92.longshuai.com connection:StandAlone
再查看drbd的日誌。很明顯,是元數據區的bitmap槽不夠。之所以不夠,是因為在創建元數據區的時候已經將槽位創建完成了。
[root@drbd90 ~]# vim /var/log/messages
Apr 1 00:19:47 drbd90 kernel: drbd rs0: Starting worker thread (from drbdsetup [75059])
Apr 1 00:19:47 drbd90 kernel: drbd rs0 drbd91.longshuai.com: Starting sender thread (from drbdsetup [75067])
Apr 1 00:19:47 drbd90 kernel: drbd rs0 drbd92.longshuai.com: Starting sender thread (from drbdsetup [75069])
Apr 1 00:19:47 drbd90 kernel: drbd rs0/0 drbd0: disk( Diskless -> Attaching )
Apr 1 00:19:47 drbd90 kernel: drbd rs0/0 drbd0: Maximum number of peer devices = 1
Apr 1 00:19:47 drbd90 kernel: drbd rs0/0 drbd0: Not enough free bitmap slots (available=0, needed=1)
Apr 1 00:19:47 drbd90 kernel: drbd rs0/0 drbd0: disk( Attaching -> Diskless )
Apr 1 00:19:47 drbd90 kernel: drbd rs0/1 drbd1: disk( Diskless -> Attaching )
Apr 1 00:19:47 drbd90 kernel: drbd rs0/1 drbd1: Maximum number of peer devices = 1
Apr 1 00:19:47 drbd90 kernel: drbd rs0/1 drbd1: Not enough free bitmap slots (available=0, needed=1)
Apr 1 00:19:47 drbd90 kernel: drbd rs0/1 drbd1: disk( Attaching -> Diskless )
這時需要添加bitmap槽,或者重建元數據區(可以dump元數據區,再手動編輯元數據區,再導入),甚至擴大元數據區。目前,drbd添加bitmap槽的方法還比較複雜,可參考https://docs.linbit.com/docs/users-guide-9.0/#s-rebalance-workflow。在以後版本中,drbdadm將可以一條命令添加bitmap槽。
回到Linux系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
回到網站架構系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7576137.html
回到資料庫系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7586194.html
轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/8691373.html
註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!