すべてのプロダクト
Search
ドキュメントセンター

File Storage NAS:CNFSクライアントの分散キャッシュ機能の有効化

最終更新日:Jul 30, 2024

Container Network File System (CNFS) クライアントを使用すると、複数の接続、キャッシュメタデータ、およびキャッシュデータを介してデータに分散してアクセスし、読み取り速度を向上させることができます。 CNFSクライアントは、パフォーマンス監視とサービス品質 (QoS) もサポートします。 このトピックでは、CNFSクライアントの分散キャッシュ機能を有効にする方法と、CNFSクライアントの分散キャッシュ機能を使用して読み取り速度を向上させる方法について説明します。

目次

前提条件

  • カーネルバージョン4.19.91-23 ~ 4.19.91-26のAlibaba Cloud Linux 2が使用されています。 分散キャッシュ機能は、Alibaba Cloud Linux 2をサポートしています。

  • Kubernetes 1.20以降を実行するContainer Service for Kubernetes (ACK) クラスターが作成されます。 Container Storage Interface (CSI) プラグインがボリュームプラグインとして使用されます。 詳細については、「ACK管理クラスターの作成」をご参照ください。

  • csi-pluginとcsi-provisionerのバージョンはv1.22.11-abbb810e-aliyun以降です。 csi-pluginとcsi-provisionerを更新する方法の詳細については、「CSIプラグインのインストールと更新」をご参照ください。

  • storage-operatorのバージョンはv1.22.86-041b094-aliyun以降です。 storage-operatorの更新方法の詳細については、「コンポーネントの管理」をご参照ください。

  • kubectlクライアントがクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。

分散キャッシュ機能の主なパフォーマンス指標

インジケータ

ベンチマークシナリオ

分散キャッシュ無効

分散キャッシュの有効化

メタデータの読み取りと書き込みのパフォーマンス

百万のディレクトリを横断する期間

18分

<60秒

サイズが4 KBのファイルを作成する期間

3,000マイクロ秒

<200マイクロ秒

4 KBのサイズのファイルを2回目に読み取る期間

400マイクロ秒

<100マイクロ秒

読み取りおよび書き込みスループット

単一ノードの読み書きスループット

500メガバイト/秒に200

> 800メガバイト/秒

包括的なシナリオでの全体的なパフォーマンス

それぞれサイズが150 KBの5,000画像を抽出する期間

52秒

15秒について

Redisプロジェクトの作成期間

27秒

21秒について

重要

前の表に示した値は、理論値 (基準値) のみである。 実際の値は、お客様の運用環境によって異なります。

  • 注 ①: ベンチマークテストの実行に使用されるElastic Compute Service (ECS) インスタンスのタイプはecs.hfg6.4xlargeです。 ベンチマークデータは、環境に基づいて変化し得る。

  • 注 ②: ECSインスタンスの帯域幅とApsara File Storage NAS (NAS) ファイルシステムのタイプは、ノードの読み取りおよび書き込みスループットに影響します。

