DRBD 能在將資料從主要裝置複製到次要裝置時,確保兩份資料保持一致。您可以將其視為網路 RAID 1。它會即時執行資料的鏡像複製,因此其複製會持續進行。應用程式無須知曉其資料實際上儲存在其他磁碟上。
DRBD 是 Linux 核心模組,位於下層的 I/O 規劃程式和上層的檔案系統之間,請參閱圖形 20.1 「DRBD 在 Linux 中的位置」。若要與 DRBD 通訊,使用者需使用高階指令 drbdadm
。為最大限度地提升靈活性,DRBD 隨附有低階工具 drbdsetup
。
鏡像複製間的資料流量不會加密。為了保證資料交換的安全,您應該為連接部署虛擬私人網路 (VPN) 解決方案。
藉由 DRBD,使用者可以使用 Linux 支援的任何區塊裝置,通常包括︰
分割區或完整硬碟
軟體 RAID
邏輯磁碟區管理 (Logical Volume Manager,LVM)
企業卷冊管理系統 (EVMS)
依預設,DRBD 使用 7788
及更高的 TCP 埠來處理 DRBD 節點之間的通訊。請確定您的防火牆不會阻止所用連接埠上的通訊。
您必須先對 DRBD 裝置進行設定,然後才能在其上建立檔案系統。所有與使用者資料相關的操作都只應透過 /dev/drbdN
裝置執行,不能在原始裝置上執行,因為 DRBD 會將原始裝置最後的部分用於儲存中繼資料。使用原始裝置會導致資料不一致。
憑藉 udev 整合,您還可以獲得 /dev/drbd/by-res/RESOURCES
格式的符號連結,這種連結更易於使用,而且還能預防在記錯裝置次要編號的情況下出現安全問題。
例如,如果原始裝置的大小為 1024 MB,則 DRBD 裝置只能使用 1023 MB 來儲存資料,另有大約 70 KB 隱藏留做儲存中繼資料之用。透過原始磁碟存取其餘 KB 的任何嘗試都會失敗,因為這些空間不用於儲存使用者資料。
依照第 I 部分 「安裝、設定與升級」所述,在網路叢集中的兩台 SUSE Linux Enterprise Server 機器上都安裝 High Availability Extension。安裝 High Availability Extension 時會安裝 DRBD 程式檔案。
如果您不需要完整的叢集堆疊,而只想使用 DRBD,請安裝套件 drbd、 drbd-kmp-FLAVOR、 drbd-utils 和 yast2-drbd。
若要簡化 drbdadm
的使用,可以使用 Bash 補完支援。如果要在目前的外圍程序工作階段中將其啟用,請插入以下指令︰
root #
source
/etc/bash_completion.d/drbdadm.sh
若要將其永久用於 root
,請建立或延伸檔案 /root/.bashrc
,並插入上面的指令行。
下面的程序使用伺服器名稱 alice 與 bob,以及叢集資源名稱 r0
。它會將 alice 設定為主要節點,並使用 /dev/sda1
儲存資料。請務必修改指示,以使用您自己的節點與檔案名稱。
以下章節假設您擁有 alice 與 bob 兩個節點,並且它們應使用 TCP 連接埠 7788
。請確定您的防火牆中已開啟此連接埠。
準備系統︰
確定 Linux 節點中的區塊裝置已就緒並已分割 (如果需要)。
如果磁碟包含您已不再需要的檔案系統,請使用以下指令損毀檔案系統結構︰
root #
dd
if=/dev/zero of=YOUR_DEVICE count=16 bs=1M
如果有多個檔案系統需要摧毀,請在您希望包含到 DRBD 設定中的所有裝置上重複此步驟。
如果叢集已在使用 DRBD,請將叢集置於維護模式︰
root #
crm
configure property maintenance-mode=true
如果叢集已在使用 DRBD,而您跳過了此步驟,即時組態中的語法錯誤會導致服務關閉。
或者,也可以使用 drbdadm
-c 檔案
來測試組態檔案。
使用所選的方法來設定 DRBD︰
如果您之前已設定 Csync2 (這應該是預設設定),則 DRBD 組態檔案現已包含在需要同步的檔案清單中。若要同步化這些檔案,請使用︰
root #
csync2
-xv /etc/drbd.d/
如果您未設定或不想使用 Csync2,請手動將 DRBD 組態檔案複製到另一個節點︰
root #
scp
/etc/drbd.conf bob:/etc/root #
scp
/etc/drbd.d/* bob:/etc/drbd.d/
執行啟始同步 (請參閱第 20.3.3 節 「啟始化和格式化 DRBD 資源」)。
重設叢集的維護模式旗標︰
root #
crm
configure property maintenance-mode=false
DRBD9 的「自動升級」功能可以使用複製和檔案系統資源,而非主要/從屬連接。如果使用此功能時正在掛接某個檔案系統,DRBD 會自動變為主要模式。
目前,自動升級功能僅具有受限支援。使用 DRBD 9 時,SUSE 支援的使用案例與使用 DRBD 8 時相同。除此以外的使用案例 (例如所包含節點超過兩個的設定) 不受支援。
若要手動設定 DRBD,請執行下列步驟︰
從 DRBD 版本 8.3 開始,以前的組態檔案會分割為多個獨立檔案,位於 /etc/drbd.d/
目錄下。
開啟檔案 /etc/drbd.d/global_common.conf
。該檔案中已包含一些全域預定義值。轉至 startup
區段,並插入以下幾行︰
startup { # wfc-timeout degr-wfc-timeout outdated-wfc-timeout # wait-after-sb; wfc-timeout 100; degr-wfc-timeout 120; }
這些選項可用於減少開機過程中的逾時,詳細資料請參閱 https://docs.linbit.com/docs/users-guide-9.0/#ch-configure。
建立檔案 /etc/drbd.d/r0.res
。依據具體情況變更以下幾行,然後儲存︰
resource r0 { 1 device /dev/drbd0; 2 disk /dev/sda1; 3 meta-disk internal; 4 on alice { 5 address 192.168.1.10:7788; 6 node-id 0; 7 } on bob { 5 address 192.168.1.11:7788; 6 node-id 1; 7 } disk { resync-rate 10M; 8 } connection-mesh { 9 hosts alice bob; } }
方便與需要資源的服務建立某種關聯的 DRBD 資源名稱。例如 | |
DRBD 的裝置名稱及其次要編號。
上面的範例為 DRBD 使用了次要編號 0。Udev 整合程序檔將會為您提供一個符號連結
| |
在兩個節點間複製的原始裝置。請注意,本範例中兩個節點上的裝置是相同的。如果您需要不同的裝置,請將 | |
meta-disk 參數通常包含值 | |
| |
各節點的 IP 位址與埠號。每個資源都需要各自的連接埠,通常從 | |
設定兩個以上的節點時,需要節點 ID。該 ID 是用於區分不同節點的唯一非負整數。 | |
同步速率。將其設定為磁碟空間和網路頻寬中較小者的三分之一。此設定只能限制重新同步操作,對複製不起作用。 | |
定義網格的所有節點。 |
檢查組態檔案的語法。若以下指令傳回錯誤,請檢查您的檔案︰
root #
drbdadm
dump all
可以使用 YaST 來啟動 DRBD 的啟始設定。建立 DRBD 設定後,可以手動微調產生的檔案。
但是,當變更組態檔案後,請不要再使用 YaST DRBD 模組。DRBD 模組僅支援有限的一組基本組態。如果您再次使用該模組,它很有可能不會顯示所做的變更。
若要使用 YaST 來設定 DRBD,請執行以下步驟︰
啟動 YaST 並選取組態模組*.YaSTsave
。
將off
);請不要變更該設定,因為 Pacemaker 會管理此服務。
如果有防火牆在執行,則啟用
。移至圖形 20.2 「資源組態」)。
項目。按一下 以建立新資源 (請參閱需要設定以下參數︰
DRBD 資源的名稱 (強制)
相關節點的主機名稱
相應節點的 IP 位址和連接埠號 (預設為 7788
)
用於存取所複製資料的區塊裝置路徑。如果裝置包含次要編號,則關聯的區塊裝置通常命名為 /dev/drbdX
,其中,X 是裝置次要編號。如果裝置不包含次要編號,請務必在裝置名稱後面新增 minor 0
。
在兩個節點間複製的原始裝置。如果您使用 LVM,請插入 LVM 裝置名稱。
internal
值,或指定由索引定義的具體裝置,以存放 DRBD 所需的中繼資料。
也可為多重 drbd 資源使用一個真實裝置。例如,如果第一個資源使用的/dev/sda6[0]
,您可以將 /dev/sda6[1]
用於第二個資源。不過,此磁碟上必須為每個資源至少預留 128 MB 的空間。固定中繼資料大小會限制您可複製的最大資料大小。
上述所有選項在 /usr/share/doc/packages/drbd/drbd.conf
檔案與 drbd.conf(5)
線上文件中都以範例進行了說明。
按一下
。按一下
以輸入第二個 DRBD 資源,然後按一下 完成。依次按一下
和 關閉資源組態。如果您在 DRBD 中使用 LVM,則需要在 LVM 組態檔案中變更一些選項 (請參閱
項目)。YaST DRBD 模組可自動完成此項變更。
LVM 過濾器將會拒絕 DRBD 資源的 localhost 磁碟名稱和預設過濾器。只能在 /dev/drbd
中掃描 LVM 裝置。
例如,如果將 /dev/sda1
用做 DRBD 磁碟,則會插入裝置名稱做為 LVM 過濾器中的第一個項目。若要手動變更過濾器,請按一下 核取方塊。
按一下
儲存您的變更。準備系統並設定 DRBD 後,請執行磁碟的首次啟始化︰
在 alice 和 bob 這兩個節點上,啟始化中繼資料儲存︰
root #
drbdadm
create-md r0root #
drbdadm
up r0
若要縮短 DRBD 資源的初始重新同步時間,請檢查以下項目︰
如果所有節點上的 DRBD 裝置都具有相同資料 (例如,透過使用第 20.3 節 「設定 DRBD 服務」中所述的 dd
指令損毀檔案系統結構),則請在這兩個節點上使用以下指令跳過初始重新同步步驟︰
root #
drbdadm
new-current-uuid --clear-bitmap r0/0
狀態將為 Secondary/Secondary UpToDate/UpToDate
否則,請繼續下一步。
在主要節點 alice 上,啟動重新同步程序︰
root #
drbdadm
primary --force r0
使用以下指令檢查狀態︰
root #
drbdadm
status r0 r0 role:Primary disk:UpToDate bob role:Secondary peer-disk:UpToDate
在您的 DRBD 裝置上建立檔案系統,例如︰
root #
mkfs.ext3
/dev/drbd0
掛接檔案系統並投入使用︰
root #
mount
/dev/drbd0 /mnt/
從 DRBD 8 (隨附於 SUSE Linux Enterprise High Availability Extension 12 SP1 中) 到 DRBD 9 (隨附於 SUSE Linux Enterprise High Availability Extension 12 SP2 中),中繼資料格式已發生變化。DRBD 9 不會自動將之前的中繼資料檔案轉換為新格式。
移轉到 12 SP2 之後,在啟動 DRBD 之前,請先將 DRBD 中繼資料手動轉換為版本 9 格式。請使用 drbdadm
create-md
執行此操作。不需要變更任何組態。
使用 DRBD 9 時,SUSE 支援的使用案例與使用 DRBD 8 時相同。除此以外的使用案例 (例如所包含節點超過兩個的設定) 不受支援。
DRBD 9 將會退回到與版本 8 相容的狀態。如果有三個或更多節點,您需要重新建立中繼資料才能使用 DRBD 版本 9 的特定選項。
如果具有堆疊式 DRBD 資源,另請參閱第 20.5 節 「建立堆疊式 DRBD 裝置」瞭解詳細資訊。
若要保留資料並允許在無需重新建立新資源的情況下新增新的節點,請執行以下操作︰
將一個節點設定為待命模式。
更新所有節點上的所有 DRBD 套件,請參閱第 20.2 節 「安裝 DRBD 服務」。
將新節點資訊新增至資源組態中︰
node-id (針對每個 on
區段)。
connection-mesh 區段在 hosts 參數中包含所有主機名稱。
請參閱程序 20.1 「手動設定 DRBD」中的範例組態。
在使用 internal
做為 meta-disk
索引鍵時增大 DRBD 磁碟的空間。使用支援增大空間的裝置,例如 LVM。或者,更換為用於中繼資料的外部磁碟,並使用 meta-disk 裝置;
。
根據新組態重新建立中繼資料︰
root #
drbdadm
create-md RESOURCE
取消待命模式。
堆疊式 DRBD 裝置包含兩部其他裝置,其中至少有一部裝置也是 DRBD 資源。換言之,DRBD 在一個現有 DRBD 資源的基礎上又另外新增了一個節點 (請參閱圖形 20.3 「資源堆疊」)。此類複製設定可用於備份和災難備援用途。
三向複製使用了非同步 (DRBD 通訊協定 A) 和同步複製 (DRBD 通訊協定 C)。非同步部分用於堆疊的資源,而同步部分用於備用資源。
您的線上環境使用堆疊裝置。例如,如果您有一個 DRBD 裝置 /dev/drbd0
和一個堆疊在其上的裝置 /dev/drbd10
,則將會在 /dev/drbd10
上建立檔案系統 (請參閱範例 20.1 「三節點堆疊 DRBD 資源的組態」瞭解更多詳細資料)。
# /etc/drbd.d/r0.res resource r0 { protocol C; device /dev/drbd0; disk /dev/sda1; meta-disk internal; on amsterdam-alice { address 192.168.1.1:7900; } on amsterdam-bob { address 192.168.1.2:7900; } } resource r0-U { protocol A; device /dev/drbd10; stacked-on-top-of r0 { address 192.168.2.1:7910; } on berlin-charlie { disk /dev/sda10; address 192.168.2.2:7910; # Public IP of the backup node meta-disk internal; } }
當 DRBD 複製連結中斷時,Pacemaker 會嘗試將 DRBD 資源升級至另一個節點。為防止 Pacemaker 使用過時的資料啟動服務,請依範例 20.2 「使用叢集資訊庫 (CIB) 啟用資源層級圍籬區隔的 DRBD 組態」中所示,在 DRBD 組態檔案中啟用資源層級圍籬區隔。
resource RESOURCE { net { fencing resource-only; # ... } handlers { fence-peer "/usr/lib/drbd/crm-fence-peer.9.sh"; after-resync-target "/usr/lib/drbd/crm-unfence-peer.9.sh"; # ... } ... }
如果 DRBD 複製連結中斷,DRBD 會執行以下操作︰
DRBD 會呼叫 crm-fence-peer.9.sh
程序檔。
該程序檔會聯絡叢集管理員。
該程序檔會確定與此 DRBD 資源關聯的 Pacemaker 資源。
該程序檔會確定 DRBD 資源不再升級至其他任何節點。DRBD 資源將保留在目前使用中的節點上。
如果複製連結恢復連接並且 DRBD 完成了其同步程序,則會移除該條件約束。現在,叢集管理員可以不受約束地升級資源。
如果安裝與組態程序按預期執行,您現在就可以執行基本的 DRBD 功能測試。此測試也有助於瞭解軟體的工作原理。
測試 alice 上的 DRBD 服務。
開啟終端機主控台,然後以 root
身分登入。
在 alice 上建立掛接點,如 /srv/r0
︰
root #
mkdir
-p /srv/r0
掛接 drbd
裝置︰
root #
mount
-o rw /dev/drbd0 /srv/r0
從主要節點建立檔案︰
root #
touch
/srv/r0/from_alice
卸載 alice 上的磁碟︰
root #
umount
/srv/r0
在 alice 上輸入以下指令,將 alice 上的 DRBD 服務降級︰
root #
drbdadm
secondary r0
測試 bob 上的 DRBD 服務。
在 bob 上開啟終端機主控台,然後以 root
身分登入。
在 bob 上將 DRBD 服務升級為主要服務︰
root #
drbdadm
primary r0
在 bob 上檢查 bob 是否為主要節點︰
root #
drbdadm
status r0
在 bob 上建立掛接點,如 /srv/r0
︰
root #
mkdir
/srv/r0
在 bob 上掛接 DRBD 裝置︰
root #
mount
-o rw /dev/drbd0 /srv/r0
驗證您在 alice 上建立的檔案是否存在︰
root #
ls
/srv/r0/from_alice
此時應列出 /srv/r0/from_alice
檔案。
如果服務在兩個節點上都可執行,即表示 DRBD 設定已完成。
再次將 alice 設為主要節點。
在 bob 上輸入以下指令,卸下 bob 上的磁碟︰
root #
umount
/srv/r0
在 bob 上輸入以下指令,將 bob 上的 DRBD 服務降級︰
root #
drbdadm
secondary
在 alice 上將 DRBD 服務升級為主要服務︰
root #
drbdadm
primary
在 alice 上檢查 alice 是否為主要節點︰
root #
drbdadm
status r0
若要讓服務在伺服器出現問題時自動啟動並容錯移轉,您可以使用 Pacemaker/Corosync 將 DRBD 設定為高可用性服務。如需關於如何安裝和設定 SUSE Linux Enterprise 12 SP5 的資訊,請參閱第 II 部分 「組態與管理」。
調整 DRBD 的方法有多種︰
使用外部磁碟儲存中繼資料。這可能會有所幫助,不過會降低維護方便性。
透過 sysctl
變更接收和傳送緩衝區設定,以調整網路連接。
在 DRBD 組態中變更 max-buffers
和/或 max-epoch-size
。
根據您的 IO 模式增大 al-extents
值。
如果您有一個配備了 BBU (電池備份單元) 的硬體 RAID 控制器,設定 no-disk-flushes
、no-disk-barrier
和/或 no-md-flushes
可能會有所幫助。
根據工作負載啟用讀取平衡。請參閱 https://www.linbit.com/en/read-balancing/,以取得詳細資料。
DRBD 設定涉及眾多元件,因此導致問題發生的原因多種多樣。以下各節將介紹幾種常見的情況並提供了多種解決方案。
如果初始的 DRBD 設定未依預期運作,則可能是由於組態有問題。
若要獲取有關組態的資訊,請執行下列步驟︰
開啟終端機主控台,然後以 root
身分登入。
執行 drbdadm
(含 -d
選項),測試組態檔案。輸入下列指令︰
root #
drbdadm
-d adjust r0
在 adjust
選項的試執行 (dry run) 期間,drbdadm
會將 DRBD 資源的實際組態與 DRBD 組態檔案進行比較,但不會執行呼叫。檢閱輸出,以確定您瞭解所有錯誤的來源及原因。
如果檔案 /etc/drbd.d/*
與 drbd.conf
中存在錯誤,請更正後再繼續。
如果分割區與設定均正確,請再次執行 drbdadm
(不含 -d
選項)。
root #
drbdadm
adjust r0
此指令會將組態檔案套用於 DRBD 資源。
與核心中儲存的主機名稱相比 (請參閱 uname -n
輸出),DRBD 的主機名稱區分大小寫 (Node0
是不同於 node0
的主機)。
如果您擁有多個網路裝置,並希望使用專屬的網路裝置,主機名稱可能不會解析成所使用的 IP 位址。在這種情況下,可以使用參數 disable-ip-verification
。
如果您的系統無法連接至對等系統,可能是因為本地防火牆有問題。依預設,DRBD 使用 TCP 埠 7788
存取其他節點。請確定在兩個節點上均可存取此連接埠。
如果 DRBD 不知道存放最新資料的真實裝置,就會導致電腦分裂狀態。在這種情況下,各個 DRBD 子系統將會做為次要項目出現,並且不會相互連接。在這種情況下,可以在記錄資料中尋找以下訊息︰
Split-Brain detected, dropping connection!
若要解決此問題,請在要丟棄資料的節點上輸入以下指令︰
root #
drbdadm
secondary r0
如果狀態為 WFconnection
,請先中斷連接︰
root #
drbdadm
disconnect r0
在含有最新資料的節點上,輸入以下指令︰
root #
drbdadm
connect --discard-my-data r0
如此會將一個節點的資料覆寫為對等節點的資料,因此兩個節點上的檢視窗將會保持一致,從而使問題得到解決。
下列開放原始碼資源適用於 DRBD︰
專案首頁 http://www.drbd.org。
http://clusterlabs.org/wiki/DRBD_HowTo_1.0,由 Linux Pacemaker Cluster Stack Project 提供。
套裝作業系統中包含 DRBD 的以下man 頁面︰drbd (8)
、drbdmeta (8)
、drbdsetup (8)
、drbdadm (8)
、drbd.conf (5)
。
/usr/share/doc/packages/drbd-utils/drbd.conf.example
中提供了註解的 DRBD 範例組態。
此外,為了更方便地在整個叢集中進行儲存管理,請參閱 https://www.linbit.com/en/drbd-manager/ 上關於 DRBD-Manager 的最新宣告。