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

24 Samba 叢集

叢集化 Samba 伺服器為您的異質網路提供了高可用性解決方案。本章介紹了一些背景知識並說明如何設定叢集化 Samba 伺服器。

24.1 概念綜覽

Samba 使用 Trivial Database (TDB) 已有多年。TDB 允許多個應用程式同時執行寫入操作。為了確保所有寫入操作成功執行且彼此不發生衝突,TDB 使用了內部鎖定機制。

Cluster Trivial Database (CTDB) 是現有 TDB 的一個小延伸功能。專案將 CTDB 描述為Samba 和其他專案用於儲存暫存資料之 TDB 資料庫的叢集實作

每個叢集節點都執行一個本地 CTDB 精靈。Samba 會與其本地 CTDB 精靈通訊,而不是直接寫入其 TDB。精靈透過網路交換中繼資料,但實際的讀寫操作是在一個具有快速儲存的本地副本上執行的。CTDB 的概念請參閱圖形 24.1 「CTDB 叢集的結構」

注意
注意:CTDB 僅用於 Samba

目前實作的 CTDB 資源代辦將 CTDB 設定為僅管理 Samba。包括 IP 容錯移轉在內的其他內容應使用 Pacemaker 進行設定。

只有完全同質的叢集支援 CTDB。例如,叢集中的所有節點都需要具有相同的架構。不能混用 x86 與 AMD64。

CTDB 叢集的結構
圖 24.1︰ CTDB 叢集的結構

叢集化的 Samba 伺服器必須共用某些資料:

  • 將 Unix 使用者及群組 ID 與 Windows 使用者及群組相關聯的對應表。

  • 使用者資料庫必須在所有節點之間同步。

  • Windows 網域中成員伺服器的加入資訊必須在所有節點上都可用。

  • 中繼資料 (例如使用中 SMB 工作階段、共用連接以及各類鎖定) 需在所有節點上都可用。

目的是讓擁有 N+1 個節點的叢集化 Samba 伺服器快於僅有 N 個節點的 Samba 伺服器。一個節點不會慢於一部未叢集化的 Samba 伺服器。

24.2 基本組態

注意
注意:變更的組態檔案

CTDB 資源代辦會自動變更 /etc/sysconfig/ctdb。使用 crm ra info CTDB 可列出可以為 CTDB 資源指定的所有參數。

若要設定叢集化的 Samba 伺服器,請執行下列步驟:

