基於drbd+ocfs2的小型Web叢集的叢集存儲

我們將討論什麼:
如何基於drbd+ocfs2方案快速部署兩台伺服器共用儲存。

這對誰有用:
本教學對於系統管理員和任何選擇儲存實作方法或想要嘗試解決方案的人都非常有用。

我們拒絕了哪些決定以及為什麼?

我們常常面臨這樣的情況,需要在小型Web叢集上實現具有良好讀寫效能的共用儲存。 我們嘗試了各種方案來為我們的專案實施共享存儲,但很少有人能夠同時滿足我們的多個指標。 現在我們將告訴你原因。

  • Glusterfs的讀寫效能並沒有讓我們滿意;同時讀取大量檔案有問題,CPU負載較高。 讀取文件的問題可以透過直接從brick存取文件來解決,但這並不總是適用,而且通常是不正確的。

  • Ceph 不喜歡過度的複雜性,這對於擁有 2-4 個伺服器的專案可能是有害的,特別是如果專案隨後需要維護的話。 同樣,嚴重的性能限制迫使我們構建單獨的存儲集群,就像 glusterfs 一樣。

  • 使用一台 NFS 伺服器來實現共用儲存會帶來容錯方面的問題。

  • s3 對於某些任務來說是一個優秀的流行解決方案,但它不是一個檔案系統,這縮小了它的範圍。

  • lsyncd。 如果我們已經開始討論“非檔案系統”,那麼就值得回顧一下這個流行的解決方案。 它不僅不適合雙向交換(但如果你真的想要,那麼你可以),它也不能在大量文件上穩定工作。 整個事情的一個很好的補充是它是單線程的。 原因在於程式的架構:它使用 inotify 來監視工作對象,並在啟動和重新掃描期間分配工作對象。 rsync用作傳輸媒體。

教學:如何基於drbd+ocfs2部署共享存儲

對我們來說最方便的解決方案之一是鏈接 ocfs2+drbd。 現在我們將告訴您如何基於解決方案資料庫快速部署兩台伺服器的共用儲存。 但首先,我們先了解一下元件:

DRBD - 來自標準 Linux 發行版的儲存系統,可讓您在伺服器之間以區塊的形式複製資料。 主要應用是建立容錯儲存。

OCFS2 - 允許多個系統共用使用相同儲存的檔案系統。 包含在 Linux 發行版中,是用於使用 FS 的核心模組和使用者空間工具。 OCFS2 不僅可以透過 DRBD 使用,還可以透過具有多個連接的 iSCSI 使用。 在我們的範例中,我們使用 DRBD。

所有操作均在 ubuntu 伺服器 18.04 上以最小配置執行。

步驟1.配置DRBD:

在檔案 /etc/drbd.d/drbd0.res 中,我們描述了虛擬區塊裝置 /dev/drbd0:

resource drbd0 {
    syncer { rate 1000M; }
    net {
        allow-two-primaries;
        after-sb-0pri discard-zero-changes;
        after-sb-1pri discard-secondary;
        after-sb-2pri disconnect;
    }
    startup { become-primary-on both; }
    on drbd1 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.192:7789;
}
    on drbd2 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.193:7789;
}
}

元磁碟內部 — 使用相同的區塊設備來儲存元數據
裝置 /dev/drbd0 — 使用 /dev/drbd0 作為 drbd 磁碟區的路徑。
磁碟 /dev/vdb1 - 使用/dev/vdb1
同步器{速率1000M; } — 使用千兆位元通道頻寬
允許二選 - 一個重要的選項,允許在兩個主伺服器上接受更改
after-sb-0pri、after-sb-1pri、after-sb-2pri — 偵測到裂腦時負責節點操作的選項。 更多詳細資訊可以在文件中找到。
成為兩者的主要 — 將兩個節點設定為主節點。

在我們的例子中,我們有兩個完全相同的虛擬機,具有吞吐量為 10 GB 的專用虛擬網路。

在我們的範例中,兩個叢集節點的網路名稱為 drbd1 和 drbd2。 為了正確操作,您需要符合 /etc/hosts 中主機的名稱和 IP 位址。

10.10.10.192 drbd1
10.10.10.193 drbd2

步驟2.設定節點:

在兩台伺服器上我們運行:

drbdadm create-md drbd0

基於drbd+ocfs2的小型Web叢集的叢集存儲

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

我們得到以下資訊:

基於drbd+ocfs2的小型Web叢集的叢集存儲

您可以開始同步。 在第一個節點上您需要執行:

drbdadm primary --force drbd0

我們看一下狀態:

cat /proc/drbd

基於drbd+ocfs2的小型Web叢集的叢集存儲

太棒了,同步開始了。 我們等到最後才看圖:

基於drbd+ocfs2的小型Web叢集的叢集存儲

步驟 3. 在第二個節點上啟動同步:

drbdadm primary --force drbd0

我們得到以下資訊:

基於drbd+ocfs2的小型Web叢集的叢集存儲

現在我們可以從兩台伺服器寫入 drbd。

步驟 4. 安裝並設定 ocfs2。

我們將使用一個相當簡單的配置:

cluster:
     node_count = 2
     name = ocfs2cluster

node:
     number = 1
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.192
     name = drbd1

node:
     number = 2
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.193
     name = drbd2

需要寫在 /etc/ocfs2/cluster.conf 在兩個節點上。

我們在任意節點上的 drbd0 上建立一個 FS:

mkfs.ocfs2 -L "testVol" /dev/drbd0

這裡我們使用預設參數在 drbd0 上建立了一個有 testVol 標籤的檔案系統。

基於drbd+ocfs2的小型Web叢集的叢集存儲

在 /etc/default/o2cb 中您需要設定(如我們的設定檔中所示)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

並在每個節點上執行:

o2cb register-cluster ocfs2cluster

然後我們打開並添加自動運行所需的所有單元:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

其中一些已經在設定過程中運行。

步驟 5. 將掛載點加入到兩個節點上的 fstab:

/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0

目錄 /媒體/分享 它必須提前創建。

這裡我們使用noauto選項,這意味著啟動時不會掛載該檔案(我更喜歡透過systemd掛載網路檔案)和heartbeat=local,這意味著在每個節點上使用心跳服務。 還有全域心跳,比較適合大型叢集。

接下來就可以掛載了 /媒體/分享 並檢查內容同步。

完成! 因此,我們或多或少獲得了具有可擴展性和良好性能的容錯存儲。

來源: www.habr.com

添加評論