Courses
健全なMongoDBデータベースを維持することは、アプリケーションの安定性、最適なパフォーマンス、データ完全性を確保するうえで不可欠です。「健全」なクラスターとは、読み書きを確実に提供し、データを損失から保護し、想定された運用パラメーター内で稼働しているものを指します。定期的なチェックとプロアクティブな監視は、サービスに影響が出る前に潜在的な問題を特定・対処するために極めて重要です。
MongoDBクラスターの健全性は、次の3つの基本領域に分類できます。
- レプリケーション
- パフォーマンス
- バックアップ
これらの領域を定期的に評価することで、データプラットフォームの堅牢性と信頼性を確保できます。さらに、MongoDB AtlasやMongoDB Ops Managerのような最新の管理ツールは、統合された監視機能を備え、アラートや推奨事項を提供して潜在的な問題を先回りして把握できるようにします。アラートを設定しておくと、状況を把握しやすくなります。手順と例はMongoDB公式ドキュメントのアラート設定方法をご覧ください。
では、これらの領域を順に見ていきましょう。
レプリケーションの状況
レプリケーションはMongoDBにおける高可用性の中核です。健全なレプリカセットは、データの冗長性とフェイルオーバー機能を確保します。レプリカセットのメンバーを構成するサーバー間で効果的なレプリケーションが行われているかを確認するため、3つの主要な指標を確認しましょう。
レプリケーションの全体状況と詳細
レプリカセットの完全な状態は、MongoDBシェルでrs.status()コマンドを実行することで取得できます。このコマンドはレプリカセットの現在の状態を包括的に示します。出力を確認し、すべてのメンバーが正常(PRIMARYまたはSECONDARYの状態)で、想定どおりに稼働していることを確認してください。
AtlasのUIからも、上記コマンドで得られるのと同様の情報にアクセスできます。「Clusters」ページから特定のクラスター名をクリックすると、「Overview」タブに移動し、ノードの概要が表示されます。重大な問題があれば、ここに表示されるはずです。
レプリケートに要する時間
レプリケートされたクラスターにおける耐久性は、データが過半数のノードに複製されることに依存します。そのため、健全なクラスターは迅速にレプリケートされなければなりません。そうでない場合、majorityの書き込み確認を伴う操作の待ち時間が長くなります。
この特性の先行指標がレプリケーションラグです。レプリケーションラグとは、プライマリーメンバーで操作が行われてから、セカンダリーメンバーに反映されるまでの遅延を指します。低く一定のレプリケーションラグは健全性の強い指標です。一方で、レプリケーションが遅い場合は、ノード間の接続設定が不適切である兆候かもしれません。
レプリカラグを観察する最も簡単な方法は、「Cluster Metrics」タブの「Replication Lag」チャートを見ることです。以下は健全なクラスターにおけるこのチャートの例です。このメトリクスは、中央の「P」で示されるクラスターのPRIMARYノードには適用されない点に注意してください。

Replication Oplog Window
レプリケーションは「oplog」と呼ばれる特別なコレクションを通じて実装されています。oplog(operation log)は、すべてのデータ変更操作を記録する固定サイズコレクションです。「Replication Oplog Window」とは、現在の操作が上書きされ始めるまでに、同期元がレプリケーションoplog内で利用できるおおよその時間を指します。言い換えると、Replication Oplog Windowは、oplog内の最新と最古のタイムスタンプの時間差です。十分なoplogウィンドウ値は、障害後にセカンダリーが追いつくことを可能にし、フルデータの再同期を防ぐために極めて重要です。
セカンダリーがReplication Oplog Windowを超える時間オフラインになると、そのセカンダリーはゼロから再同期する必要があります。つまり、レプリカが利用不能となり得る最大時間よりも長いReplication Oplog Windowの値を確保することが望まれます。Replication Oplog Windowの値は、書き込み操作のバーストに影響を受けやすい点に注意してください。
Replication Oplog Windowを拡大するには、oplogコレクションのサイズを増やします。

パフォーマンスの状況
パフォーマンスは、アプリケーションのユーザー体験とクラスター運用コストに直結します。健全なクラスターは、ワークロードに対して効率的に動作しています。
ここでも、監視すべき重要なパフォーマンス面を確認しましょう。
現在の操作件数が想定どおりであること
最初に確認したいのは、クラスターが想定どおりの操作件数を受け取っているかどうかです。ここでの「想定どおり」とは、その値を把握していることが前提です。そうでない場合は、直近1時間、1日、1週間などのクエリの推移を調べることで、平常値やピーク、異常の有無を把握できます。特定の時間に毎週規則的なピークがある場合は、クラスターの事前スケールアップが必要になるかもしれません。
操作レート(読み取り、書き込み、コマンド)に注目してください。突発的で想定外の急増や急減は、アプリケーションの問題、リソースのボトルネック、非効率なクエリパターンなどを示唆します。支援のため、「Opcounters」セクションで観測できる操作数に対してアラートを設定してください。
また、現在の操作レートに関するリアルタイム情報は「Real Time」タブで確認できます。