程序 24.1︰ 設定基本的叢集化 Samba 伺服器
  1. 準備叢集:

    1. 繼續操作之前,請確定以下套件均已安裝:tdb-toolsctdbsamba (smbnmb 資源需要這些套件)。

    2. 依本指南中的第 II 部分 「組態和管理」所述設定叢集 (Pacemaker、OCFS2)。

    3. 設定共用檔案系統 (例如 OCFS2) 並予以掛接,例如,掛接至 /srv/clusterfs。如需詳細資訊,請參閱第 19 章 「OCFS2

    4. 如果想要開啟 POSIX ACL,則將其啟用:

      • 對於新 OCFS2 檔案系統,使用:

        root # mkfs.ocfs2 --fs-features=xattr ...
      • 對於現有的 OCFS2 檔案系統,使用:

        root # tunefs.ocfs2 --fs-feature=xattr DEVICE

        確定在檔案系統資源中指定了 acl 選項。按如下所示使用 crm 外圍程序:

        crm(live)configure# primitive ocfs2-3 ocf:heartbeat:Filesystem params options="acl" ...
    5. 確定 smbctdbnmb 服務已停用:

      root # systemctl disable ctdb
      root # systemctl disable smb
      root # systemctl disable nmb
    6. 在所有節點上開啟防火牆的連接埠 4379。這是為了使 CTDB 能夠與其他叢集節點通訊。

  2. 在共用檔案系統上建立一個 CTDB 鎖定目錄:

    root # mkdir -p /srv/clusterfs/samba/
  3. /etc/ctdb/nodes 中插入包含叢集中每個節點之全部私人 IP 位址的所有節點:

    192.168.1.10
    192.168.1.11
  4. 設定 Samba。在 /etc/samba/smb.conf[global] 區段中新增以下行。使用所選的主機名稱取代「CTDB-SERVER」(叢集中的所有節點將顯示為一個此名稱的大節點,以方便操作):

    [global]
        # ...
        # settings applicable for all CTDB deployments
        netbios name = CTDB-SERVER
        clustering = yes
        idmap config * : backend = tdb2
        passdb backend = tdbsam
        ctdbd socket = /var/lib/ctdb/ctdb.socket
        # settings necessary for CTDB on OCFS2
        fileid:algorithm = fsid
        vfs objects = fileid
        # ...
  5. 使用 csync2 將組態檔案複製到所有節點:

    root # csync2 -xv

    如需詳細資訊,請參閱 程序 4.6 「使用 Csync2 同步組態檔案」

  6. 將 CTDB 資源新增至叢集:

    root # crm configure
    crm(live)configure# primitive ctdb CTDB params \
        ctdb_manages_winbind="false" \ 
        ctdb_manages_samba="false" \
        ctdb_recovery_lock="/srv/clusterfs/samba/ctdb.lock" \
        ctdb_socket="/var/lib/ctdb/ctdb.socket" \ 
          op monitor interval="10" timeout="20" \
          op start interval="0" timeout="90" \
          op stop interval="0" timeout="100"
    crm(live)configure# primitive nmb systemd:nmb \
        op start timeout="60" interval="0" \
        op stop timeout="60" interval="0" \
        op monitor interval="60" timeout="60"
    crm(live)configure# primitive smb systemd:smb \
        op start timeout="60" interval="0" \
        op stop timeout="60" interval="0" \
        op monitor interval="60" timeout="60"
    crm(live)configure# group g-ctdb ctdb nmb smb
    crm(live)configure# clone cl-ctdb g-ctdb meta interleave="true"
    crm(live)configure# colocation col-ctdb-with-clusterfs inf: cl-ctdb cl-clusterfs
    crm(live)configure# order o-clusterfs-then-ctdb Mandatory: cl-clusterfs cl-ctdb
    crm(live)configure# commit
  7. 新增叢集化 IP 位址:

    crm(live)configure# primitive ip IPaddr2 params ip=192.168.2.222 \
        unique_clone_address="true" \
        op monitor interval="60" \
        meta resource-stickiness="0"
    crm(live)configure# clone cl-ip ip \
        meta interleave="true" clone-node-max="2" globally-unique="true"
    crm(live)configure# colocation col-ip-with-ctdb 0: cl-ip cl-ctdb
    crm(live)configure# order o-ip-then-ctdb 0: cl-ip cl-ctdb
    crm(live)configure# commit

    如果 unique_clone_address 設定為 true,IPaddr2 資源代辦會向指定的位址新增一個複製品 ID,從而導致出現三個不同的 IP 位址。這些位址通常是不需要的,但有助於實現負載平衡。如需有關此主題的詳細資訊,請參閱第 15.2 節 「使用 Linux 虛擬伺服器設定負載平衡」

  8. 提交您的變更:

    crm(live)configure# commit
  9. 檢查結果:

    root # crm status
    Clone Set: cl-storage [dlm]
         Started: [ factory-1 ]
         Stopped: [ factory-0 ]
    Clone Set: cl-clusterfs [clusterfs]
         Started: [ factory-1 ]
         Stopped: [ factory-0 ]
     Clone Set: cl-ctdb [g-ctdb]
         Started: [ factory-1 ]
         Started: [ factory-0 ]
     Clone Set: cl-ip [ip] (unique)
         ip:0       (ocf:heartbeat:IPaddr2):       Started factory-0
         ip:1       (ocf:heartbeat:IPaddr2):       Started factory-1
  10. 從用戶端機器執行測試。在 Linux 用戶端上執行以下指令,確定是否可以將檔案複製到系統或從系統複製檔案:

    root # smbclient //192.168.2.222/myshare

24.3 加入 Active Directory 網域

Active Directory (AD) 是適用於 Windows 伺服器系統的目錄服務。

下面的指示概述了如何將 CTDB 叢集加入 Active Directory 網域:

  1. 程序 24.1 「設定基本的叢集化 Samba 伺服器」 所述建立 CTDB 資源。

  2. 安裝 samba-winbind 套件。

  3. 停用 winbind 服務:

    root # systemctl disable winbind
  4. 定義 winbind 叢集資源:

    root # crm configure
    crm(live)configure# primitive winbind systemd:winbind \
        op start timeout="60" interval="0" \
        op stop timeout="60" interval="0" \
        op monitor interval="60" timeout="60"
    crm(live)configure# commit
  5. 編輯 g-ctdb 群組,並在 nmbsmb 資源之間插入 winbind

    crm(live)configure# edit g-ctdb

    使用 :w (vim) 儲存變更並關閉編輯器。

  6. 查閱 Windows 伺服器文件,以獲取如何設定 Active Directory 網域的指示。在本範例中,我們使用了以下參數:

    AD 和 DNS 伺服器

    win2k3.2k3test.example.com

    AD 網域

    2k3test.example.com

    叢集 AD 成員 NETBIOS 名稱

    CTDB-SERVER
  7. 程序 24.2 「加入 Active Directory」

