22 DRBD #
分散式複製區塊裝置 (DRBD*) 可讓您跨 IP 網路為位於兩個不同站台的兩部區塊裝置建立鏡像。與 Corosync 搭配使用時,DRBD 支援分散式高可用性 Linux 叢集。本章將介紹如何安裝及設定 DRBD。
22.1 概念綜覽 #
DRBD 能在將資料從主要裝置複製到次要裝置時,確保兩份資料保持一致。您可以將其視為網路 RAID 1。它會即時執行資料的鏡像複製,因此其複製會持續進行。應用程式無須知曉其資料實際上儲存在其他磁碟上。
DRBD 是 Linux 核心模組,位於下層的 I/O 規劃程式和上層的檔案系統之間,請參閱圖形 22.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 的任何嘗試都會失敗,因為這些空間不用於儲存使用者資料。
22.2 安裝 DRBD 服務 #
依照第 I 部分 「安裝與設定」所述,在網路叢集中的兩台 SUSE Linux Enterprise Server 機器上都安裝 High Availability Extension。安裝 High Availability Extension 時會安裝 DRBD 程式檔案。
如果您不需要完整的叢集堆疊,而只想使用 DRBD,請安裝套件 drbd、drbd-kmp-FLAVOR、drbd-utils 和 yast2-drbd。
22.3 設定 DRBD 服務 #
下面的程序使用伺服器名稱 alice 與 bob,以及叢集資源名稱 r0
。它將 alice 設定為主要節點,並使用 /dev/sda1
儲存資料。請務必修改指示,以使用您自己的節點與檔案名稱。
以下章節假設您擁有 alice 與 bob 兩個節點,並且它們應使用 TCP 連接埠 7788
。請確定您的防火牆中已開啟此連接埠。
準備系統:
確定 Linux 節點中的區塊裝置已就緒並已分割 (如果需要)。
如果磁碟包含您已不再需要的檔案系統,請使用以下指令損毀檔案系統結構:
#
dd if=/dev/zero of=YOUR_DEVICE count=16 bs=1M
如果有多個檔案系統需要摧毀,請在您希望包含到 DRBD 設定中的所有裝置上重複此步驟。
如果叢集已在使用 DRBD,請將叢集置於維護模式:
#
crm configure property maintenance-mode=true
如果叢集已在使用 DRBD,而您跳過了此步驟,即時組態中的語法錯誤會導致服務關閉。
或者,也可以使用
drbdadm
-c FILE
來測試組態檔案。
使用所選的方法來設定 DRBD:
如果您已設定 Csync2 (這應該是預設設定),則 DRBD 組態檔案已包含在需要同步的檔案清單中。若要同步這些組態檔案,請執行以下指令:
#
csync2 -xv
如果您未設定或不想使用 Csync2,請手動將 DRBD 組態檔案複製到另一個節點:
#
scp /etc/drbd.conf bob:/etc/
#
scp /etc/drbd.d/* bob:/etc/drbd.d/
執行啟始同步 (請參閱第 22.3.3 節 「啟始化和格式化 DRBD 資源」)。
重設叢集的維護模式旗標:
#
crm configure property maintenance-mode=false
22.3.1 手動設定 DRBD #
DRBD9 的「自動升級」功能可以在掛接或開啟資源的其中一部裝置以向其中寫入資料時自動將資源升級為主要角色。
目前,自動升級功能僅具有受限支援。使用 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 資源名稱。例如,
nfs
、http
、mysql_0
、postgres_wal
等。此處使用了較籠統的名稱r0
。DRBD 的裝置名稱及其次要編號。
上面的範例為 DRBD 使用了次要編號 0。udev 整合程序檔將提供符號連結
/dev/drbd/by-res/nfs/0
。或者,在組態中省略裝置節點名稱,改為使用下行:drbd0 minor 0
(/dev/
為選擇性) 或/dev/drbd0
在兩個節點間複製的原始裝置。請注意,本範例中兩個節點上的裝置是相同的。如果您需要不同的裝置,請將
disk
參數移至on
主機。Meta-disk 參數通常包含值
internal
,但您也可以明確指定某部裝置來儲存中繼資料。如需詳細資訊,請參閱https://docs.linbit.com/docs/users-guide-9.0/#s-metadata。on
區段指定要對其套用此組態陳述式的主機。各節點的 IP 位址與埠號。每個資源都需要各自的連接埠,通常從
7788
開始。DRBD 資源的兩個連接埠必須相同。設定兩個以上的節點時,需要節點 ID。該 ID 是用於區分不同節點的唯一非負整數。
同步速率。將其設定為磁碟空間和網路頻寬中較小者的三分之一。此設定只能限制重新同步操作,對複製不起作用。
定義網格的所有節點。
hosts
參數包含共用相同 DRBD 設定的所有主機名稱。檢查組態檔案的語法。若以下指令傳回錯誤,請檢查您的檔案:
#
drbdadm dump all
22.3.2 使用 YaST 設定 DRBD #
可以使用 YaST 來啟動 DRBD 的啟始設定。建立 DRBD 設定後,可以手動微調產生的檔案。
但是,當變更組態檔案後,請不要再使用 YaST DRBD 模組。DRBD 模組僅支援有限的一組基本組態。如果您再次使用該模組,它有可能不會顯示您所做的變更。
若要使用 YaST 來設定 DRBD,請執行以下步驟:
啟動 YaST 並選取組態模組
› 。如果您已設定了 DRBD 組態,YaST 會向您發出警告。YaST 會變更您的組態,並將原來的 DRBD 組態檔案儲存為*.YaSTsave
。將
› 中的開機旗標保留原樣 (預設為off
);請不要變更該設定,因為 Pacemaker 會管理此服務。如果防火牆正在執行,請啟用
。移至圖形 22.2 「資源組態」)。
項目。選取 以建立新資源 (請參閱圖 22.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 過濾器中的第一項。若要手動變更過濾器,請按一下 核取方塊。按一下
以儲存您的變更。
22.3.3 啟始化和格式化 DRBD 資源 #
準備系統並設定 DRBD 後,請執行磁碟的首次啟始化:
在 alice 和 bob 這兩個節點上,啟始化中繼資料儲存:
#
drbdadm create-md r0
#
drbdadm up r0
若要縮短 DRBD 資源的初始重新同步時間,請檢查以下項目:
如果所有節點上的 DRBD 裝置都具有相同資料 (例如,透過使用
dd
中所述的 第 22.3 節 「設定 DRBD 服務」 指令損毀檔案系統結構),則請在這兩個節點上使用以下指令跳過初始重新同步步驟:#
drbdadm new-current-uuid --clear-bitmap r0/0
狀態將為
Secondary/Secondary UpToDate/UpToDate
否則,請繼續下一步。
在主要節點 alice 上,啟動重新同步程序:
#
drbdadm primary --force r0
使用以下指令檢查狀態:
#
drbdadm status r0
r0 role:Primary disk:UpToDate bob role:Secondary peer-disk:UpToDate在您的 DRBD 裝置上建立檔案系統,例如:
#
mkfs.ext3 /dev/drbd0
掛接檔案系統並投入使用:
#
mount /dev/drbd0 /mnt/
22.4 從 DRBD 8 移轉到 DRBD 9 #
從 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 資源,另請參閱第 22.5 節 「建立堆疊式 DRBD 裝置」瞭解詳細資訊。
若要保留資料並允許在無需重新建立新資源的情況下新增新的節點,請執行以下操作:
將一個節點設定為待命模式。
更新所有節點上的所有 DRBD 套件。請參閱 第 22.2 節 「安裝 DRBD 服務」。
將新節點資訊新增至資源組態中:
每個
on
區段中的 node-id。connection-mesh 區段的 hosts 參數中會包含所有主機名稱。
請參閱程序 22.1 「手動設定 DRBD」中的範例組態。
在使用
internal
做為meta-disk
索引鍵時增大 DRBD 磁碟的空間。使用支援增大空間的裝置,例如 LVM。或者,改為使用外部磁碟來儲存中繼資料,並使用meta-disk DEVICE;
。根據新組態重新建立中繼資料:
#
drbdadm create-md RESOURCE
取消待命模式。
22.5 建立堆疊式 DRBD 裝置 #
堆疊式 DRBD 裝置包含兩部其他裝置,其中至少有一部裝置也是 DRBD 資源。換言之,DRBD 在一個現有 DRBD 資源的基礎上又另外新增了一個節點 (請參閱圖形 22.3 「資源堆疊」)。此類複製設定可用於備份和災難備援用途。
三向複製使用了非同步 (DRBD 通訊協定 A) 和同步複製 (DRBD 通訊協定 C)。非同步部分用於堆疊的資源,而同步部分用於備用資源。
您的線上環境使用堆疊裝置。例如,如果您有一個 DRBD 裝置 /dev/drbd0
和一個堆疊在其上的裝置 /dev/drbd10
,將會在 /dev/drbd10
上建立檔案系統,請參閱範例 22.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; } }
22.6 將資源層級圍籬區隔與 STONITH 配合使用 #
當 DRBD 複製連結中斷時,Pacemaker 會嘗試將 DRBD 資源升級至另一個節點。為防止 Pacemaker 使用過時的資料啟動服務,請在 DRBD 組態檔案中啟用資源層級圍籬區隔。
圍籬區隔規則可以使用不同的值 (請參閱手冊頁 drbdsetup
和 --fencing
選項)。由於 SUSE Linux Enterprise High Availability Extension 叢集通常與 STONITH 裝置配合使用,因此resource-and-stonith
中會使用值 範例 22.2 「使用叢集資訊庫 (CIB) 啟用資源層級圍籬區隔的 DRBD 組態」。
resource RESOURCE { net { fencing resource-and-stonith; # ... } 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 完成了其同步程序,則會移除該條件約束。現在,叢集管理員可以不受約束地升級資源。
22.7 測試 DRBD 服務 #
如果安裝與組態程序按預期執行,您現在就可以執行基本的 DRBD 功能測試。此測試也有助於瞭解軟體的工作原理。
測試 alice 上的 DRBD 服務。
開啟終端機主控台,然後以
root
身分登入。在 alice 上建立一個掛接點,如
/srv/r0
:#
mkdir -p /srv/r0
掛接
drbd
裝置:#
mount -o rw /dev/drbd0 /srv/r0
從主要節點建立檔案:
#
touch /srv/r0/from_alice
卸載 alice 上的磁碟:
#
umount /srv/r0
在 alice 上輸入以下指令,將 alice 上的 DRBD 服務降級:
#
drbdadm secondary r0
測試 bob 上的 DRBD 服務。
在 bob 上開啟終端機主控台,然後以
root
身分登入。在 bob 上將 DRBD 服務升級為主要服務:
#
drbdadm primary r0
在 bob 上檢查 bob 是否為主要節點:
#
drbdadm status r0
在 bob 上建立一個掛接點,如
/srv/r0
:#
mkdir /srv/r0
在 bob 上掛接 DRBD 裝置:
#
mount -o rw /dev/drbd0 /srv/r0
驗證您在 alice 上建立的檔案是否存在:
#
ls /srv/r0/from_alice
此時應該會列出
/srv/r0/from_alice
檔案。
如果服務在兩個節點上都可執行,即表示 DRBD 設定已完成。
再次將 alice 設為主要節點。
在 bob 上輸入以下指令,卸下 bob 上的磁碟:
#
umount /srv/r0
在 bob 上輸入以下指令,將 bob 上的 DRBD 服務降級:
#
drbdadm secondary r0
在 alice 上將 DRBD 服務升級為主要服務:
#
drbdadm primary r0
在 alice 上檢查 alice 是否為主要節點:
#
drbdadm status r0
若要讓服務在伺服器出現問題時自動啟動並容錯移轉,您可以使用 Pacemaker/Corosync 將 DRBD 設定為高可用性服務。如需關於如何安裝和設定 SUSE Linux Enterprise 15 SP5 的資訊,請參閱第 II 部分 「組態和管理」。
22.8 監控 DRBD 裝置 #
DRBD 隨附了可提供即時監控的公用程式 drbdmon
。該公用程式會顯示所有已設定的資源及其問題。
drbdmon
顯示了一個正常的連接 #如果出現問題,drbdadm
會顯示錯誤訊息:
drbdmon
顯示了一個錯誤的連接 #22.9 調整 DRBD #
調整 DRBD 的方法有多種:
使用外部磁碟儲存中繼資料。這可能會有所幫助,不過會降低維護方便性。
透過
sysctl
變更接收和傳送緩衝區設定,以調整網路連接。在 DRBD 組態中變更
max-epoch-size
、max-buffers
或變更兩者。根據您的 IO 模式增大
al-extents
值。如果您有一個配備了 BBU (電池備份單元) 的硬體 RAID 控制器,設定
no-disk-barrier
、no-disk-flushes
和/或no-md-flushes
可能會對您有所助益。根據工作負載啟用讀取平衡。請參閱 https://www.linbit.com/en/read-balancing/,以取得詳細資料。
22.10 DRBD 疑難排解 #
DRBD 設定涉及眾多元件,因此導致問題發生的原因多種多樣。以下各節將介紹幾種常見的情況並提供了多種解決方案。
22.10.1 組態 #
如果初始的 DRBD 設定未依預期運作,則可能是由於組態有問題。
若要獲取有關組態的資訊,請執行下列步驟:
開啟終端機主控台,然後以
root
身分登入。執行
drbdadm
(帶-d
選項) 以測試組態檔案。輸入以下指令:#
drbdadm -d adjust r0
在
adjust
選項的試執行 (dry run) 期間,drbdadm
會將 DRBD 資源的實際組態與 DRBD 組態檔案進行比較,但不會執行呼叫。檢閱輸出,以確定您瞭解所有錯誤的來源及原因。如果
/etc/drbd.d/*
和drbd.conf
檔案中存在錯誤,請更正後再繼續。如果分割區和設定正確無誤,請再次執行
drbdadm
(不帶-d
選項)。#
drbdadm adjust r0
此指令會將組態檔案套用於 DRBD 資源。
22.10.2 主機名稱 #
與核心中儲存的主機名稱相比 (請參閱 Node0
輸出),DRBD 的主機名稱區分大小寫 (node0
是不同於 uname -n
的主機)。
如果您擁有多個網路裝置,並希望使用專屬的網路裝置,主機名稱可能不會解析成所使用的 IP 位址。在這種情況下,可以使用參數 disable-ip-verification
。
22.10.3 TCP 連接埠 7788 #
如果您的系統無法連接至對等系統,可能是因為本地防火牆有問題。依預設,DRBD 使用 TCP 埠 7788
存取其他節點。請確定在兩個節點上均可存取此連接埠。
22.10.4 DRBD 裝置在重新開機後中斷連接 #
如果 DRBD 不知道哪個真實裝置存放的是最新資料,就會變為電腦分裂狀態。在這種情況下,各個 DRBD 子系統將會做為次要項目出現,並且不會相互連接。在這種情況下,可以在記錄資料中尋找以下訊息:
Split-Brain detected, dropping connection!
若要解決此問題,請在要丟棄資料的節點上輸入以下指令:
#
drbdadm secondary r0
如果狀態為 WFconnection
,請先中斷連接:
#
drbdadm disconnect r0
在含有最新資料的節點上,輸入以下指令:
#
drbdadm connect --discard-my-data r0
如此會將一個節點的資料覆寫為對等節點的資料,因此兩個節點上的檢視窗將會保持一致,從而使問題得到解決。
22.11 更多資訊 #
下列開放原始碼資源適用於 DRBD:
專案首頁 http://www.drbd.org。
http://clusterlabs.org/wiki/DRBD_HowTo_1.0,由 Linux Pacemaker Cluster Stack Project 提供。
該套裝作業系統中提供以下 DRBD 手冊頁:
drbd(8)
、drbdmeta(8)
、drbdsetup(8)
、drbdadm(8)
、drbd.conf(5)
。您可在
/usr/share/doc/packages/drbd-utils/drbd.conf.example
中找到註解的 DRBD 範例組態。此外,為了更方便地在整個叢集中進行儲存管理,請參閱 DRBD-Manager 上關於 https://www.linbit.com/en/drbd-manager/ 的最新宣告。