跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Linux Enterprise High Availability Extension 文件 / 管理指南 / 儲存和資料複製 / DRBD
適用範圍 SUSE Linux Enterprise High Availability Extension 15 SP3

21 DRBD

分散式複製區塊裝置 (DRBD*) 可讓您跨 IP 網路為位於兩個不同站台的兩部區塊裝置建立鏡像。與 Corosync 搭配使用時,DRBD 支援分散式高可用性 Linux 叢集。本章將介紹如何安裝及設定 DRBD。

21.1 概念綜覽

DRBD 能在將資料從主要裝置複製到次要裝置時,確保兩份資料保持一致。您可以將其視為網路 RAID 1。它會即時執行資料的鏡像複製,因此其複製會持續進行。應用程式無須知曉其資料實際上儲存在其他磁碟上。

DRBD 是 Linux 核心模組,位於下層的 I/O 規劃程式和上層的檔案系統之間,請參閱圖形 21.1 「DRBD 在 Linux 中的位置」。若要與 DRBD 通訊,使用者需使用高階指令 drbdadm。為最大限度地提升靈活性,DRBD 隨附有低階工具 drbdsetup

DRBD 在 Linux 中的位置
圖 21.1︰ DRBD 在 Linux 中的位置
重要
重要:未加密資料

鏡像複製間的資料流量不會加密。為了保證資料交換的安全,您應該為連接部署虛擬私人網路 (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 的任何嘗試都會失敗,因為這些空間不用於儲存使用者資料。

21.2 安裝 DRBD 服務

依照第 I 部分 「安裝、設定和升級」所述,在網路叢集中的兩台 SUSE Linux Enterprise Server 機器上都安裝 High Availability Extension。安裝 High Availability Extension 時會安裝 DRBD 程式檔案。

如果您不需要完整的叢集堆疊,而只想使用 DRBD,請安裝套件 drbddrbd-kmp-FLAVORdrbd-utils, 與 yast2-drbd

若要簡化 drbdadm 的使用,可以使用 Bash 補完支援。如果要在目前的外圍程序工作階段中將其啟用,請插入以下指令:

root # source /etc/bash_completion.d/drbdadm.sh

若要將其永久用於 root,請建立或延伸檔案 /root/.bashrc,並插入上面的指令行。

21.3 設定 DRBD 服務

注意
注意:需要進行調整

下面的程序使用伺服器名稱 alice 與 bob,以及叢集資源名稱 r0。它會將 alice 設定為主要節點,並使用 /dev/sda1 儲存資料。請務必修改指示,以使用您自己的節點與檔案名稱。

以下章節假設您擁有 alice 與 bob 兩個節點,並且它們應使用 TCP 連接埠 7788。請確定您的防火牆中已開啟此連接埠。

  1. 準備系統:

    1. 確定 Linux 節點中的區塊裝置已就緒並已分割 (如果需要)。

    2. 如果磁碟包含您已不再需要的檔案系統,請使用以下指令損毀檔案系統結構:

      root # dd if=/dev/zero of=YOUR_DEVICE count=16 bs=1M

      如果有多個檔案系統需要摧毀,請在您希望包含到 DRBD 設定中的所有裝置上重複此步驟。

    3. 如果叢集已在使用 DRBD,請將叢集置於維護模式:

      root # crm configure property maintenance-mode=true

      如果叢集已在使用 DRBD,而您跳過了此步驟,即時組態中的語法錯誤會導致服務關閉。

      或者,也可以使用 drbdadm -c 檔案來測試組態檔案。

  2. 使用所選的方法來設定 DRBD:

  3. 如果您之前已設定 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/
  4. 執行啟始同步 (請參閱第 21.3.3 節 「啟始化和格式化 DRBD 資源」)。

  5. 重設叢集的維護模式旗標:

    root # crm configure property maintenance-mode=false

21.3.1 手動設定 DRBD

注意
注意:自動升級功能支援受限

DRBD9 的自動升級功能可以使用複製和檔案系統資源,而非主要/從屬連接。如果使用此功能時正在掛接某個檔案系統,DRBD 會自動變為主要模式。

目前,自動升級功能僅具有受限支援。使用 DRBD 9 時,SUSE 支援的使用案例與使用 DRBD 8 時相同。除此以外的使用案例 (例如所包含節點超過兩個的設定) 不受支援。

若要手動設定 DRBD,請執行下列步驟:

程序 21.1︰ 手動設定 DRBD

從 DRBD 版本 8.3 開始,以前的組態檔案會分割為多個獨立檔案,位於 /etc/drbd.d/ 目錄下。

  1. 開啟檔案 /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

  2. 建立 /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;
      }
    }

    1

    方便與需要資源的服務建立某種關聯的 DRBD 資源名稱。例如 nfshttpmysql_0postgres_wal,等等。本文中使用更普遍的名稱 r0

    2

    DRBD 的裝置名稱及其次要編號。

    上面的範例為 DRBD 使用了次要編號 0。Udev 整合程序檔將會為您提供一個符號連結 /dev/drbd/by-res/nfs/0。或者,在組態中省略裝置節點名稱,改為使用下行:

    drbd0 minor 0 (/dev/ 為選擇性) 或 /dev/drbd0

    3

    在兩個節點間複製的原始裝置。請注意,本範例中兩個節點上的裝置是相同的。如果您需要不同的裝置,請將 disk 參數移至 on 主機。

    4

    meta-disk 參數通常包含值 internal,但您也可以指定具體的裝置來儲存中繼資料。如需詳細資訊,請參閱https://docs.linbit.com/docs/users-guide-9.0/#s-metadata

    5

    On 區段指定要對其套用此組態陳述式的主機。

    6

    各節點的 IP 位址與埠號。每個資源都需要各自的連接埠,通常從 7788 開始。DRBD 資源的兩個連接埠必須相同。

    7

    設定兩個以上的節點時,需要節點 ID。該 ID 是用於區分不同節點的唯一非負整數。

    8

    同步速率。將其設定為磁碟空間和網路頻寬中較小者的三分之一。此設定只能限制重新同步操作,對複製不起作用。

    9

    定義網格的所有節點。hosts 參數包含共用相同 DRBD 設定的所有主機名稱。

  3. 檢查組態檔案的語法。若以下指令傳回錯誤,請檢查您的檔案:

    root # drbdadm dump all
  4. 繼續執行第 21.3.3 節 「啟始化和格式化 DRBD 資源」