手順1: 分散キャッシュが有効になっているNASファイルシステムをマウントする

  1. 次のコマンドを実行して、csi-pluginのConfigMapを作成してクラスターにデプロイし、CNFSクライアントをインストールします

    cat <<EOF | kubectl apply -f-
    apiVersion: v1
    kind: ConfigMap
    メタデータ:
      名前: csi-plugin
      名前空間: kube-system
    データ:
      cnfs-client-properties: |
        nas-efc=true
      nas-efc-cache: |
        enable=true
        コンテナ番号=3
        volume-type=メモリ
        volume-size=15Gi
      ノードセレクタ: |
        cache=true
    EOF 

    パラメーター

    説明

    cnfs-client-properties

    分散キャッシュを有効にするかどうかを指定します。 cnfs-cache-propertiesを指定した場合。 enable=true、分散キャッシュ機能が有効になり、読み取り速度が向上します。

    nfs-efc-cache。

    コンテナー番号

    このパラメーターは、分散キャッシュを有効にする場合に必要です。

    このパラメーターは、キャッシュ機能用にDaemonSetが作成するコンテナーの数を指定します。 キャッシュ機能がパフォーマンスのボトルネックに達した場合、このパラメーターの値を増やすことができます。

    nfs-efc-cache。

    ボリュームタイプ

    このパラメーターは、分散キャッシュを有効にする場合に必要です。

    DaemonSetによって作成されたポッドのemptyDirボリュームによって使用されるメディア。 有効な値:

    • ディスク

    • メモリ

    nfs-efc-cache。

    volume-size

    このパラメーターは、分散キャッシュを有効にする場合に必要です。 キャッシュするボリュームのサイズ。 単位:GiB。

    cnfs-client-properties

    キャッシュ機能の依存関係。 分散キャッシュ機能を有効にする場合は、cnfs-client-propertiesを指定します。 enable=true

    ノードセレクタ

    分散キャッシュ機能用にDaemonSetによって作成されたポッドは、ラベルに基づいてスケジュールされます。 このパラメーターを指定しない場合、DaemonSetはクラスター内の各ノードにスケジュールされます。

    重要
    • メディアをディスクまたはメモリに設定すると、ノードのデータディスクまたはメモリリソースが使用されます。 これがワークロードに悪影響を及ぼさないことを確認してください。

    • この例では、分散キャッシュ機能のDaemonSetは、それぞれが5 GiBのサイズのtmpfsボリュームでマウントされる3つのコンテナを作成します。 コンテナーは、cache=trueラベルを持つノードにのみスケジュールできます。

    ConfigMapが設定されると、システムはConfigMapに基づいてDaemonSetとサービスを自動的にデプロイします。

  2. 次のコマンドを実行して、インストールの依存関係を持つCSI-Pluginを再起動します。

    kubectl get pod -nkube-system -owide | grep csi-plugin | awk '{print $1}' | xargs kubectl -nkube-system削除ポッド
  3. 次のコマンドを実行して、CNFSクライアントの分散キャッシュ機能を有効にします。

    CNFSによって管理されるNASファイルシステムを作成します。 StatefulSetは、CNFSによって高速化されたNASボリュームを動的にプロビジョニングされたボリュームとしてマウントします。 この例では、busybox画像が使用される。 ポッドが起動した後、システムはddコマンドを実行して、サイズが1 GBのファイルを /dataパスに書き込みます。 ファイルは、分散キャッシュ機能が有効かどうかを確認するために使用されます。

    YAMLコンテンツを表示する:

    cat << EOF | kubectl apply -f-
    apiVersion: storage.alibabacloud.com/v1beta1
    kind: ContainerNetworkFileSystem
    メタデータ:
      名前: cnfs-nas-filesystem
    spec:
      説明: "cnfs"
      タイプ: nas
      reclaimPolicy: Retain
      parameters:
        filesystemType: 標準
        storageType: 容量
        protocolType: NFS
        encryptType: なし
        enableTrashCan: "true"
        trashCanReservedDays: "5"
        useClient: "EFCClient"# EFCクライアントを使用して、分散キャッシュが有効になっているNASファイルシステムをマウントします。 
    ---
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    メタデータ:
      名前: alibabacloud-cnfs-nas-sc
    mountOptions:
      -g_tier_EnableClusterCache=true# ボリュームのマウント時にキャッシュ設定を構成します。 
      -g_tier_EnableClusterCachePrefetch=true# ボリュームのマウント時にプリフェッチを設定します。 
    parameters:
      volumeAs: サブパス
      containerNetworkFileSystem: cnfs-nas-filesystem
      パス: "/"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain
    allowVolumeExpansion: true
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    メタデータ:
      名前: cnfs-nas-sts
      ラベル:
        アプリ: busybox
    spec:
      serviceName: "busybox"
      replicas: 1
      セレクタ:
        matchLabels:
          アプリ: busybox
      template:
        metadata:
          labels:
            アプリ: busybox
        仕様:
          containers:
          -名前: busybox
            image: busybox
            コマンド: ["/bin/sh"]
            args: ["-c", "dd if=/dev/zero of=/data/1G.tmpfile bs=1G count=1;sleep 3600;"]
            volumeMounts:
            - mountPath: "/data"
              名前: www
      volumeClaimTemplates:
      - metadata:
          名前: www
        仕様:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: "alibabacloud-cnfs-nas-sc"
          resources:
            requests:
              ストレージ: 50Gi
    EOF 
  4. 次のコマンドを実行して、分散キャッシュが有効になっているNASボリュームがマウントされているかどうかを確認します。

    kubectl exec cnfs-nas-sts-0 -- mount | grep /data

    期待される出力:

    xxx.cn-xxx.nas.aliyuncs.com:/nas-6b9d1397-6542-4410-816b-4dfd0633 ****:2fMaQdxU on /data type alifuse.aliyun-alinas-eac (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)

    マウントターゲットが出力に表示されます。 これは、分散キャッシュが有効になっているNASボリュームがマウントされていることを示します。

  5. 次のコマンドを実行して、分散キャッシュ機能のDaemonSetが起動されているかどうかを確認します。

    kubectl get ds/cnfs-cache-ds -n kube-system -owide

    期待される出力:

    名前決定された現在の準備ができている日付までの利用可能なノード選択者年齢コンテナは選択者を想像します
    cnfs-cache-ds 3 3 3 3 3 <none> 19d alinas-dadi-containe r registry-vpc.cn-shenzhen.aliyuncs.com/acs/nas-cache:20220420 app=cnfs-cache-ds 

    この例では、クラスタは3つのノードを含む。 DaemonSetによって作成された3つのポッドが準備完了です。 これは、分散キャッシュ機能のDaemonSetが起動されたことを示します。

  6. 次のコマンドを実行して、分散キャッシュサービスがバックエンドポッドを検出できるかどうかを確認します。

    kubectl get ep cnfs-cache-ds-service -n kube-system -owide

    期待される出力:

    名前は年齢を終了します
    cnfs-cache-ds-service 10.19.1.130:6500,10.19.1.40:6500,10.19.1.66:6500 19d 

    出力は、サービスがバックエンドポッドを検出したことを示しています。 ポッドのエンドポイントは10.19.1.130、10.19.1.40、10.19.1.66です。 ポートは6500です。

ステップ2: キャッシュ機能を確認する

  1. 次のコマンドを実行して、/dataパスのtmpfileファイルを /ディレクトリにコピーし、消費時間を確認します。 ファイルのサイズは1 GBです。

    kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /

    期待される出力:

    リアル0m 5.66s
    ユーザー0m 0.00s
    sys 0m 0.75s 

    出力は、分散キャッシュ機能が無効になっている場合、ファイルのコピーに必要な時間が約5秒であることを示しています。

  2. 次のコマンドを複数回実行して、ファイルのコピーに必要な時間を確認します。

    kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /

    期待される出力:

    リアル0m 0.79s
    ユーザー0m 0.00s
    sys 0m 0.58s 

    出力は、ファイルが複数回アクセスされた場合、ファイルのコピーに必要な時間が6〜7倍に短縮されることを示しています。