實作 HA for CephFS/NFS 服務

您可以使用 --ingress 旗標並指定虛擬 IP 位址,以部署具有高可用性 (HA) 前端系統、虛擬 IP 及負載平衡器的 NFS 。 這會部署 keepalivedhaproxy 的組合,並為 NFS 服務提供高可用性 NFS 前端系統。

使用 --ingress 旗標建立叢集時,會額外部署入口服務,以提供 NFS 伺服器的負載平衡及高可用性。 虛擬 IP 是用來提供所有 NFS 用戶端可用來裝載的已知穩定 NFS 端點。 Ceph 會處理將虛擬 IP 上的 NFS 資料流量重新導向至適當後端 NFS 伺服器的詳細資料,並在失敗時重新部署 NFS 伺服器。

部署現有服務的入口服務可提供:

  • 可用來存取 NFS 伺服器的穩定虛擬 IP。

  • 跨多個 NFS 閘道的負載配送。

  • 主機故障時主機之間的失效接手。

重要事項: 在 NFS 叢集前端部署 ingress 服務時,後端 NFS-ganesha 伺服器會看到 haproxy 的 IP 位址,而不是用戶端的 IP 位址。 因此,如果您根據 IP 位址限制用戶端存取,則 NFS 匯出的存取限制將無法如預期般運作。
附註: 如果負責處理用戶端的作用中 NFS 伺服器關閉,則會岔斷用戶端的 I/O ,直到作用中 NFS 伺服器的取代項目在線上,且 NFS 叢集再次在作用中為止。

必要條件

  • 執行中 IBM Storage Ceph 叢集。

  • 主機會新增至叢集。

  • 已部署所有管理程式、監視器及 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]
    • CLUSTER_ID 取代為用於命名 NFS Ganesha 叢集的唯一字串。

    • PLACEMENT 取代為要部署的 NFS 伺服器數目,以及您要在其上部署 NFS Ganesha 常駐程式儲存器的主機。

    • 使用 --port PORT_NUMBER 旗標,在預設埠 2049 以外的埠上部署 NFS 。

    • --ingress 旗標與 --virtual-ip 旗標結合,會使用高可用性前端系統 (虛擬 IP 及負載平衡器) 來部署 NFS 。

    • --virtual-ip IP_ADDRESS 取代為 IP 位址,以提供一個已知且穩定的 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 常駐程式及 Ingress 服務的部署是非同步的,指令可能會在服務完全啟動之前傳回。
  3. 檢查服務是否已順利啟動:

    語法

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

    範例

    [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

驗證

  • 檢視 IP 端點、個別 NFS 常駐程式的 IP ,以及 ingress 服務的虛擬 IP。

    語法

    ceph nfs cluster info CLUSTER_NAME

    範例

    [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