21.3.2 使用 YaST 設定 DRBD

可以使用 YaST 來啟動 DRBD 的啟始設定。建立 DRBD 設定後,可以手動微調產生的檔案。

但是,當變更組態檔案後,請不要再使用 YaST DRBD 模組。DRBD 模組僅支援有限的一組基本組態。如果您再次使用該模組,它很有可能不會顯示所做的變更。

若要使用 YaST 來設定 DRBD,請執行以下步驟:

程序 21.2︰ 使用 YaST 設定 DRBD
  1. 啟動 YaST 並選取組態模組高可用性 ›  DRBD。如果您已設定了 DRBD 組態,YaST 會向您發出警告。YaST 將會變更您的組態,並將原來的 DRBD 組態檔案另存為 *.YaSTsave

  2. 啟動組態 › 開機中的開機旗標保留原樣 (預設為 off);請不要變更該設定,因為 Pacemaker 會管理此服務。

  3. 如果有防火牆在執行,則啟用「在防火牆中開啟埠」。

  4. 移至資源組態項目。按新增建立新資源 (請參閱圖形 21.2 「資源組態」)。

    資源組態
    圖 21.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) 線上文件中都以範例進行了說明。

  5. 按一下儲存

  6. 按一下新增以輸入第二個 DRBD 資源,然後按一下儲存完成。

  7. 依次按一下確定完成關閉資源組態。

  8. 如果您在 DRBD 中使用 LVM,則需要在 LVM 組態檔案中變更一些選項 (請參閱 LVM 組態項目)。YaST DRBD 模組可自動完成此項變更。

    LVM 過濾器將會拒絕 DRBD 資源的 localhost 磁碟名稱和預設過濾器。只能在 /dev/drbd 中掃描 LVM 裝置。

    例如,如果將 /dev/sda1 用做 DRBD 磁碟,則會插入裝置名稱做為 LVM 過濾器中的第一個項目。若要手動變更過濾器,請按一下自動修改 LVM 裝置過濾器核取方塊。

  9. 按一下「完成」儲存您的變更。

  10. 繼續執行第 21.3.3 節 「啟始化和格式化 DRBD 資源」

