跳到内容跳到页面导航:上一页 [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 使用内部锁定机制。

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 服务器慢。

24.2 基本配置

注意
注意:更改的配置文件

CTDB 资源代理会自动更改 /etc/sysconfig/ctdb。使用 crm ra info CTDB 列出可为 CTDB 资源指定的所有参数。

要设置群集 Samba 服务器,请按如下操作:

过程 24.1︰ 设置基本的群集 Samba 服务器
  1. 准备群集:

    1. 继续操作之前,请确保以下软件包均已安装:tdb-toolsctdbsambasmbnmb 资源需要这些软件包)。

    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 Server 系统的一项目录服务。

下列说明概述了如何将 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 组,并在 nmb 与·smb 资源之间插入 winbind

    crm(live)configure# edit g-ctdb

    使用 :w (vim) 保存更改并关闭编辑器。

  6. 有关如何设置 Active Directory 域的说明,请参见 Windows Server 文档。在此示例中,使用以下参数:

    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

检查文件系统是否支持 CTDB 使用 ping_pong。它会对群集文件系统执行一致性和性能之类的特定测试(请参见 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(Address Resolution Protocol,地址解析协议)包,可用于更新其他计算机的 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 更多信息