10.7. Ceph OSD 容量の決定
合計 IOPS に関する Ceph OSD 容量は、Ceph OSD の初期化中に自動的に決定されます。これは、Ceph OSD ベンチツールを実行し、デバイスタイプに応じて osd_mclock_max_capacity_iops_[hdd, ssd]
オプションのデフォルト値をオーバーライドすることによって行われます。Ceph OSD 容量を設定するために、ユーザーがその他の操作や入力を行う必要はありません。
自動化された手順により決定された非現実的な Ceph OSD 容量に対する処理
特定の条件では、Ceph OSD ベンチツールは、ドライブの設定やその他の環境関連の条件に基づき、非現実的または誇張された結果を示す場合があります。
この非現実的な容量がパフォーマンスに及ぼす影響を軽減するために、OSD デバイスタイプに応じていくつかのしきい値設定オプションが定義および使用されます。
-
osd_mclock_iops_capacity_threshold_hdd
= 500 -
osd_mclock_iops_capacity_threshold_ssd
= 80000
これらのパラメーターは、次のコマンドを実行して確認できます。
[ceph: root@host01 /]# ceph config show osd.0 osd_mclock_iops_capacity_threshold_hdd 500.000000 [ceph: root@host01 /]# ceph config show osd.0 osd_mclock_iops_capacity_threshold_ssd 80000.000000
OSD を手動でベンチマークするか、BlueStore スロットルパラメーターを手動で調整する場合は、OSD の手動ベンチマーク を参照してください。
クラスターが起動した後、次のコマンドを実行して OSD の容量を確認できます。
構文
ceph config show osd.N osd_mclock_max_capacity_iops_[hdd, ssd]
例
[ceph: root@host01 /]# ceph config show osd.0 osd_mclock_max_capacity_iops_ssd
上記の例では、基盤となるデバイスが SSD である Red Hat Ceph Storage ノード上の osd.0
の最大容量を表示できます。
次の自動化された手順が実行されます。
デフォルトの OSD 容量の使用へのフォールバック
Ceph OSD ベンチツールが上記のしきい値を超える測定値を報告した場合、フォールバックメカニズムにより osd_mclock_max_capacity_iops_hdd
または osd_mclock_max_capacity_iops_ssd
のデフォルト値に戻ります。しきい値設定オプションは、使用するドライブのタイプに基づき再設定できます。
測定値がしきい値を超えた場合、クラスター警告がログに記録されます。
例
3403 Sep 11 11:52:50 dell-r640-039.dsal.lab.eng.rdu2.redhat.com ceph-osd[70342]: log_channel(cluster) log [WRN] : OSD bench result of 49691.213005 IOPS exceeded the threshold limit of 500.000000 IOPS for osd.27. IOPS capacity is unchanged at 315.000000 IOPS. The recommendation is to establish the osd's IOPS capacity using other benchmark tools (e.g. Fio) and then override osd_mclock_max_capacity_iops_[hdd|ssd].
デフォルトの容量が Ceph OSD の容量を正確に示していない場合は、ドライブで Fio などのツールを使用してカスタムベンチマークを実行し、最大 OSD 容量の指定 で説明されているとおり osd_mclock_max_capacity_iops_[hdd, ssd]
オプションをオーバーライドすることを強く推奨します。
関連情報
- Ceph OSD を手動でベンチマークするか、BlueStore スロットルパラメーターを手動で調整する場合は、手動による OSD ベンチマーク を参照してください。
-
osd_mclock_max_capacity_iops_[hdd, ssd]
およびosd_mclock_iops_capacity_threshold_[hdd, ssd]
オプションの詳細は、mClock 設定オプション を参照してください。
10.7.1. OSD 容量の確認
ストレージクラスターをセットアップした後、Ceph OSD の容量を確認できます。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Monitor ホストへの root レベルのアクセス。
手順
Cephadm シェルにログインします。
例
[root@host01 ~]# cephadm shell
Ceph OSD の容量を確認します。
構文
ceph config show osd.OSD_ID osd_mclock_max_capacity_iops_[hdd, ssd]
例
[ceph: root@host01 /]# ceph config show osd.0 osd_mclock_max_capacity_iops_ssd 21500.000000
10.7.2. OSD の手動ベンチマーク
Ceph OSD を手動でベンチマークするには、既存のベンチマークツール (Fio など) を使用できます。使用するツールまたはコマンドに関係なく、以下の手順を実行します。
シャードの数と BlueStore スロットルパラメーターは、mClock 操作キューに影響を与えます。したがって、mclock スケジューラーの影響を最大化するには、これらの値を慎重に設定することが重要です。これらの値の詳細は、mClock 操作キューに影響を与える要因 を参照してください。
このセクションで説明している手順は、OSD 初期化時に自動的に決定された Ceph OSD 容量をオーバーライドする場合にのみ必要です。
ベンチマークデータをすでに決定しており、Ceph OSD の最大 OSD 容量を手動でオーバーライドする場合は、最大 OSD 容量の指定 セクションに移動してください。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Monitor ホストへの root レベルのアクセス。
手順
Cephadm シェルにログインします。
例
[root@host01 ~]# cephadm shell
Ceph OSD をベンチマークします。
構文
ceph tell osd.OSD_ID bench [TOTAL_BYTES] [BYTES_PER_WRITE] [OBJ_SIZE] [NUM_OBJS]
ここでは、以下のようになります。
- TOTAL_BYTES: 書き込みバイト数の合計。
- BYTES_PER_WRITE: 書き込みごとのブロックサイズ。
- OBJ_SIZE: オブジェクトごとのバイト数。
- NUM_OBJS : 書き込むオブジェクトの数。
例
[ceph: root@host01 /]# ceph tell osd.0 bench 12288000 4096 4194304 100 { "bytes_written": 12288000, "blocksize": 4096, "elapsed_sec": 1.3718913019999999, "bytes_per_sec": 8956977.8466311768, "iops": 2186.7621695876896 }
10.7.3. 正しい BlueStore スロットル値の決定
このセクションはオプションであり、正しい BlueStore スロットル値を決定するための手順を詳しく説明しています。この手順では、デフォルトのシャードを使用します。
テストを実行する前に、正確な測定値を取得するためにキャッシュをクリアします。次のコマンドを使用して、各ベンチマーク実行の間に OSD キャッシュをクリアします。
構文
ceph tell osd.OSD_ID cache drop
例
[ceph: root@host01 /]# ceph tell osd.0 cache drop
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- ベンチマークする OSD をホストする Ceph Monitor ノードへのルートレベルのアクセス。
手順
Cephadm シェルにログインします。
例
[root@host01 ~]# cephadm shell
OSD で単純な 4KiB ランダム書き込みワークロードを実行します。
構文
ceph tell osd.OSD_ID bench 12288000 4096 4194304 100
例
[ceph: root@host01 /]# ceph tell osd.0 bench 12288000 4096 4194304 100 { "bytes_written": 12288000, "blocksize": 4096, "elapsed_sec": 1.3718913019999999, "bytes_per_sec": 8956977.8466311768, "iops": 2186.7621695876896 1 }
- 1
osd bench
コマンドの出力から得た全体的なスループット。この値は、デフォルトの BlueStore スロットルオプションが有効な場合のベースラインスループットです。
- 前のコマンドの出力から得た全体的なスループット (つまり IOPS) をメモします。
お使いの環境の BlueStore スロットル値を決定することが目的の場合は、
bluestore_throttle_bytes
およびbluestore_throttle_deferred_bytes
オプションを 32 KiB (32768 バイト) に設定します。構文
ceph config set osd.OSD_ID bluestore_throttle_bytes 32768 ceph config set osd.OSD_ID bluestore_throttle_deferred_bytes 32768
例
[ceph: root@host01 /]# ceph config set osd.0 bluestore_throttle_bytes 32768 [ceph: root@host01 /]# ceph config set osd.0 bluestore_throttle_deferred_bytes 32768
それ以外の場合は、次のセクション (OSD の最大容量の指定) に進みます。
OSD ベンチコマンドを使用して、前と同じように 4KiB ランダム書き込みテストを実行します。
例
[ceph: root@host01 /]# ceph tell osd.0 bench 12288000 4096 4194304 100
- 出力からの全体的なスループットに注目し、その値を前の手順でメモしたベースラインスループットと比較します。
- スループットがベースラインと一致しない場合は、BlueStore スロットルオプションを 2 倍の値に増加させます。
- 得られたスループットがベースライン値に非常に近くなるまで、4KiB のランダム書き込みテストを実行し、値をベースラインスループットと比較して BlueStore スロットルオプションを 2 倍の値に増加させる手順を繰り返します。
たとえば、NVMe SSD を搭載したマシンでのベンチマーク実行時に、mClock の影響を最大化するために、BlueStore スロットルと遅延バイトの両方の値が 256 KiB に決定されました。HDD の場合、全体的なスループットがベースラインスループットとほぼ同じになる値は 40 MiB でした。
通常、HDD の場合、BlueStore スロットル値は SSD と比較して高くなることが予想されます。
10.7.4. 最大 OSD 容量の指定
OSD の初期化中に自動的に設定された Ceph OSD の最大容量をオーバーライドできます。
これらの手順はオプションです。デフォルト容量が Ceph OSD の容量を正確に示していない場合は、次の手順を実行します。
OSD の手動ベンチマーク で説明されているとおり、最初にベンチマークデータを決定してください。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Monitor ホストへの root レベルのアクセス。
手順
Cephadm シェルにログインします。
例
[root@host01 ~]# cephadm shell
OSD の
sd_mclock_max_capacity_iops_[hdd, ssd]
オプションを設定します。構文
ceph config set osd.OSD_ID osd_mclock_max_capacity_iops_[hdd,ssd] VALUE
例
[ceph: root@host01 /]# ceph config set osd.0 osd_mclock_max_capacity_iops_hdd 350
この例では、基になるデバイスタイプが HDD である
osd.0
の最大容量を 350 IOPS に設定します。