21.3.3 啟始化和格式化 DRBD 資源

準備系統並設定 DRBD 後,請執行磁碟的首次啟始化:

  1. 在 alice 和 bob 這兩個節點上,啟始化中繼資料儲存:

    root # drbdadm create-md r0
    root # drbdadm up r0
  2. 若要縮短 DRBD 資源的初始重新同步時間,請檢查以下項目:

    • 如果所有節點上的 DRBD 裝置都具有相同資料 (例如,透過使用第 21.3 節 「設定 DRBD 服務」中所述的 dd 指令損毀檔案系統結構),則請在這兩個節點上使用以下指令跳過初始重新同步步驟:

      root # drbdadm new-current-uuid --clear-bitmap r0/0

      狀態將為 Secondary/Secondary UpToDate/UpToDate

    • 否則,請繼續下一步。

  3. 在主要節點 alice 上,啟動重新同步程序:

    root # drbdadm primary --force r0
  4. 使用以下指令檢查狀態:

    root # drbdadm status r0
    r0 role:Primary
      disk:UpToDate
      bob role:Secondary
      peer-disk:UpToDate
  5. 在您的 DRBD 裝置上建立檔案系統,例如:

    root # mkfs.ext3 /dev/drbd0
  6. 掛接檔案系統並投入使用:

    root # mount /dev/drbd0 /mnt/

21.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 資源,另請參閱第 21.5 節 「建立堆疊式 DRBD 裝置」瞭解詳細資訊。

若要保留資料並允許在無需重新建立新資源的情況下新增新的節點,請執行以下操作:

  1. 將一個節點設定為待命模式。

  2. 更新所有節點上的所有 DRBD 套件,請參閱第 21.2 節 「安裝 DRBD 服務」

  3. 將新節點資訊新增至資源組態中:

    • node-id (針對每個 on 區段)。

    • connection-mesh 區段在 hosts 參數中包含所有主機名稱。

    請參閱程序 21.1 「手動設定 DRBD」中的範例組態。

  4. 在使用 internal 做為 meta-disk 索引鍵時增大 DRBD 磁碟的空間。使用支援增大空間的裝置,例如 LVM。或者,更換為用於中繼資料的外部磁碟,並使用 meta-disk 裝置;

  5. 根據新組態重新建立中繼資料:

    root # drbdadm create-md RESOURCE
  6. 取消待命模式。

21.5 建立堆疊式 DRBD 裝置

堆疊式 DRBD 裝置包含兩部其他裝置,其中至少有一部裝置也是 DRBD 資源。換言之,DRBD 在一個現有 DRBD 資源的基礎上又另外新增了一個節點 (請參閱圖形 21.3 「資源堆疊」)。此類複製設定可用於備份和災難備援用途。

資源堆疊
圖 21.3︰ 資源堆疊

三向複製使用了非同步 (DRBD 通訊協定 A) 和同步複製 (DRBD 通訊協定 C)。非同步部分用於堆疊的資源,而同步部分用於備用資源。