最後,將您的叢集加入 Active Directory 伺服器:

程序 24.2︰ 加入 Active Directory
  1. 確定下列檔案包含在要在所有叢集主機上安裝的 Csync2 組態中。

    /etc/samba/smb.conf
    /etc/security/pam_winbind.conf
    /etc/krb5.conf
    /etc/nsswitch.conf
    /etc/security/pam_mount.conf.xml
    /etc/pam.d/common-session

    您也可以使用 YaST 的設定 Csync2模組來完成此任務,請參閱第 4.5 節 「將組態傳輸至所有節點」

  2. 執行 YaST 並從網路服務項目中開啟Windows 網域成員模組。

  3. 輸入網域或工作群組設定,然後按一下確定完成操作。

24.4 對叢集化 Samba 進行除錯與測試

若要對叢集化 Samba 伺服器進行除錯,可以使用下列適用於不同層級的工具:

ctdb_diagnostics

執行此工具可以診斷叢集化 Samba 伺服器。詳細的除錯訊息可協助您追蹤出現的任何問題。

ctdb_diagnostics 指令會搜尋下列檔案,這些檔案必須在所有節點上均可用:

/etc/krb5.conf
/etc/hosts
/etc/ctdb/nodes
/etc/sysconfig/ctdb
/etc/resolv.conf
/etc/nsswitch.conf
/etc/sysctl.conf
/etc/samba/smb.conf
/etc/fstab
/etc/multipath.conf
/etc/pam.d/system-auth
/etc/sysconfig/nfs
/etc/exports
/etc/vsftpd/vsftpd.conf

如果存在 /etc/ctdb/public_addresses/etc/ctdb/static-routes 檔案,則也會對其進行檢查。

ping_pong

使用 ping_pong 可以檢查您的檔案系統是否適用 CTDB。它會對叢集檔案系統執行某些測試,例如連貫性和效能測試 (請參閱 http://wiki.samba.org/index.php/Ping_pong),讓您瞭解叢集在高負載下的表現。

send_arp 工具和 SendArp 資源代理程式

SendArp 資源代辦位於 /usr/lib/heartbeat/send_arp (或 /usr/lib64/heartbeat/send_arp)。send_arp 工具會送出無故 ARP (位址解析通訊協定) 封包,可以用來更新其他機器的 ARP 表。這有助於確認容錯移轉程序完成後的通訊問題。如果節點對 Samba 顯示了叢集 IP 位址,而您卻無法連接到節點或 ping 通此節點,請使用 send_arp 指令測試節點是否只需要 ARP 表更新。

若需更多資訊,請參閱https://gitlab.com/wireshark/wireshark/-/wikis/home

若要對叢集檔案系統的某些方面進行測試,請執行下列步驟:

程序 24.3︰ 測試叢集檔案系統的連貫性和效能
  1. 在一個節點上啟動指令 ping_pong 並將預留位址 N 取代為節點數量加 1。該檔案存放於 ABSPATH/data.txt 共用儲存,因此從任何節點上都可存取 (ABSPATH 表示絕對路徑):

    ping_pong ABSPATH/data.txt N

    僅執行一個節點時,鎖定率應該會很高。如果程式未顯示鎖定率,請更換您的叢集檔案系統。

  2. 在另一個節點上啟動第二個 ping_pong,並使用相同的參數。

    鎖定率應該會有明顯的下降。如果您的叢集檔案系統出現以下任何一種情況,請予以更換:

    • ping_pong 未輸出每秒的鎖定率,

    • 兩個例項中的鎖定率相差較大,

    • 啟動第二個例項後,鎖定率未下降。

  3. 啟動第三個 ping_pong。新增其他節點並注意鎖定率的變化。

  4. 逐個停止 ping_pong 指令。在回到單一節點的情況之前,應會看到鎖定率不斷提高。如果未發生預期的情況,請參閱第 19 章 「OCFS2 中的詳細資訊。

24.5 更多資訊