11.5. 为 CephFS/NFS 服务实施 HA(技术预览)

您可以使用 --ingress 标志和指定虚拟 IP 地址来部署带有高可用性(HA)前端、虚拟 IP 和负载均衡器的 NFS。这部署了 keepalivedhaproxy 的组合,并为 NFS 服务提供高可用性 NFS 前端。

使用 --ingress 标志创建集群时,还会部署入口服务,以便为 NFS 服务器提供负载均衡和高可用性。虚拟 IP 用于提供已知、稳定的 NFS 端点,所有 NFS 客户端都可用来挂载。Ceph 处理将虚拟 IP 上的 NFS 流量重定向到相应的后端 NFS 服务器的详情,并在 NFS 服务器失败时重新部署 NFS 服务器。

为现有服务部署入口服务提供:

  • 稳定的虚拟 IP,可用于访问 NFS 服务器。
  • 在多个 NFS 网关中载入分布。
  • 主机故障时的主机间故障转移。
重要

CephFS/NFS 的 HA 只是一个技术预览功能。红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。如需了解更多详细信息,请参阅红帽技术预览功能的支持范围。

重要

当在 NFS 集群前部署 入口 服务时,后端 NFS-ganesha 服务器将看到 haproxy 的 IP 地址而不是客户端的 IP 地址。因此,如果您基于 IP 地址限制客户端访问,则 NFS 导出的访问限制将无法按预期工作。

注意

如果服务于客户端的活跃 NFS 服务器停机,则客户端的 I/O 会中断,直到活跃 NFS 服务器的替换前,NFS 集群会再次激活。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器、监控和 OSD 守护进程。
  • 确保启用了 NFS 模块。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 使用 --ingress 标志创建 NFS 集群:

    语法

    ceph nfs cluster create CLUSTER_ID [PLACEMENT] [--port PORT_NUMBER] [--ingress --virtual-ip IP_ADDRESS/CIDR_PREFIX]

    • 使用命名 NFS Ganesha 集群的唯一字符串替换 CLUSTER_ID
    • PLACEMENT 替换为要部署的 NFS 服务器数以及您要在其上部署 NFS Ganesha 守护进程的主机或主机。
    • 使用 --port PORT_NUMBER 标志,在默认端口 2049 之外的端口上部署 NFS。
    • --ingress 标志与 --virtual-ip 标志相结合,使用高可用性前端(虚拟 IP 和负载均衡器)部署 NFS。
    • 使用 IP 地址替换 --virtual-ip IP_ADDRESS,以提供所有客户端可以用来挂载 NFS 导出的已知、稳定的 NFS 端点。--virtual-ip 必须包含 CIDR 前缀长度。虚拟 IP 通常会在第一个标识的网络接口(在同一子网中具有现有 IP)上配置。

      注意

      为 NFS 服务分配的主机数量必须大于您要部署的活跃 NFS 服务器数量,由 placement: count 参数指定。在以下示例中,请求了一个活跃的 NFS 服务器,并分配了两台主机。

      示例

      [ceph: root@host01 /]# ceph nfs cluster create mycephnfs "1 host02 host03" --ingress --virtual-ip 10.10.128.75/22

      注意

      部署 NFS 守护进程和入口服务是异步的,命令可能会在服务完全启动前返回。

  3. 检查服务是否已成功启动:

    语法

    ceph orch ls --service_name=nfs.CLUSTER_ID
    ceph orch ls --service_name=ingress.nfs.CLUSTER_ID

    示例

    [ceph: root@host01 /]# ceph orch ls --service_name=nfs.mycephnfs
    
    NAME           PORTS    RUNNING  REFRESHED  AGE  PLACEMENT
    nfs.mycephnfs  ?:12049      1/2  0s ago     20s  host02;host03
    
    [ceph: root@host01 /]# ceph orch ls --service_name=ingress.nfs.mycephnfs
    
    NAME                   PORTS                  RUNNING  REFRESHED  AGE  PLACEMENT
    ingress.nfs.mycephnfs  10.10.128.75:2049,9049      4/4   46s ago    73s  count:2

验证

  • 查看单个 NFS 守护进程的 IP 端点、IP 地址,以及 入口 服务的虚拟 IP:

    语法

    ceph nfs cluster info CLUSTER_ID

    示例

    [ceph: root@host01 /]# ceph nfs cluster info mycephnfs
    
    {
        "mycephnfs": {
            "virtual_ip": "10.10.128.75",
            "backend": [
                {
                    "hostname": "host02",
                    "ip": "10.10.128.69",
                    "port": 12049
                },
                {
                    "hostname": "host03",
                    "ip": "10.10.128.70",
                    "port": 12049
                }
            ],
            "port": 2049,
            "monitor_port": 9049
        }
    }

  • 列出主机和进程:

    示例

    [ceph: root@host01 /]# ceph orch ps | grep nfs
    
    haproxy.nfs.cephnfs.host01.rftylv     host01  *:2049,9000  running (11m)    10m ago  11m    23.2M        -  2.2.19-7ea3822   5e6a41d77b38  f8cc61dc827e
    haproxy.nfs.cephnfs.host02.zhtded     host02  *:2049,9000  running (11m)    53s ago  11m    21.3M        -  2.2.19-7ea3822   5e6a41d77b38  4cad324e0e23
    keepalived.nfs.cephnfs.host01.zktmsk  host01               running (11m)    10m ago  11m    2349k        -  2.1.5            18fa163ab18f  66bf39784993
    keepalived.nfs.cephnfs.host02.vyycvp  host02               running (11m)    53s ago  11m    2349k        -  2.1.5            18fa163ab18f  1ecc95a568b4
    nfs.cephnfs.0.0.host02.fescmw         host02  *:12049      running (14m)     3m ago  14m    76.9M        -  3.5              cef6e7959b0a  bb0e4ee9484e
    nfs.cephnfs.1.0.host03.avaddf         host03  *:12049      running (14m)     3m ago  14m    74.3M        -  3.5              cef6e7959b0a  ea02c0c50749

其他资源