AWS FSx for NetApp ONTAPでのパフォーマンスの概要と検証
ストレージレイヤをNetApp NFS上にマウントしたKafkaクラスタは、AWS FSx for NetApp ONTAPでパフォーマンスのベンチマークを実施しました。ベンチマークの例については、次のセクションで説明します。
AWS FSx for NetApp ONTAPでのApache Kafkaの使用
Network File System(NFS;ネットワークファイルシステム)は、大量のデータを格納するために広く使用されているネットワークファイルシステムです。ほとんどの組織では、データがApache Kafkaなどのストリーミングアプリケーションによって生成されるようになっています。このようなワークロードには、拡張性、低レイテンシ、最新のストレージ機能を備えた堅牢なデータ取り込みアーキテクチャが必要です。リアルタイム分析を実現し、実用的な分析情報を提供するには、適切に設計されたパフォーマンスの高いインフラが必要です。
Kafkaは、設計上POSIX準拠のファイルシステムと連携し、ファイル操作をファイルシステムに依存して処理しますが、NFSv3ファイルシステムにデータを格納する場合、KafkaブローカーのNFSクライアントは、ファイル操作をXFSやext4などのローカルファイルシステムとは異なる方法で解釈できます。一般的な例としては、NFSのsilly renameがあり、クラスタの拡張時やパーティションの再割り当て時にKafkaブローカーでエラーが発生していました。この課題に対処するため、NetAppはオープンソースのLinux NFSクライアントを更新し、RHEL8.7とRHEL9.1で一般提供されるようになりました。また、最新のFSx for NetApp ONTAPリリースであるONTAP 9.12.1からサポートされるようになりました。
Amazon FSx for NetApp ONTAPは、拡張性とパフォーマンスに優れたフルマネージドのNFSファイルシステムをクラウドで提供します。FSx for NetApp ONTAPのKafkaデータは、大量のデータを処理し、フォールトトレランスを確保するように拡張できます。NFSは、重要で機密性の高いデータセットに対して一元的なストレージ管理とデータ保護を提供します。
これらの機能強化により、AWSのお客様はAWSコンピューティングサービスでKafkaワークロードを実行する際にFSx for NetApp ONTAPを活用できるようになります。次のようなメリットがあります。
* CPU使用率を削減して、I/O待機時間を短縮します
* Kafkaブローカーのリカバリ時間の短縮。
*信頼性と効率性。
*拡張性とパフォーマンス。
*マルチアベイラビリティゾーンの可用性。
*データ保護:
AWS FSx for NetApp ONTAPでのパフォーマンスの概要と検証
ストレージレイヤをNetApp NFS上にマウントしたKafkaクラスタは、AWSクラウドでのパフォーマンスについてベンチマークテストを実施しました。ベンチマークの例については、次のセクションで説明します。
AWS FSx for NetApp ONTAPのKafka
AWS FSx for NetApp ONTAPを使用したKafkaクラスタは、AWSクラウドでのパフォーマンスについてベンチマークを実施しました。このベンチマークについては、以降のセクションで説明します。
アーキテクチャのセットアップ
次の表に、AWS FSx for NetApp ONTAPを使用したKafkaクラスタの環境構成を示します。
プラットフォームコンポーネント | 環境の構成 |
---|---|
Kafka 3.2.3. |
|
すべてのノード上のオペレーティングシステム |
RHEL8.6 |
AWS FSx for NetApp ONTAP |
マルチアストラゼネカ、4GB/秒のスループット、160000 IOPS |
NetApp FSx for NetApp ONTAPのセットアップ
-
最初のテストでは、2TBの容量と40000のIOPSで2GB/秒のスループットを実現するFSx for NetApp ONTAPファイルシステムを作成しました。
[root@ip-172-31-33-69 ~]# aws fsx create-file-system --region us-east-2 --storage-capacity 2048 --subnet-ids <desired subnet 1> subnet-<desired subnet 2> --file-system-type ONTAP --ontap-configuration DeploymentType=MULTI_AZ_HA_1,ThroughputCapacity=2048,PreferredSubnetId=<desired primary subnet>,FsxAdminPassword=<new password>,DiskIopsConfiguration="{Mode=USER_PROVISIONED,Iops=40000"}
この例では、AWS CLIを使用してFSx for NetApp ONTAPを導入しています。必要に応じて、環境内でコマンドをさらにカスタマイズする必要があります。FSx for NetApp ONTAPはAWSコンソールからさらに導入、管理できるため、コマンドラインの入力が少なく、導入がより簡単かつ合理的になります。
ドキュメントFSx for NetApp ONTAPでは、テストリージョン(US-East-1)の2GB/秒スループットファイルシステムで達成可能な最大IOPSは8万IOPSです。FSx for NetApp ONTAPファイルシステムの合計最大IOPSは16万IOPSですが、そのためには4GB/秒のスループット導入が必要です。このことについては、このドキュメントの後半で説明します。
FSx for NetApp ONTAPのパフォーマンス仕様の詳細については、AWS FSx for NetApp ONTAPのドキュメントを参照してください。 https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/performance.html 。
FSx「create-file-system」のコマンドライン構文の詳細については、以下を参照してください。 https://docs.aws.amazon.com/cli/latest/reference/fsx/create-file-system.html
たとえば、KMSキーが指定されていない場合に使用されるデフォルトのAWS FSxマスターキーとは異なり、特定のKMSキーを指定できます。
-
FSx for NetApp ONTAPファイルシステムを作成するときは、ファイルシステムを次のように定義したら、JSONで「lifecycle」ステータスが「available」に変わるまで待ちます。
[root@ip-172-31-33-69 ~]# aws fsx describe-file-systems --region us-east-1 --file-system-ids fs-02ff04bab5ce01c7c
-
fsxadminユーザを使用してFSx for NetApp ONTAP SSHにログインし、クレデンシャルを検証します。
Fsxadminは、作成時にFSx for NetApp ONTAPファイルシステムのデフォルトの管理者アカウントです。fsxadminのパスワードは、手順1で完了したように、AWSコンソールまたはAWS CLIでファイルシステムを最初に作成したときに設定したパスワードです。[root@ip-172-31-33-69 ~]# ssh fsxadmin@198.19.250.244 The authenticity of host '198.19.250.244 (198.19.250.244)' can't be established. ED25519 key fingerprint is SHA256:mgCyRXJfWRc2d/jOjFbMBsUcYOWjxoIky0ltHvVDL/Y. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '198.19.250.244' (ED25519) to the list of known hosts. (fsxadmin@198.19.250.244) Password: This is your first recorded login.
-
クレデンシャルの検証が完了したら、FSx for NetApp ONTAPファイルシステムにSVMを作成
[root@ip-172-31-33-69 ~]# aws fsx --region us-east-1 create-storage-virtual-machine --name svmkafkatest --file-system-id fs-02ff04bab5ce01c7c
Storage Virtual Machine(SVM)は分離されたファイルサーバで、FSx for NetApp ONTAPボリューム内のデータを管理およびアクセスするための独自の管理クレデンシャルとエンドポイントを備え、FSx for NetApp ONTAPマルチテナンシーを提供します。
-
プライマリSVMの設定が完了したら、新しく作成したFSx for NetApp ONTAPファイルシステムにSSHで接続し、以下のサンプルコマンドを使用してSVMにボリュームを作成します。同様に、この検証用に6つのボリュームを作成します。Kafkaのパフォーマンスが向上するように、デフォルトのコンスティチュエント(8個)以下のコンスティチュエントを使用してください。
FsxId02ff04bab5ce01c7c::*> volume create -volume kafkafsxN1 -state online -policy default -unix-permissions ---rwxr-xr-x -junction-active true -type RW -snapshot-policy none -junction-path /kafkafsxN1 -aggr-list aggr1
-
テスト用にボリュームに追加の容量が必要になります。ボリュームのサイズを2TBに拡張し、ジャンクションパスにマウントします。
FsxId02ff04bab5ce01c7c::*> volume size -volume kafkafsxN1 -new-size +2TB vol size: Volume "svmkafkatest:kafkafsxN1" size set to 2.10t. FsxId02ff04bab5ce01c7c::*> volume size -volume kafkafsxN2 -new-size +2TB vol size: Volume "svmkafkatest:kafkafsxN2" size set to 2.10t. FsxId02ff04bab5ce01c7c::*> volume size -volume kafkafsxN3 -new-size +2TB vol size: Volume "svmkafkatest:kafkafsxN3" size set to 2.10t. FsxId02ff04bab5ce01c7c::*> volume size -volume kafkafsxN4 -new-size +2TB vol size: Volume "svmkafkatest:kafkafsxN4" size set to 2.10t. FsxId02ff04bab5ce01c7c::*> volume size -volume kafkafsxN5 -new-size +2TB vol size: Volume "svmkafkatest:kafkafsxN5" size set to 2.10t. FsxId02ff04bab5ce01c7c::*> volume size -volume kafkafsxN6 -new-size +2TB vol size: Volume "svmkafkatest:kafkafsxN6" size set to 2.10t. FsxId02ff04bab5ce01c7c::*> volume show -vserver svmkafkatest -volume * Vserver Volume Aggregate State Type Size Available Used% --------- ------------ ------------ ---------- ---- ---------- ---------- ----- svmkafkatest kafkafsxN1 - online RW 2.10TB 1.99TB 0% svmkafkatest kafkafsxN2 - online RW 2.10TB 1.99TB 0% svmkafkatest kafkafsxN3 - online RW 2.10TB 1.99TB 0% svmkafkatest kafkafsxN4 - online RW 2.10TB 1.99TB 0% svmkafkatest kafkafsxN5 - online RW 2.10TB 1.99TB 0% svmkafkatest kafkafsxN6 - online RW 2.10TB 1.99TB 0% svmkafkatest svmkafkatest_root aggr1 online RW 1GB 968.1MB 0% 7 entries were displayed. FsxId02ff04bab5ce01c7c::*> volume mount -volume kafkafsxN1 -junction-path /kafkafsxN1 FsxId02ff04bab5ce01c7c::*> volume mount -volume kafkafsxN2 -junction-path /kafkafsxN2 FsxId02ff04bab5ce01c7c::*> volume mount -volume kafkafsxN3 -junction-path /kafkafsxN3 FsxId02ff04bab5ce01c7c::*> volume mount -volume kafkafsxN4 -junction-path /kafkafsxN4 FsxId02ff04bab5ce01c7c::*> volume mount -volume kafkafsxN5 -junction-path /kafkafsxN5 FsxId02ff04bab5ce01c7c::*> volume mount -volume kafkafsxN6 -junction-path /kafkafsxN6
FSx for NetApp ONTAPでは、ボリュームをシンプロビジョニングできます。この例では、拡張されたボリュームの合計容量がファイルシステムの合計容量を超えているため、プロビジョニングされた追加のボリューム容量のロックを解除するには、ファイルシステムの合計容量を拡張する必要があります。これについては、次の手順で説明します。
-
次に、パフォーマンスと容量を強化するために、FSx for NetApp ONTAPのスループット容量を2GB/秒から4GB/秒、IOPSから160000、容量を5TBに拡張しました。
[root@ip-172-31-33-69 ~]# aws fsx update-file-system --region us-east-1 --storage-capacity 5120 --ontap-configuration 'ThroughputCapacity=4096,DiskIopsConfiguration={Mode=USER_PROVISIONED,Iops=160000}' --file-system-id fs-02ff04bab5ce01c7c
FSx「update-file-system」の詳細なコマンドライン構文は、次のとおりです。
https://docs.aws.amazon.com/cli/latest/reference/fsx/update-file-system.html -
FSx for NetApp ONTAPボリュームは、nconnectおよびデフォルトのオプションを使用してKafkaブローカーにマウントされます。
次の図は、FSx for NetApp ONTAPベースのKafkaクラスタの最終的なアーキテクチャを示しています。
-
コンピューティング:3ノードのKafkaクラスタを使用し、専用サーバで3ノードのZookeeperアンサンブルを実行しました。各ブローカーには、FSx for NetApp ONTAPインスタンス上の6つのボリュームに対するNFSマウントポイントが6つありました。
-
監視:Prometheus-Grafanaの組み合わせには2つのノードを使用しました。ワークロードの生成には、独立した3ノードクラスタを使用し、このKafkaクラスタを生成して使用しました。
-
ストレージ:FSx for NetApp ONTAPを使用し、2TBのボリュームを6個マウントしました。その後、NFSマウントを使用してボリュームをKafkaブローカーにエクスポートしました。FSx for NetApp ONTAPボリュームは、16のnconnectセッションとKafkaブローカーのデフォルトオプションでマウントされます。
-
OpenMessageベンチマーク設定。
NetApp Cloud Volumes ONTAPと同じ構成を使用しました。詳細はこちらをご覧ください。
リンク:kafka-nfs-performance-overview-and-validation-in-aws.html#architecture-setup
テストの方法論
-
Kafkaクラスタは、前述の仕様に従ってterraformとAnsibleを使用してプロビジョニングされました。Terraformを使用して、Kafkaクラスタ用のAWSインスタンスを使用してインフラを構築し、Ansibleを使用してKafkaクラスタを構築します。
-
上記のワークロード構成とSyncドライバでOMBワークロードがトリガーされました。
sudo bin/benchmark –drivers driver-kafka/kafka-sync.yaml workloads/1-topic-100-partitions-1kb.yaml
-
同じワークロード構成でスループットドライバを使用して別のワークロードがトリガーされました。
sudo bin/benchmark –drivers driver-kafka/kafka-throughput.yaml workloads/1-topic-100-partitions-1kb.yaml
観察
NFSで実行されるKafkaインスタンスのパフォーマンスをベンチマークするために、2種類のドライバを使用してワークロードを生成しました。ドライバの違いは、log flushプロパティです。
Kafkaレプリケーションファクタ1とFSx for NetApp ONTAPの場合:
-
Syncドライバで一貫して生成された総スループット:最大3218 Mbps、最大パフォーマンス(最大3652 Mbps)
-
スループットドライバによって一貫して生成された総スループット:最大3679 Mbps、最大3908 Mbpsのパフォーマンス。
レプリケーションファクタ3のKafkaとFSx for NetApp ONTAPの場合:
-
Syncドライバで一貫して生成される合計スループット:最大1252 Mbps、最大1382 Mbps。
-
スループットドライバによって一貫して生成される総スループット:最大1218 Mbps、最大パフォーマンス(最大1328 Mbps)
Kafkaレプリケーションファクタ3では、FSx for NetApp ONTAPで読み取りと書き込みの処理が3回行われました。Kafkaレプリケーションファクタ1では、読み取りと書き込みの処理がFSx for NetApp ONTAPで1回行われたため、どちらの検証でも、 4GB/秒の最大スループットに到達できました。
Syncドライバはログが即座にディスクにフラッシュされるときに一貫したスループットを生成できますが、Throughputドライバはログがディスクに一括コミットされるときにスループットのバーストを生成します。
これらのスループット値は、指定されたAWS構成に対して生成されます。より高いパフォーマンス要件に対応するには、インスタンスタイプをスケールアップしてさらに調整し、スループットを向上させることができます。総スループットまたは総レートは、生産者と消費者の両方のレートの組み合わせです。
以下の表は、Kafkaレプリケーションファクタ3で2GB/秒のFSx for NetApp ONTAPと4GB/秒のパフォーマンスを示しています。レプリケーションファクタ3は、FSx for NetApp ONTAPストレージで読み取りと書き込みの処理を3回行います。スループットドライバの合計レートは881 MB/秒で、2GB/秒のFSx for NetApp ONTAPファイルシステムではKafkaの読み取りと書き込みを行います。スループットドライバの合計レートは1328 MB/秒で、Kafkaの読み取りと書き込みを行います。Kafkaのパフォーマンスは、FSx for NetApp ONTAPのスループットに基づいてリニアで拡張性に優れています。
以下のグラフは、EC2インスタンスとFSx for NetApp ONTAPのパフォーマンスを示しています(Kafkaレプリケーション係数:3)。