Kubernetes Operator は、複数の Kubernetes クラスターにわたって MongoDB データベース リソースと MongoDB Ops Manager リソースの両方を配置することをサポートしています。これにより、地理的な多重化、障害復旧機能、および固有の回復力が向上します。
重要
既存の MongoDB Ops Manager 配置を単一クラスタートポロジーから複数クラスタートポロジーに変換することはできません。単一クラスターモードで開始する場合は、一からやり直して再配置する必要があります。初期配置の前にトポロジーを計画します。
単一クラスター モードとマルチクラスター モード
Kubernetes 演算子を使用して MongoDB リソースを配置するモードは、次の設定で制御できます。
spec.topology— MongoDB Ops Managerアプリケーションのモードを制御します。spec.applicationDatabase.topology— アプリケーションデータベースのモードを制御します。
spec.topologyとspec.applicationDatabase.topologyの両方をMultiClusterに設定すると、次の例に示すように、MongoDB Ops Managerリソースとそのアプリケーションデータベースのマルチクラスターモードが有効になります。
spec: topology: MultiCluster applicationDatabase: topology: MultiCluster
マルチクラスター モードでは、単一のノード クラスターから開始し、必要に応じて増やすことができます。具体的な説明は以下の通りです。
単一ノード クラスターの開始: 配置は、1 つのノード クラスターで開始できます。
最小アプリケーションデータベースレプリカセット: 最小 3 ノードのアプリケーションデータベースレプリカセットは単一ノードクラスターで実行でき、後でクラスター間で拡張できます。
単一アプリケーションインスタンス: 単一の Ops Managerアプリケーションインスタンスは1つのクラスターで実行するでき、後で追加のクラスターを追加できます。
単一クラスター モード (デフォルト)では、トポロジ設定を省略するか、SingleClusterに設定します。
複数のクラスター配置の制限
マルチクラスター配置には次の制限が適用されます。
MongoDB Ops Managerバージョン 5.0.7 以降を使用します。
シークレットのストレージには、シークレットのみを使用します。HashiCorp Vault はサポートされていません。
Kubernetes Operator が
MongoDBOpsManagerリソースとMongoDBリソースの両方を管理しない配置の場合は、MongoDB Ops Manager で KMIP バックアップ暗号化設定を手動で構成する必要があります。MongoDBMultiClusterリソースに ServiceMonitor を追加しないでください。Prometheus 統合はサポートされていません。既存の単一クラスター MongoDB リソースをマルチクラスター リソースに移行することはできません。
単一クラスター配置とマルチクラスター配置の違い
機能または要件 | シングルクラスター | マルチクラスター |
|---|---|---|
演算子は、MongoDB Ops Managerおよびアプリケーションデータベースと同じクラスターにある必要があります | はい | No |
Ops Manager およびアプリケーションデータベースクラスターに必要なサービスメッシュ | No | はい |
HashiCorp Vault のサポート | はい | No |
すべてのバックアップ メカニズムがサポートされています | はい | いいえ。S3互換のoplog/スナップショットのみ。 |
KMIP暗号化 | はい | 制限付き |
マルチクラスターMongoDBデータベースリソース配置図
サービスメッシュの有無にかかわらず、複数のクラスターで MongoDB を配置できます。
いずれの場合も、Kubernetes 演算子は、
演算子クラスター上の
MongoDBMultiCluster仕様を監視します。マウントされた
kubeconfigを使用してノードクラスターと通信します。各ノードクラスターに ConfigMaps、Secrets、Services、および StatefulSets を作成します。
MongoDB レプリカセットのノードを適切なクラスターに配置します。
演算子クラスターとノードクラスターのイベントを監視します。
リソースを調整して、期待される状態を確認します。
MongoDB Controls for Kubernetes Operator を使用する複数の Kubernetes クラスター MongoDBデプロイは、 Kubernetesの 1 つの演算子クラスターと 1 つ以上のノード クラスターで構成されます。
演算子クラスターには、次のロールがあります。
Kubernetes Operator 用のMongoDB Controls のホスト
MongoDB のマルチ Kubernetes クラスター配置のコントロール プレーンとして機能
MongoDB レプリカセットの
MongoDBMultiClusterリソース仕様をホストしますを 演算子とともに配置する場合、 をホストしますMongoDB Ops ManagerMongoDB Ops ManagerKubernetes
MongoDB レプリカセット のノードもホストできます
重要
中央クラスターは、 演算子クラスター とも呼ばれます。 将来のリリースでは、中央クラスターへの参照は演算子クラスターを参照するように名前が変更される可能性があります。
メンバークラスターは MongoDB レプリカセットをホストします。
注意
演算子クラスターが失敗した場合、アクセスを復元するか、Kubernetes Operator を別のクラスターに再配置するまで、Kubernetes Operator を使用して配置を変更することはできません。See 障害復旧.
サービス メッシュの使用
サービスメッシュは、クラスター間の MongoDB ノードの検出を管理し、ノード間の通信を取り扱います。次の図は、サービスメッシュを使用したマルチクラスタ配置を示しています。
サービス メッシュなし
外部ドメインと DNS ゾーンは、クラスター間の通信を取り扱います。外部ドメインと DNS ゾーンによる外部接続の有効化を参照してください。次の図は、サービス メッシュを使用しないマルチクラスター配置を示しています。
マルチクラスター Ops Manager リソース配置図
次の図は、複数の Kubernetes クラスターに配置された MongoDB Ops Manager アプリケーション、アプリケーションデータベース、バックアップデーモンを示しています。
複数のクラスターでの Ops Manager 配置の主な要素:
演算子クラスター (例:ノードクラスター 0) は、すべてのノードクラスターの管理に使用される
kubeconfigシークレット (mongodb-enterprise-operator-multi-cluster-kubeconfig) とクラスターマッピング ConfigMap を保存します。クラスターマッピング ConfigMaps は、クラスター名とインデックスの間の関係を追跡します。
<om_resource_name>-cluster-mapping—spec.clusterSpecListエントリをクラスター インデックスにマップします。<om_resource_name>-db-cluster-mapping—spec.applicationDatabase.clusterSpecListエントリをクラスター インデックスにマップします。<om_resource_name>-db-member-spec— 障害復旧のためにクラスターごとのレプリカ数を記録します。
アプリケーション StatefulSets は、各クラスターで
<om_resource_name>-<cluster_index>と呼ばれます。演算子は、すべてのローカル Pod を含むClusterIPサービス (<om_resource_name>-svc)と、外部アクセス用の任意のLoadBalancerサービス (<om_resource_name>-svc-ext)を作成します。アプリケーションデータベース StatefulSets の名前は
<om_resource_name>-db-<cluster_index>です。ポッドごとのサービス (<om_resource_name>-db-<cluster_index>-<pod_index>-svc) により、サービス メッシュ全体で個別のmongodのアドレス指定が可能になります。バックアップデーモン StatefulSets は
<om_resource_name>-backup-daemon-<cluster_index>と呼ばれ、spec.backup.enabledがtrueの場合に作成されます。
マルチクラスターネットワーキング
マルチクラスタ配置のネットワーキングの概要
次の表は、マルチクラスター配置で MongoDB Ops Manager アプリケーションに接続するクライアントとサービスの種類と、それらが使用する URL を説明します。
オリジン | 目的 | URL |
|---|---|---|
Kubernetes 演算子 | Ops Managerを構成し、モニタリングを有効にします | デフォルト FQDN |
Kubernetes 演算子 | 特定の MongoDB 配置を構成します | プロジェクト ConfigMap( 「ConfigMap を使用して MongoDB 配置ごとに 1 つのプロジェクトを作成」より) |
アプリケーションデータベース内のMongoDB Agent | MongoDB Ops Managerからオートメーション構成を受信します | ヘッドレス モード(MongoDB Ops Manager の接続は不要) |
アプリケーションデータベースのモニタリングエージェント | モニタリング データを MongoDB Ops Manager に送信する | デフォルトの FQDN または |
| バックアップと復元の指示を含むオートメーション構成を MongoDB Ops Manager から受信する | プロジェクト ConfigMap |
user | MongoDB Ops Manager UI または API にアクセスします | 外部ドメインを介して |
マルチクラスター MongoDB Ops Manager 配置のサービスメッシュ要件
複数のクラスターでの Ops Manager 配置の場合は、アプリケーションデータベースと Ops Manager アプリケーションをホストする Kubernetes クラスターを同じサービス メッシュに追加します。これにより、次のことが可能になります。
クラスター間の配置されたコンポーネント間のネットワーク接続。
Pod ごとのサービス FQDN のクロスクラスター DNS 解決。
さらに、演算子クラスターを同じサービス メッシュに追加することもお勧めします。これにより、Ops Manager アプリケーションとアプリケーションデータベース インスタンスを直接ホストできるようになります。
次のクラスターのサービス メッシュを構成します。
演算子クラスター(Kubernetes Operator をインストールする場所)
MongoDB Ops Manager アプリケーション インスタンスをホストするすべてのノード Kubernetes クラスター
アプリケーションデータベースインスタンスをホストするすべてのノードKubernetesクラスター
サービス メッシュにより、各 MongoDB Ops Manager インスタンスは、クラスター間でもすべてのアプリケーションデータベース インスタンスに接続できます。配置後、各 MongoDB Ops Manager API エンドポイントは、すべてのアプリケーションデータベース ノードに直接接続できる必要があります。
マルチクラスター MongoDB Ops Manager 配置のロード バランシング
マルチクラスターの MongoDB Ops Manager 配置では、各クラスターは LoadBalancer タイプのサービスを使用して、MongoDB Ops Manager アプリケーションをホストするポッドを個別に公開できます。spec.externalConnectivity を使用してこのサービスを作成し、外部ドメインを外部 IP アドレスに指定します。マルチクラスター配置でのロードバランシングの構成について詳しくは、「マルチクラスター MongoDB Ops Manager 配置のサービス メッシュ要件」を参照してください。
Kubernetes Operator はクロスクラスターロードバランシングをネイティブでサポートしていないため、外部でロードバランシングを構成する必要があります。Ops Manager 配置のクロスクラスターロードバランシングを有効にするためのアプローチには、次のものがあります。
- 外部ロード バランサー: MongoDB Ops Manager アプリケーションをホストするすべてのクラスターに外部ネットワーク ロード バランサー (パススルー プロキシ) を構成します。ロード バランサーは、ラウンドロビン方式で各クラスターの
LoadBalancerサービスにトラフィックを転送します。次の図は、このアプローチを示しています。
- プロキシを使用したサービス メッシュ: サービス メッシュのクロスクラスターロード バランシングを使用します。1 つのクラスターにプロキシ(Nginx や HAProxy など)を配置し、外部に公開し、TCP パススルーを
<om_resource_name>-svc.<namespace>.svc.cluster.localに構成します。次の図は、このアプローチを示しています。
MongoDB Ops Manager配置のためのマルチクラスターのパフォーマンスに関する考慮事項
アプリケーションデータベース と MongoDB Ops Manager のインスタンスの地理的分散は、MongoDB Ops Manager アプリケーション のパフォーマンスとバックアップ/復元プロセスに影響を与える可能性があります。マルチリージョン配置 でのパフォーマンス を参照してください。
可能な場合は、マルチクラスターの回復力と可用性の利点を最大限に活用するため、すべてのコンポーネントを同じ地域に配置します。
パフォーマンス低下の可能性のある要因としては、次のものがあります。
MongoDB Ops Manager アプリケーションとプライマリアプリケーションデータベースノード間のネットワークレイテンシが増加しました。
MongoDB データベース ノードとバックアップ ジョブを実行する MongoDB Ops Manager アプリケーションの間のレイテンシが増加します。
地理的に離れた配置を計画している場合は、MongoDB サポート にお問い合わせください。
マルチクラスター MongoDB データベース リソース機能
次のマルチクラスター機能では、単一クラスター配置と同じ手順が使用されます。
DNS SRVレコードで接続:Kubernetes Operatorが作成するシークレットから、
connectionString.standardSrvDNSシードリスト接続文字列を使用してください。Kubernetes内からMongoDBデータベース リソースに接続するを参照し、Using the Kubernetes Secretタブを選択します。データベースユーザーのセキュリティを管理する: 単一クラスター配置と同じ LDAP、SCRAM、X.509、OIDC 認証手順を使用します。ただし、以下の例外があります。
複数のクラスターでの手順は、レプリカセットにのみ適用されます(シャーディングされたクラスターはサポートされません)。
mongodbResourceRefで、マルチクラスターレプリカセット名を指定します。
クエリ可能なバックアップ (単一クラスターのみのオンプレミス): MongoDB Ops Managerが単一のクラスターに配置されている場合は、クエリ可能なバックアップを構成できます。クエリ可能なバックアップは、複数のクラスターに配置されたMongoDB Ops Managerではサポートされていません。