您的線上環境使用堆疊裝置。例如,如果您有一個 DRBD 裝置 /dev/drbd0 和一個堆疊在其上的裝置 /dev/drbd10,則將會在 /dev/drbd10 上建立檔案系統 (請參閱範例 21.1 「三節點堆疊式 DRBD 資源的組態」瞭解更多詳細資料)。

範例 21.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;
  }
}

21.6 使用資源層級圍籬區隔

當 DRBD 複製連結中斷時,Pacemaker 會嘗試將 DRBD 資源升級至另一個節點。為防止 Pacemaker 使用過時的資料啟動服務,請依範例 21.2 「使用叢集資訊庫 (CIB) 啟用資源層級圍籬區隔的 DRBD 組態」中所示,在 DRBD 組態檔案中啟用資源層級圍籬區隔。

範例 21.2︰ 使用叢集資訊庫 (CIB) 啟用資源層級圍籬區隔的 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 會執行以下操作:

  1. DRBD 會呼叫 crm-fence-peer.9.sh 程序檔。

  2. 該程序檔會聯絡叢集管理員。

  3. 該程序檔會確定與此 DRBD 資源關聯的 Pacemaker 資源。

  4. 該程序檔會確定 DRBD 資源不再升級至其他任何節點。DRBD 資源將保留在目前使用中的節點上。

  5. 如果複製連結恢復連接並且 DRBD 完成了其同步程序,則會移除該條件約束。現在,叢集管理員可以不受約束地升級資源。

21.7 測試 DRBD 服務

如果安裝與組態程序按預期執行,您現在就可以執行基本的 DRBD 功能測試。此測試也有助於瞭解軟體的工作原理。

  1. 測試 alice 上的 DRBD 服務。

    1. 開啟終端機主控台,然後以 root 身分登入。

    2. 在 alice 上建立掛接點,如 /srv/r0

      root # mkdir -p /srv/r0
    3. 掛接 drbd 裝置:

      root # mount -o rw /dev/drbd0 /srv/r0
    4. 從主要節點建立檔案:

      root # touch /srv/r0/from_alice
    5. 卸載 alice 上的磁碟:

      root # umount /srv/r0
    6. 在 alice 上輸入以下指令,將 alice 上的 DRBD 服務降級:

      root # drbdadm secondary r0
  2. 測試 bob 上的 DRBD 服務。

    1. 在 bob 上開啟終端機主控台,然後以 root 身分登入。

    2. 在 bob 上將 DRBD 服務升級為主要服務:

      root # drbdadm primary r0
    3. 在 bob 上檢查 bob 是否為主要節點:

      root # drbdadm status r0
    4. 在 bob 上建立掛接點,如 /srv/r0

      root # mkdir /srv/r0
    5. 在 bob 上掛接 DRBD 裝置:

      root # mount -o rw /dev/drbd0 /srv/r0
    6. 驗證您在 alice 上建立的檔案是否存在:

      root # ls /srv/r0/from_alice

      此時應列出 /srv/r0/from_alice 檔案。

  3. 如果服務在兩個節點上都可執行,即表示 DRBD 設定已完成。

  4. 再次將 alice 設為主要節點。

    1. 在 bob 上輸入以下指令,卸下 bob 上的磁碟:

      root # umount /srv/r0
    2. 在 bob 上輸入以下指令,將 bob 上的 DRBD 服務降級:

      root # drbdadm secondary r0
    3. 在 alice 上將 DRBD 服務升級為主要服務:

      root # drbdadm primary r0
    4. 在 alice 上檢查 alice 是否為主要節點:

      root # drbdadm status r0
  5. 若要讓服務在伺服器出現問題時自動啟動並容錯移轉,您可以使用 Pacemaker/Corosync 將 DRBD 設定為高可用性服務。如需關於如何安裝和設定 SUSE Linux Enterprise 15 SP3 的資訊,請參閱第 II 部分 「組態和管理」

