クラスタノード(Pod)のボリュームは、FEPClusterカスタムリソースのfepChildCrValのstorageセクションに設定された値に従って作成されます。
注意
最初にFEPClusterを作成した後は、新しいボリュームを後で追加したり、storageClassまたはaccessModesを変更したりすることはできません。
基となるstorageClassがサイズの動的変更をサポートしている場合に限り、最初に作成されたボリュームのサイズを変更できます。
以下は、FEPClusterカスタマリソースのstorageセクションのスキーマです。
フィールド | 省略可否 | サブフィールド | 省略値 | 説明 |
---|---|---|---|---|
archivewalVol | 可 | size | 1Gi | アーカイブログのボリュームサイズです。 “Fujitsu Enterprise Postgres 導入ガイド(サーバ編)”の“データベースのディスク容量の見積り”を参照し、サイズ設計を行ってください。 |
storageClass | プラットフォームのデフォルトになります。 | ストレージクラスは開始時にのみ設定されます。 | ||
accessModes | ReadWriteOnce | アクセスモードは開始時にのみ設定されます。 | ||
backupVol | 可 | size | 2Gi | バックアップのボリュームサイズです。 下記の計算式をもとに見積もりを行ってください。 (full backupの世代数 + incr backupの世代数 + 1) * dataVolのサイズ |
storageClass | プラットフォームのデフォルトになります。 | ストレージクラスは開始時にのみ設定されます。 | ||
accessModes | ReadWriteOnce | アクセスモードは開始時にのみ設定されます。 | ||
dataVol | 不可 | size | 2Gi | データのボリュームサイズです。 “Fujitsu Enterprise Postgres 導入ガイド(サーバ編)”の“データベースのディスク容量の見積り”を参照し、テーブルサイズ/インデックスサイズを基に設計を行ってください。 |
storageClass | プラットフォームのデフォルトになります。 | ストレージクラスは開始時にのみ設定されます。 | ||
accessModes | ReadWriteOnce | アクセスモードは開始時にのみ設定されます。 | ||
logVol | 可 | size | 1Gi | ログのボリュームサイズです。 ログ出力のレベル(デフォルト:WARNING)を変更して運用する場合や監査ログ機能を有効化する場合には、実際のログ出力量をテスト環境で計測してください。 |
storageClass | プラットフォームのデフォルトになります。 | ストレージクラスは開始時にのみ設定されます。 | ||
accessModes | ReadWriteOnce | アクセスモードは開始時にのみ設定されます。 | ||
tablespaceVol | 可 | size | 512Mi | テーブル空間のボリュームサイズです。 テーブル空間を利用する場合、dataVolと同様に“Fujitsu Enterprise Postgres 導入ガイド(サーバ編)”の“データベースのディスク容量の見積り”を参照し、サイズ設計を行ってください。 |
storageClass | プラットフォームのデフォルトになります | ストレージクラスは開始時にのみ設定されます。 | ||
accessModes | ReadWriteOnce | アクセスモードは開始時にのみ設定されます。 | ||
walVol | 不可 | size | 1200Mi | トランザクションログのボリュームサイズです。 “Fujitsu Enterprise Postgres 導入ガイド(サーバ編)”の“データベースのディスク容量の見積り”を参照し、サイズ設計を行ってください。 なお、max_wal_sizeのデフォルト値は1GBです。 |
storageClass | プラットフォームのデフォルトになります | ストレージクラスは開始時にのみ設定されます。 | ||
accessModes | ReadWriteOnce | アクセスモードは開始時にのみ設定されます。 |
“accessMode”は、後でpgBadgerレイヤーを含めるために組み込まれています。共有ボリューム機能を提供すると、pgBadgerコンテナが複数のサーバーインスタンス(マスター/レプリカ)からログを読み取り、Webサーバを介して公開できるようになります。
急激な問合せの増加などにより、データやWALの量が増加し、ディスク容量を圧迫することで、データベースの運用が停止してしまう可能性があります。ディスクの使用量が閾値を超えた場合、またはディスクの容量不足でデータベースの運用が停止した場合には、以下の方法でディスクの容量不足を解決します。
ディスク容量の増加
ディスク使用量の削減
ディスク容量を増やすには、以下の2つの方法があります。
ディスク容量の拡張
KubernetesのPVC拡張機能が使えるボリュームを使っている場合は、ディスク容量を拡張し、容量不足を解消します。
ディスク容量が大きいデータベースクラスタへ移行
KubernetesのPVC拡張機能が利用できないボリュームを利用している場合、または、上限等でボリュームの拡張がそれ以上できない場合は、データベースクラスタの移行を検討します。容量の大きいディスクを利用しているクラスタにデータを移行することで容量不足を解消します。
ディスク容量の拡張
KubernetesのPVC拡張機能を利用してディスク容量を拡張します。PVC拡張機能に対応しているディスクのみ容量を拡張できます。ディスクがPVC拡張機能に対応しているかどうかは、利用しているCSIドライバの仕様を確認してください。
ディスク容量の拡張は、利用者が任意のタイミングで実行する手動拡張と、オペレーターが監視機能と連携して使用量が閾値を超えたときに実行する自動拡張があります。
手動拡張は、FEPClusterカスタムリソースのストレージ定義を変更することで、PVCを拡張することができます。AlertMnagerからディスク使用量の閾値を超えた通知が出たときや、ディスク容量の不足によりデータベースが停止してしまったときに、カスタムリソースを書き換えてPVCを拡張します。手動拡張の詳細は、“5.3.2 PVCのサイズ変更”を参照してください。また、AlertManagerのアラートルールの定義例は、“オペレーターリファレンス”の“デフォルトのアラートルール”を参照してください。
自動拡張は、拡張する上限になるまでは、データベース管理者の監視および手動のメンテナンス作業(ボリュームの容量拡充)が不要です。
自動拡張の詳細は、“2.3.3.2 PVC自動拡張機能の設定”を参照してください。
PVC拡張機能に対応していないディスクを利用している場合や、ディスク容量が拡張できない場合は、“ディスク容量が大きいデータベースクラスタへ移行”と“2.3.3.1.2 ディスク使用量の削減”を参照してください。
ディスク容量が大きいデータベースクラスタへ移行
バックアップ/リストア機能を利用して、別のディスクに新規データベースクラスタを構築し、データを移行します。以下の場合に、この方法を使用してください。
AlertMnagerからディスク使用量の閾値を超えた通知が出た場合
ディスク容量の不足によりデータベースが停止してしまった場合
容量の大きなディスクに変更することで、ディスク容量不足を解消することができます。
新規データベースクラスタへの移行は、FEPRestoreカスタムリソースのspec.changeParamsを設定してリストア元から定義を変更することで、新規FEPClusterを構築しデータを復元できます。詳細は、“オペレーターリファレンス”の“FEPRestoreカスタムリソースパラメータ”を参照してください。
ディスク容量不足の予防保守として、データ格納先(dataVol、walVol、tablespaceVol)で、REINDEX文を実行します。詳細は、“Fujitsu Enterprise Postgres 運用ガイド”の“インデックスの再編成”を参照してください。
トランザクションログ格納先とバックアップデータ格納先の容量不足に対する予防保守として、ディスク使用量の削減を検討してください。トランザクションログ格納先の容量不足の場合、ログファイルのローテーション設定や出力レベルを見直し、変更を検討してください。バックアップデータまたはトランザクションログのアーカイブ格納先の容量不足の場合、バックアップの保存世代数の削減を検討してください。
バックアップの保存世代数は、FEPActionカスタムリソースのspec.fepAction.typeにbackup_expireを指定することで削減できます。詳細は、“オペレーターリファレンス”の“FEPActionカスタムリソースパラメータ”を参照してください。
FEPClusterカスタムリソースのspec.fepChildCrVal.storage.autoresize.enableにtrueを設定すると、ディスク使用量が閾値を超えた場合にディスク容量を自動的に拡張するPVC自動拡張機能を有効にすることができます。
PVC自動拡張機能を有効にするためには、下記の2つの条件を満たしている必要があります。
StorageClassにPVC拡張機能に対応しているボリュームを指定
StorageClassのallowVolumeExpansionフィールドにtrueを指定
指定したボリュームがPVC拡張機能に対応しているかどうかは、利用しているCSIドライバの仕様を確認してください。
また、ストレージの使用状況を監視するためにPrometheusが必要です。下記のkubeletによって取得されるメトリクスをPrometheusでスクレイプしてください。
kubelet_volume_stats_used_bytes(Volumeの使用中の容量(バイト))
kubelet_volume_stats_capacity_bytes(Volumeの容量(バイト))
Prometheusの設定ファイルのscrape_configセクションで、各Nodeに対して、kubeletがhttpsで提供する/metricsを参照していることを確認してください。詳細は、Prometheusのドキュメントを確認してください。
PVC自動拡張機能は、FEPCluster構築後でも有効/無効を切り替えることができます。
PVC自動拡張機能を有効にすると、pvc-auto-resizeコンテナを含むfep-tuning podが構築されます。pvc-auto-resizeコンテナは、定義されている各PVCのメトリクスを定期的にPrometheusから取得します。PVCのボリューム使用率が、定義されている閾値を超えていた場合、自動的にFEPClusterカスタムリソースの定義を書き換えます。カスタムリソースが書き換えられたことで、対象のPVCが自動的に拡張されます。
FEPClusterが複数台構成で構築されている場合、1台でもボリュームの使用率が閾値を超えるとPVCの拡張を実行します。
PVC自動拡張機能では下記のパラメータを利用します。各パラメータの詳細は、“オペレーターリファレンス”を参照してください。
spec.fep.autoTuningセクション:メトリクスを取得するPrometheusの接続情報
spec.fepChildCrVal.storage.autoresizeセクション:ストレージ共通の拡張設定
spec.fepChildCrVal.storage.xxxVolセクション:各ストレージの定義と個別の拡張設定
拡張設定には、ボリューム使用率の閾値、サイズの拡張量、拡張可能なサイズの上限などを定義することが可能です。
下記にPVC自動拡張機能を有効化する場合のFEPClusterカスタムリソースの定義例を示します。
spec: fep: autoTuning: prometheus: prometheusUrl: http://prometheus-prometheus-oper-prometheus.prometheus.svc:9090 fepChildCrVal: storage: autoresize: enable: True threshold: 20 increase: 20 dataVol: # dataボリュームはautoresize配下の定義そのまま利用する size: 10Gi storageClass: resizable-storage walVol: # walボリュームは閾値と拡張の上限を変更する size: 2Gi storageClass: resizable-storage threshold: 50 storageLimit: 10 backupVol: # backupボリュームは拡張しない size: 20Gi storageClass: share-storage accessModes: ReadWriteMany storageLimit: 0
監視機能との組み合わせの考え方
PVC自動拡張機能では、拡張可能なストレージの上限を決めることができます。しかし、想定以上のデータ投入などが発生し設定した上限よりもデータ量が増えてしまう可能性があります。これを避けるために、PVC自動拡張機能と合わせて、監視機能の利用を推奨します。
FEPExporter機能利用時にデフォルトで作成されるアラートルールでは、ボリューム使用率が90%を超えたときにアラートが発信されます。PVC自動拡張機能のデフォルトの閾値は80%です。これにより、ディスクの拡張上限に達して自動拡張がされない状態のときに、ボリューム使用量が増えてしまったとしても、AlertManagerからアラートが発信されるため、ディスク容量の不足に気づくことができます。
自動拡張機能の閾値をアラートルールの閾値より低い値に設定することで、より安全なディスク容量を保つことができます。