附註:

在 OCI 上使用 Windows Active Directory 部署 HA Samba 叢集

簡介

我們將討論如何在 Ubuntu 執行處理上自動容錯移轉 Samba,以設定高可用性 (HA) 至 Oracle Cloud Infrastructure (OCI)。此解決方案是一個健全且可靠的檔案伺服器基礎架構,充分運用叢集伺服器訊息區塊 (SMB) 的強大功能並完全免費授權。此費用僅與使用量相關 (oCPU 和區塊磁碟區大小)。

在組織中實作叢集 SMB 檔案伺服器服務的優點如下:

架構

圖像

目標

必要條件

作業 1:設定環境

  1. 建立兩個 Ubuntu 22.04 運算執行處理。

  2. 在兩個運算執行處理上,建立您要儲存檔案的目錄並設定 Samba 伺服器。例如:/mnt/smb

  3. 建立 SMB 資料存放區所需大小的區塊磁碟區,然後將它連附至這兩個運算執行處理 (iSCSI,read/write - sharable)。如需詳細資訊,請參閱將磁碟區附加至多個執行處理

  4. 請注意,使用下列命令指定給連附之區塊磁碟區的 dev 名稱。

    sudo lsblk
    
  5. 在第一個節點上指定次要專用 IP 位址。這是一個浮動 IP 位址。例如:10.10.1.254

  6. 更新兩個 Ubuntu 執行處理上的 /etc/hosts 檔案,以包含所有節點的 IP 位址和主機名稱,包括將用於使用者認證的 Windows Active Directory 伺服器。例如:10.10.1.60 smb110.10.1.29 smb210.10.1.59 ad.testad.oci testad.oci AD

  7. 視需要在兩個 Ubuntu 執行處理上設定 iptables

    注意:Ubuntu 執行處理隨附預先設定的 iptables。INPUT 區段中的第六個規則會拒絕其他所有項目,因此您可以選擇刪除它,或新增在此規則之前允許的特定協定和連接埠。

  8. 在兩個 Ubuntu 執行處理上安裝並設定 Oracle Cloud Infrastructure 命令行介面 (OCI CLI)。如需詳細資訊,請參閱安裝 OCI CLI 並進行設定 (組態命令:oci setup config)

    注意:將 OCI CLI 安裝至 /usr/bin 或您的使用者路徑,以避免發生權限問題,預設為 root。

    bash -c "$(curl -L https://raw.githubusercontent.com/oracle/ocicli/master/scripts/install/install.sh)"
    

工作 2:設定 Oracle Cluster File System 版本 2 (OCFS2)

Oracle Cluster File System 版本 2 (OCFS2) 是由 Oracle Corporation 開發,並以 GNU 通用公共授權條款釋出的一般用途共用磁碟檔案系統。

若要管理共用可寫入區塊磁碟區,我們必須部署 OCFS2。如需詳細資訊,請參閱 在 Oracle Cloud Infrastructure 上使用 iSCSI 的 Oracle Cluster File System 簡易指南 (OCFS2)

  1. 請在兩個節點上執行下列命令。

    sudo apt-get install ocfs2-tools -y
    
  2. O2CB_ENABLED 的值從 false 更新為 /etc/default/o2cb 檔案中的 true

    O2CB_ENABLED=true
    
  3. /etc/ocfs2/cluster.conf 檔案中輸入下列程式碼。

    注意:請小心檔案的縮排和格式。

    cluster:
       name = ocfs2
       heartbeat_mode = local
       node_count = 2
    node:
       cluster = ocfs2
       number = 0
       ip_port = 7777
       ip_address = 10.10.1.60
       name = smb1
    node:
       cluster = ocfs2
       number = 1
       ip_port = 7777
       ip_address = 10.10.1.29
       name = smb2
    
  4. 現在,啟動 o2cb 服務。

    sudo /etc/init.d/o2cb start
    
  5. 使用 OCFS2 檔案系統格式化區塊磁碟區裝置。請只在第一個節點上執行下列命令。

    注意:步驟 3 中記下之裝置的路徑。

    sudo mkfs.ocfs2 "MyOCFS2Cluster" /dev/sd*
    
  6. 使用下列命令註冊叢集。

    sudo o2cb register-cluster ocfs2
    
  7. 將區塊磁碟區掛載到指定給 Samba 伺服器的目錄上。例如:/mnt/smb

    sudo mount /dev/sd* /mnt/smb
    
  8. 使用下列命令檢查叢集狀態。

    sudo o2cb list-nodes ocfs2
    
  9. 使用下列指令來啟用服務。

    sudo systemctl enable o2cb
    sudo systemctl enable ocfs2
    
  10. 更新 /etc/fstab 中的 fstab,以在啟動時自動掛載區塊磁碟區。

    注意:請根據您的開發名稱調整 /dev/sd\* 裝置。

    /dev/sd* /mnt/smb ocfs2     _netdev,defaults   0 0
    

作業 3:設定 Samba 叢集