21.8 監控 DRBD 裝置

DRBD 隨附了可提供即時監控的公用程式 drbdmon。該公用程式會顯示所有已設定的資源及其問題。

drbdmon 顯示了一個正常的連接
圖 21.4︰ drbdmon 顯示了一個正常的連接

如果出現問題,drbdadm 會顯示錯誤訊息:

drbdmon 顯示了一個錯誤的連接
圖 21.5︰ drbdmon 顯示了一個錯誤的連接

21.9 調整 DRBD

調整 DRBD 的方法有多種:

  1. 使用外部磁碟儲存中繼資料。這可能會有所幫助,不過會降低維護方便性。

  2. 透過 sysctl 變更接收和傳送緩衝區設定,以調整網路連接。

  3. 在 DRBD 組態中變更 max-buffers 和/或 max-epoch-size

  4. 根據您的 IO 模式增大 al-extents 值。

  5. 如果您有一個配備了 BBU (電池備份單元) 的硬體 RAID 控制器,設定 no-disk-flushesno-disk-barrier 和/或 no-md-flushes 可能會有所幫助。

  6. 根據工作負載啟用讀取平衡。請參閱 https://www.linbit.com/en/read-balancing/,以取得詳細資料。

21.10 DRBD 疑難排解

DRBD 設定涉及眾多元件,因此導致問題發生的原因多種多樣。以下各節將介紹幾種常見的情況並提供了多種解決方案。

21.10.1 組態

如果初始的 DRBD 設定未依預期運作,則可能是由於組態有問題。

若要獲取有關組態的資訊,請執行下列步驟:

  1. 開啟終端機主控台,然後以 root 身分登入。

  2. 執行 drbdadm (含 -d 選項),測試組態檔案。輸入以下指令:

    root # drbdadm -d adjust r0

    adjust 選項的試執行 (dry run) 期間,drbdadm 會將 DRBD 資源的實際組態與 DRBD 組態檔案進行比較,但不會執行呼叫。檢閱輸出,以確定您瞭解所有錯誤的來源及原因。

  3. 如果檔案 /etc/drbd.d/*drbd.conf 中存在錯誤,請更正後再繼續。

  4. 如果分割區與設定均正確,請再次執行 drbdadm (不含 -d 選項)。

    root # drbdadm adjust r0

    此指令會將組態檔案套用於 DRBD 資源。

21.10.2 主機名稱

與核心中儲存的主機名稱相比 (請參閱 uname -n 輸出),DRBD 的主機名稱區分大小寫 (Node0 是不同於 node0 的主機)。

如果您擁有多個網路裝置,並希望使用專屬的網路裝置,主機名稱可能不會解析成所使用的 IP 位址。在這種情況下,可以使用參數 disable-ip-verification

21.10.3 TCP 連接埠 7788

如果您的系統無法連接至對等系統,可能是因為本地防火牆有問題。依預設,DRBD 使用 TCP 埠 7788 存取其他節點。請確定在兩個節點上均可存取此連接埠。

21.10.4 DRBD 裝置在重新開機後中斷連接

如果 DRBD 不知道存放最新資料的真實裝置,就會導致電腦分裂狀態。在這種情況下,各個 DRBD 子系統將會做為次要項目出現,並且不會相互連接。在這種情況下,可以在記錄資料中尋找以下訊息:

Split-Brain detected, dropping connection!

若要解決此問題,請在要丟棄資料的節點上輸入以下指令:

root # drbdadm secondary r0

如果狀態為 WFconnection,請先中斷連接:

root # drbdadm disconnect r0

在含有最新資料的節點上,輸入以下指令:

root # drbdadm connect  --discard-my-data r0

如此會將一個節點的資料覆寫為對等節點的資料,因此兩個節點上的檢視窗將會保持一致,從而使問題得到解決。

21.11 更多資訊

下列開放原始碼資源適用於 DRBD: