sql >> データベース >  >> NoSQL >> MongoDB

MongoDBの開発と運用のチェックリスト

    MongoDBの操作と開発のチェックリストは、データベース管理者がMongoDBの本番環境で問題が発生するのを防ぐのに役立つことを目的としています。開発チェックリストは、次のような問題に対処する必要があります...

      スキーマ設計 データの耐久性 レプリケーション ドライブ シャーディング

    一方、操作チェックリストはアドレス...

      レプリケーション ファイルシステム シャーディング ハードウェア
    1. ジャーナル(WiredTigerストレージエンジン)
    2. オペレーティングシステムの構成 クラウドハードウェアへの導入 モニタリング バックアップと負荷分散

    プロジェクトを開始する前に、運用と開発のチェックリストに取り組み、本番環境でMongoDBをスムーズに運用できるようにすることをお勧めします。この記事では、MongoDBをデプロイする前の運用と開発のチェックリストについて説明します。

    MongoDB操作チェックリスト

    レプリケーション

    非表示になっていないすべてのレプリカメンバーセットは、ディスク、RAM、ネットワークセットアップ、CPUに関して同じようにプロビジョニングする必要があります。

    Oplogサイズは、次のような運用上のニーズに対応するように適切に構成する必要があります。

    • 完全な再同期の必要性を回避するために、レプリカoplogアプリケーションウィンドウは、通常のダウンタイムとメンテナンスウィンドウをカバーする必要があります。
    • レプリケーションセットメンバーを復元するには、レプリカoplogウィンドウが常に必要な時間をカバーする必要があります。

    本番環境には、少なくとも、ジャーナリングを有効にして実行される3つのデータ保持ノードを組み込む必要があります。さらに、書き込みは、データの可用性と耐久性を確保するために、w:「大多数」の書き込みの懸念事項を使用して発行する必要があります。

    クラスター内のプライマリノードに障害が発生した場合に投票プロセスを容易にするために、デプロイメントには奇数の投票メンバーを含める必要があります。

    IPの変更により構成の変更が必要になる可能性のあるIPアドレスを使用するのではなく、論理DNSホスト名を使用することをお勧めします。

    mongodインスタンスの投票数が0または1であることを確認してください。

    すべてのMongodインスタンスは、関係するノード間でデータの通信が容易になるように、完全かつ双方向に接続する必要があります。

    ジャーナル

    これは、障害が発生した場合にデータの耐久性を確保するために採用されている、ログ先行書き込みのディスクジャーナルファイル戦略です。この理由から、特に書き込みの多いワークロードを処理する場合は、すべてのインスタンスでジャーナル処理を有効にする必要があります。

    ただし、データベースの状態を構成するレコードはパーティション化されたボリュームに存在するため、これはスナップショットスタイルの拡張に影響することを考慮してください。

    ファイルシステム

    dbPathにニュースファイルシステム(NFS)ドライブを使用しないでください。 NFSドライブは、パフォーマンスを不安定にする可能性があります。 VMwareユーザーはVMware仮想ドライブを使用することをお勧めします。

    ディスクパーティションがRAIDON構成と整合していることを確認してください。

    Linux / Unixユーザーの場合、XFSの使用をお勧めします。 XFSはMongoDBでより良いパフォーマンスを発揮することが知られています。

    Windowsオペレーティングシステムのユーザーには、NTFSファイルシステムをお勧めします。 FATファイルシステムの使用は避けてください。

    クラウドハードウェアへの導入

    Windows Azure:TCPキープアライブ(tcp_keepalive_time)を100〜120に変更します。 AzureスタックバランサーでのTCPのギアタイムアウトは、MongoDBのアソシエーションプーリング動作に対しても中程度です

    Windows Azureなどの高レイテンシストレージを備えたフレームワークでは、MongoDB 2.6.4以降のバージョンを使用します。これらのバージョンには、これらのフレームワークの実行機能拡張が組み込まれているためです。

    シャーディング

    構成サーバーを専用ハードウェアに配置して、拡張クラスターでの理想的な実行を実現します。

    ハードウェアに、情報レコードを完全にメモリに保持するのに十分なRAMがあり、専用のストレージがあることを確認してください。

    世代設定ガイドラインに従ってmongosルーターを導入します。

    NTPを使用して、シャードクラスターのすべてのコンポーネントのクロックを同期します。

    mongos、mongod、およびconfigサーバー間の完全な双方向ネットワークを確保します。

    CNAMEを使用して、クラスターに対する構成サーバーを認識し、ダウンタイムなしで構成サーバーの名前を変更したり、番号を付け直したりできるようにします。

    監視

    MongoDB Cloud Manager、ClusterControl、または別の監視フレームワークなどのツールを利用して、主要なデータベースメトリックをスクリーニングし、アラームを設定できます。指標のアラートを組み込む:

      キュー レプリケーションoplogウィンドウ アサーション ページフォールト レプリケーションラグ
    サーバーのハードウェアメトリックを監視します。特に利用可能なディスク容量、ディスク使用量、CPUに注意してください

    ハードウェア

    RAID10およびSSDドライブを利用して理想的なパフォーマンスを実現します。

    SANと仮想化:

    各mongodインスタンスがdbPathにIOPSをプロビジョニングしているか、物理ドライブまたはLUNを要求していることを確認してください。

    仮想環境で実行している場合は、メモリの膨張など、動的なメモリのハイライトを回避してください。

    SANは単一の失望点になる可能性があるため、すべてのコピーセットの個人を同じSANに設定することは避けてください。

    負荷分散 既存の接続に対して適切なタイムアウトで「スティッキーセッション」または「クライアントアフィニティ」を有効にするロードバランサーを設計します。

    MongoDBクラスターまたはレプリカセットコンポーネント間にロードバランサーを配置することは避けてください。

    バックアップ

    バックアップおよび復元プロセスの断続的なテストを計画して、タイムゲージを手元に用意し、その有用性を確認します。

    オペレーティングシステムの構成 ウィンドウズ

    NTFSの「最終アクセス時間」アップグレードを非アクティブ化することを検討してください。

    デフォルトの割り当て単位サイズである4096バイトを使用してNTFSディスクをフォーマットします。

    Linux

    巨大な透明なページをオフにします。

    データベースファイルが保存されているダイスのリードヘッド設定を調整します。 WiredTigerストレージエンジンの先読みは8〜32の間に設定する必要があります。

    RHEL / CentOSで調整されたものを利用する場合は、調整されたプロファイルをカスタマイズする必要があります。 RHEL / CentOSに付属する多数の調整済みプロファイルは、デフォルト設定での実行に悪影響を与える可能性があります。選択した調整済みプロファイルを次のようにカスタマイズします:

    単純な巨大ページを無効にします。

    容量メディアの並べ替えの場合は、先読みを8〜32に設定します。

    SSDドライブのnoopまたはdeadlineディスクスケジューラを利用します。

    ゲストVMの仮想化ドライブにnoopディスクスケジューラを使用します。

    NUMAを無効にするか、vm.zone_reclaim_modeを0に設定して、ノードインターリーブを使用してmongodオカレンスを実行します。

    ユースケースに一致するようにハードウェアのulimit値を調整します。異なるmongodまたはmongosオカレンスが同じクライアントの下で実行されている場合は、同様の方法でulimit値をスケーリングします。

    適切なレコードハンドル(fs.file-max)、パーツpid制約(kernel.pid_max)、プロセスあたりの最大スレッド(kernel.threads-max)、およびプロセスあたりのメモリアウトライン領域の最大数を設計します(vm.max_map_count)送信用。拡張フレームワークの場合、次の値が優れた出発点になります。

    fs.file-max value of 98000,
    
    kernel.pid_max value of 64000,
    
    kernel.threads-max value of 64000, and vm.max_map_count value of 128000
    フレームワークにスワップスペースが構成されていることを確認してください。

    正しいサイズ設定に関する重要なポイントについては、オペレーティングシステムのドキュメントを参照してください。

    システムのデフォルトのTCPキープアライブが正確に設定されていることを確認します。多くの場合、値が300の場合、レプリカセットとシャードクラスターのパフォーマンスが向上します。

    MongoDB開発チェックリスト

    レプリケーション

    選挙が効果的に継続することを保証するために、奇数の投票者を利用します。最大7人の投票者がいます。投票する個人の数が偶数で、コストなどの制約により、別のセカンダリーを投票メンバーにすることが許可されていない場合は、奇数の投票を保証するためにアービターを含めることができます。

    監視ツールを利用し、適切な書き込みの懸念を示すことで、セカンダリが最新の状態に保たれることを保証します。

    全体的な読み取りスループットをスケーリングするために補助読み取りを利用しないでください。

    スキーマ設計

    MongoDBのデータには動的パターンが含まれています。コレクションはレポート構造を支持しません。これにより、反復的な改善とポリモーフィズムが促進されます。いずれにせよ、コレクションは非常に均質な構造のレコードを保持することがよくあります。

    必要なコレクションのセットとクエリをバックアップするために必要なインデックスを決定します。 _idインデックスの特殊なケースでは、すべてのインデックスを明示的に作成する必要があります。MongoDBは、当然、_id以外のインデックスを作成しません。

    スキーマ計画がデプロイメントの並べ替えをサポートすることを保証します。水平スケーリングにシャードクラスターを利用することを計画している場合は、強力なシャードキーを組み込むようにスキーマを計画します。シャードキーは、MongoDBがデータをセグメント化する方法を決定することにより、読み取りと書き込みの実行に影響を与えます。一度設定したシャードキーは変更できません。

    スキーマ計画が、無制限に長さが増加するインデックス付きクラスターに依存しないようにしてください。通常、このようなインデックス付きクラスターのコンポーネントが1000未満の場合に、最適な実行を実現できます。

    スキーマを設計するときは、ドキュメントの見積もり制限を考慮してください。 BSONDocumentEstimateの制限はドキュメントあたり16MBです。より大きなレポートが必要な場合は、GridFSを使用してください。

    ドライバー アソシエーションプーリングを利用します。ほとんどのMongoDBドライバーは、アソシエーションプーリングをサポートしています。ユースケースに合わせてアソシエーションプールのサイズを変更し、同時データベース要求の通常の数の110〜115%から開始します。

    レプリカセットの選出中にアプリケーションが一時的な書き込みと読み取りのミスを処理することを確認してください。

    アプリケーションが失敗したリクエストを処理することを保証し、必要に応じて再試行します。ドライバーはしません

    失敗したリクエストを自然に再試行します。

    データベースリクエストの再試行に指数バックオフの根拠を利用します。

    データベース操作の実行期間を制限したい場合は、読み取りにcursor.maxTimeMS()を使用し、書き込みにwtimeoutを使用します。

    データの耐久性

    レプリカセットに、w:majoritycomposeの懸念がある少なくとも3つのデータベアリングハブが組み込まれていることを確認してください。レプリカセット全体のデータの堅牢性には、3つのデータベアリングハブが必要です。

    すべてのインスタンスがジャーナリングを利用することを保証します。

    シャーディング シャードキーがシャードに均等に負荷を伝達することを保証します。

    シャードの数に応じて拡張できるワークロードの対象となる操作を利用します。

    MongoDB 3.6以降では、読み取りの懸念が「利用可能」(因果的に信頼できるセッションに関連していない場合のセカンダリに対する読み取りのデフォルトの読み取りの懸念)を利用しない限り、セカンダリは孤立したデータを返さなくなります。

    >

    MongoDB 3.6以降、シャードレプリカセットのすべてのメンバーはチャンクメタデータを保持し、「使用可能」を利用していないときに孤立したものを除外できるようにします。そのため、「利用可能」を利用していない非ターゲットまたはブロードキャストの問い合わせは、どのメンバーでも安全に実行でき、孤立した情報を返すことはありません。

    「アクセス可能な」読み取りの懸念事項は、オーバーホールされたチャンクメタデータをチェックしないため、補助メンバーから孤立したドキュメントを返す可能性があります。いずれにせよ、孤立したドキュメントの返送がアプリケーションにとって重要でない場合、「利用可能な」読み取りの懸念は、さまざまな読み取りの懸念の中で可能な限り非アクティブな読み取りを最小限に抑えます。

    拡張データセットをハッシュされていない新しいシャードコレクションに埋め込むときに、チャンクを事前に分割して手動で調整します。事前分割と物理的な調整により、埋め込みスタックがシャード間で分散され、開始ロードの実行が拡張されます。

    結論

    運用と開発のチェックリスト管理は、MongoDBを本番環境で使用するときに開発者が組み込む必要のある重要なステップです。これらは、実稼働中のプロジェクトのタスクのフローを強化するため、重要な考慮事項です。 MongoDBの本番環境では、本番環境のデータベースに実際のデータが保存されるため、安定した信頼性の高いデータベース機能が必要です。データの整合性は、データベースの安定性に依存します。データベースの安定性は、運用および開発チェックリストのすべての項目が本番環境の前に確実に処理されるようにすることで可能になります。


    1. Puppetを使用したMongoDBレプリカセットとシャードのデプロイの基本

    2. 四半期ごとに日付をグループ化する方法は?

    3. mongooseを使用してドキュメントをmongodbに挿入し、生成されたIDを取得するにはどうすればよいですか?

    4. MongoDBスキーマ設計:常にスキーマがあります