Samba 允許在 Microsoft Windows 和 Unix 上執行的電腦之間共用檔案和列印。它是數十種服務和協定的實作,包括:NetBIOS over TCP/IP (NBT) 和 SMB - 有時稱為 Common Internet File System (CIFS)。

  1. 使用下列命令,在兩個節點上安裝 Samba 和 Cluster Trivial Database (CTDB)。

    sudo apt-get install ctdb samba samba-common winbind smbclient -y
    
  2. 編輯 Samba 組態檔

    sudo nano /etc/samba/smb.conf
    

    複製並貼上下列參數。

    注意:

    • 您必須根據環境和視窗 domain/workgroup 進行設定。
    • 您所有節點的 netbios name 參數都必須相同。
    [global]
          server string = samba_server
          workgroup = TESTAD
          password server = ad.testad.oci
          realm = testad.oci
          winbind enum groups = yes
          winbind enum users = yes
          winbind use default domain = yes
          security = ADS
          debuglevel = 2
          wins support = no
          idmap config TESTAD : backend = rid
          idmap config TESTAD : range = 10000 - 50000
          idmap config * : backend = tdb
          idmap config * : range = 1000-9999
          template shell = /bin/false
          winbind offline logon = false
          interfaces = lo ens3
          clustering = yes
          guest ok = yes
          bind interfaces only = no
          disable netbios = no
          netbios name = sambacluster1
          smb ports = 445
          log file = /var/log/samba/smb.log
          max log size = 10000
          veto files = /._*/.DS_Store/.Trashes/.TemporaryItems/
          delete veto files = yes
          nt acl support = yes
          inherit acls = yes
          map acl inherit = yes
          map archive = yes
          map hidden = yes
          map read only = yes
          map system = yes
          store dos attributes = yes
          inherit permissions = yes
          unix extensions = no
    [samba_test]
          path = /mnt/smb
          browseable = yes
          writeable = yes
          read only = no
          public = yes
          inherit acls = no
          admin users = "testad.oci\administrator"
          create mask = 0744
          directory mask = 0755
    
    
  3. 若要設定叢集,請編輯 CTDB 組態檔。

    sudo nano  /etc/ctdb/ctdb.conf
    

    複製並貼上下列參數。

    CTDB_NODES=/etc/ctdb/nodes
    CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses
    CTDB_RECOVERY_LOCK="/mnt/Samba/ctdb/.ctdb.lock"
    CTDB_MANAGES_SAMBA=yes
    CTDB_MANAGES_WINBIND=yes
    CTDB_SERVICE_SMB=smbd
    
  4. 編輯用於設定叢集的節點組態檔。

    sudo nano /etc/ctdb/nodes
    

    新增節點的 IP 位址。

    10.10.1.60
    10.10.1.29
    
  5. 編輯 CTDB 公用位址組態檔 (浮動 IP 位址)。

    Sudo nano /etc/ctdb/public_addresses
    

    新增浮動 IP 位址。

    10.10.1.254/0 ens3
    
  6. 我們必須新增此命令檔來管理 OCI 層次的浮動 IP 位址,並在容錯移轉時自動進行移轉。

    Sudo nano /etc/ctdb/functions
    

    add_ip_to_iface () 區段之後新增下列程式碼。

    注意: 請將 Oracle Cloud ID (OCID) 和主機名稱變更為您的節點 VNIC OCID 和主機名稱。

    ##### OCI vNIC variables
       server="`hostname -s`"
       smb1vnic="ocid1.vnic.oc1.eu-frankfurt-1.YOUR_NODE1_VNIC_OCID"
       smb2vnic="ocid1.vnic.oc1.eu-frankfurt-1.YOUR_NODE2_VNIC_OCID"
       vnicip="10.10.1.254"
       #export LC_ALL=C.UTF-8
       #export LANG=C.UTF-8
       #touch /tmp/vip.log
       ##### OCI/IPaddr Integration
          if [ $server = "smb1" ]; then
             /usr/bin/oci network vnic assign-private-ip --unassign-if-already-assigned --vnic-id $smb1vnic --ip-address $vnicip 2>/dev/null
          else
             /usr/bin/oci network vnic assign-private-ip --unassign-if-already-assigned --vnic-id $smb2vnic --ip-address $vnicip 2>/dev/null
          fi
    
  7. 若無法進行浮動 IP 位址移轉,請使用下列命令對其進行疑難排解。

    sudo journalctl -u ctdb.service
    

工作 4:整合 Windows Active Directory

  1. 若要整合使用者存取與 Windows Active Directory 伺服器,我們必須在兩個節點上安裝 Kerberos。

    sudo apt -y install winbind libpam-winbind libnss-winbind krb5-config samba-dsdb-modules samba-vfs-modules
    
  2. 使用下列指令配置 Kerberos。

    sudo nano /etc/krb5.conf
    
  3. 請檢查具有下列程式碼的組態檔。

    注意:請記得使用環境中設定的 Windows 網域 / 範圍。

    [libdefaults]
          default_realm = TESTAD.OCI
    # The following krb5.conf variables are only for MIT Kerberos.
          kdc_timesync = 1
          ccache_type = 4
          forwardable = true
          proxiable = true
    # The following encryption type specification will be used by MIT Kerberos.
    # if uncommented. In general, the defaults in the MIT Kerberos code are
    # correct and overriding these specifications only serves to disable new
    # encryption types as they are added, creating interoperability problems.
    # The only time when you might need to uncomment these lines and change
    # the enctypes is if you have local software that will break on ticket
    # caches containing ticket encryption types it doesn't know about (such as # old versions of Sun Java).
    # default_tgs_enctypes = des3-hmac-sha1
    # default_tkt_enctypes = des3-hmac-sha1
    # permitted_enctypes = des3-hmac-sha1
    # The following libdefaults parameters are only for Heimdal Kerberos.
          fcc-mit-ticketflags = true
    [realms]
          TESTAD.OCI = {
                   kdc = ad.testad.oci
                   admin_server = ad.testad.oci
    
  4. 最後一個步驟是使用下列命令將兩個主機結合至 Windows 網域。

    Sudo net ads join -U Administrator -S testad.oci
    

現在,嘗試使用浮動 IP 位址和 Windows Active Directory 使用者 (例如://10.10.1.254/samba_test) 將您的從屬端連線至 Samba 伺服器,並在一個節點關閉或重新啟動時測試業務連續性。

新的 Samba 叢集已就緒 。

認可

其他學習資源

瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center