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 資源代辦將 CTDB 設定為僅管理 Samba。包括 IP 容錯移轉在內的其他內容應使用 Pacemaker 進行設定。
只有完全同質的叢集支援 CTDB。例如,叢集中的所有節點都需要具有相同的架構。不能混用 x86 與 AMD64。
叢集化的 Samba 伺服器必須共用某些資料:
將 Unix 使用者及群組 ID 與 Windows 使用者及群組相關聯的對應表。
使用者資料庫必須在所有節點之間同步。
Windows 網域中成員伺服器的加入資訊必須在所有節點上都可用。
中繼資料 (例如使用中 SMB 工作階段、共用連接以及各類鎖定) 需在所有節點上都可用。
目的是讓擁有 N+1 個節點的叢集化 Samba 伺服器快於僅有 N 個節點的 Samba 伺服器。一個節點不會慢於一部未叢集化的 Samba 伺服器。
24.2 基本組態 #
CTDB 資源代辦會自動變更 /etc/sysconfig/ctdb
。使用 crm ra
info CTDB
可列出可以為 CTDB 資源指定的所有參數。
若要設定叢集化的 Samba 伺服器,請執行下列步驟:
準備叢集:
繼續操作前,請確定已安裝下列套件: ctdb、 tdb-tools, 與 samba (
smb
和nmb
資源需要這些套件)。依本指南中的第 II 部分 「組態和管理」所述設定叢集 (Pacemaker、OCFS2)。
設定共用檔案系統 (例如 OCFS2) 並予以掛接,例如,掛接至
/srv/clusterfs
。如需詳細資訊,請參閱第 19 章 「OCFS2」。如果想要開啟 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" ...
確定
ctdb
、smb
和nmb
服務已停用:root #
systemctl
disable ctdbroot #
systemctl
disable smbroot #
systemctl
disable nmb在所有節點上開啟防火牆的連接埠
4379
。這是為了使 CTDB 能夠與其他叢集節點通訊。
在共用檔案系統上建立一個 CTDB 鎖定目錄:
root #
mkdir
-p /srv/clusterfs/samba/在
/etc/ctdb/nodes
中插入包含叢集中每個節點之全部私人 IP 位址的所有節點:192.168.1.10 192.168.1.11
設定 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 # ...
使用
csync2
將組態檔案複製到所有節點:root #
csync2
-xv
如需詳細資訊,請參閱 程序 4.6 「使用 Csync2 同步組態檔案」。
將 CTDB 資源新增至叢集:
root #
crm
configurecrm(live)configure#
primitive
ctdb ocf:heartbeat: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 smbcrm(live)configure#
clone
cl-ctdb g-ctdb meta interleave="true"crm(live)configure#
colocation
col-ctdb-with-clusterfs inf: cl-ctdb cl-clusterfscrm(live)configure#
order
o-clusterfs-then-ctdb Mandatory: cl-clusterfs cl-ctdbcrm(live)configure#
commit
新增叢集化 IP 位址:
crm(live)configure#
primitive
ip ocf:heartbeat: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-ctdbcrm(live)configure#
order
o-ip-then-ctdb 0: cl-ip cl-ctdbcrm(live)configure#
commit
如果
unique_clone_address
設定為true
,IPaddr2 資源代辦會向指定的位址新增一個複製品 ID,從而導致出現三個不同的 IP 位址。這些位址通常是不需要的,但有助於實現負載平衡。如需有關此主題的詳細資訊,請參閱第 15.2 節 「使用 Linux 虛擬伺服器設定負載平衡」。提交您的變更:
crm(live)configure#
commit
檢查結果:
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從用戶端機器執行測試。在 Linux 用戶端上執行以下指令,確定是否可以將檔案複製到系統或從系統複製檔案:
root #
smbclient
//192.168.2.222/myshare
24.3 加入 Active Directory 網域 #
Active Directory (AD) 是適用於 Windows 伺服器系統的目錄服務。
下面的指示概述了如何將 CTDB 叢集加入 Active Directory 網域:
依程序 24.1 「設定基本的叢集化 Samba 伺服器」 所述建立 CTDB 資源。
安裝 samba-winbind 套件。
停用
winbind
服務:root #
systemctl
disable winbind定義 winbind 叢集資源:
root #
crm
configurecrm(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
編輯
g-ctdb
群組,並在nmb
與smb
資源之間插入winbind
:crm(live)configure#
edit
g-ctdb儲存變更,然後使用 :–w (
vim
) 關閉編輯器。查閱 Windows 伺服器文件,以獲取如何設定 Active Directory 網域的指示。在本範例中,我們使用了以下參數:
AD 和 DNS 伺服器
win2k3.2k3test.example.com
AD 網域
2k3test.example.com
叢集 AD 成員 NETBIOS 名稱
CTDB-SERVER
最後,將您的叢集加入 Active Directory 伺服器:
確定下列檔案包含在要在所有叢集主機上安裝的 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 的第 4.5 節 「將組態傳輸至所有節點」。
模組來完成此任務,請參閱執行 YaST 並從
項目中開啟 模組。輸入網域或工作群組設定,然後按一下
完成操作。
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。
若要對叢集檔案系統的某些方面進行測試,請執行下列步驟:
在一個節點上啟動指令
ping_pong
並將預留位址 N 取代為節點數量加 1。該檔案存放於ABSPATH/data.txt
共用儲存,因此從任何節點上都可存取 (ABSPATH 表示絕對路徑):ping_pong
ABSPATH/data.txt N僅執行一個節點時,鎖定率應該會很高。如果程式未顯示鎖定率,請更換您的叢集檔案系統。
在另一個節點上啟動第二個
ping_pong
,並使用相同的參數。鎖定率應該會有明顯的下降。如果您的叢集檔案系統出現以下任何一種情況,請予以更換:
ping_pong
未輸出每秒的鎖定率,兩個例項中的鎖定率相差較大,
啟動第二個例項後,鎖定率未下降。
啟動第三個
ping_pong
。新增其他節點並注意鎖定率的變化。逐個停止
ping_pong
指令。在回到單一節點的情況之前,應會看到鎖定率不斷提高。如果未發生預期的情況,請參閱第 19 章 「OCFS2」 中的詳細資訊。