スロークエリの深掘り
実行に異常に時間がかかるクエリはスロークエリと呼ばれます。これはしばしば、インデックスやクエリ最適化の必要性を示します。さらに、メモリ内ソートを必要とする操作を監視することも重要です。これはサーバーリソースを大きく消費し、パフォーマンスを低下させる可能性があります。
「Query Insights」タブでは、クエリの表示、条件によるフィルタリング、追加アクションが可能です。このページを使って、最適化すべきクエリや、別ノードで実行すべき、あるいは別の時間に実行すべきクエリを特定します。

不足しているインデックス
MongoDBでスロークエリが発生する最も一般的な原因は、適切なインデックスの欠如です。インデックスがない場合、MongoDBはコレクションスキャン(コレクション内のすべてのドキュメントを確認)を行うことがありますが、特に大規模なコレクションでは非常に非効率です。クエリパフォーマンスを維持するには、不足しているインデックスの特定と作成が欠かせません。
「Performance Advisor」タブには、最適化に役立つ有用なツールが多数用意されています。以下は「Create Indexes」ページの例です。

バックアップの状況
レプリケーションは、サーバーのディスクなどのリソースが失われたり破損したりした場合のデータ損失軽減に有効です。クラスターのネイティブな高可用性は、ほとんどのハードウェア障害をカバーします。しかし、信頼できるバックアップ戦略は、データ損失に対する究極の安全策であり続けます。健全なクラスターには、検証済みで稼働中のバックアップおよびリカバリーの仕組みがあります。
他のセクションと同様に、バックアップ戦略に関する重要な検討事項を見ていきましょう。
リカバリー目標の定義
Recovery Point Objective(RPO:許容できる最大のデータ損失量)と、Recovery Time Objective(RTO:サービス復旧に許容される最大時間)を定義します。これらの目標が、バックアップの頻度と手法を決定します。
バックアップの基本
MongoDBでは、データバックアップのためのツールがいくつかあります。最も簡単なのは、mongodumpを用いてデータをダンプすることです。さらに、MongoDBの管理ツールを利用してスナップショットを取得し、個々の操作(oplog)を保持することで、任意時点のイメージを再現することへと発展します。MongoDB Atlasはホステッドクラスター向けにこれらのツールを統合しており、MongoDB OpsManagerはオンプレミスクラスターに対して同様の機能を提供します。
バックアップとしてデータの多くのバージョンを保持すると、通常は元のデータベース自体よりも多くの容量を要します。ニーズに見合うようコストを把握しておくことが重要です。この検討によって、作成するスナップショット数とその頻度を示すスケジュールが策定されます。

バックアップの追跡、アクセス、復元
MongoDB Atlasを使用している場合は、管理されたバックアッププロセスが正常に稼働し、定期的にスナップショットを取得しており、保持ポリシーがRPOに合致していることを確認してください。
復元の実施:バックアップが有効であることを真に確認する唯一の方法は、定期的に復元テストを行うことです。これにより、バックアップから復元までの一連のパイプライン全体が検証され、緊急時にデータを復旧できることが保証されます。

まとめ
健全なMongoDBクラスターの特徴は次のとおりです。
- 最適なレプリケーション状態
- 効率的なパフォーマンス
- 信頼できるバックアップ
これら3つの領域でのプロアクティブな監視、クエリパフォーマンスの分析、復元テストの実施により、MongoDB導入環境の安定性と長期的な運用を確実なものにできます。

MongoDB のシニアスタッフ・デベロッパーアドボケイト
FAQs
MongoDBクラスターのセキュリティ確保における最初の重要なステップは何ですか?
セキュリティは極めて重要です。認証を有効化し、ロールベースアクセス制御(RBAC)を設定することが、許可されたユーザーやアプリケーションのみがデータへアクセス・変更できるようにするための第一歩です。クラスター間通信をSSLで保護することも不可欠です。
本番環境の健全なクラスターで、レプリケーションラグの上限として許容される目安はどのくらいですか?
ワークロードやトポロジによって異なりますが、レプリケーションラグは理想的には1秒程度が望ましいです。10秒を継続的に超えるラグは、高可用性を損なう可能性がある問題と一般に見なされます。
Replication Oplog Windowの最適なサイズはどのように決めればよいですか?
一般的なベストプラクティスは、oplogが少なくとも24〜72時間分の操作を保持できるようにサイズ設定することです。ただし、1週間分を確保するユーザーも多くいます。これにより、ほとんどのメンテナンスや障害後にセカンダリーがフル再同期を必要とせずに追いつける十分な余裕が生まれます。別の見方をすれば、チームが健全なクラスターを再稼働できるまで何日かかり得るかという観点です。
不足しているインデックス以外で、より深いパフォーマンスレビューが必要となるスロークエリの一般的な原因は何ですか?
非効率なスキーマ設計は大きなパフォーマンス問題を引き起こす可能性があります。特に、不要に大きなドキュメント読み取りや最適化されていない書き込み処理を招くクエリが該当します。
この記事では、信頼できるバックアップ戦略が究極の安全策であると述べています。フルリストアテストはどのくらいの頻度で実施すべきですか?
フルリストアテストは、四半期に一度以上、またはクラスターやバックアップシステムの主要な構成変更後に実施すべきです。これにより、復旧パイプライン全体が検証され、必要なときに実際にデータを復元できることが確認されます。