Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

MongoDB Search とベクトル検索の配置

KubernetesクラスターにMongoDB Search とベクトル検索を配置すると、アプリケーション内で強力な検索エクスペリエンスを直接構築できます。MongoDB Search とベクトル検索を使用すると、オンプレミスのMongoDBデータベースと自動的に同期する従来のテキスト検索とAIを使用したベクトル検索機能の両方を構築できます。これにより、高度な検索機能を提供しながら個別のシステムを同期して維持する必要がなくなります。詳しくは、以下を参照してください。

オンプレミス配置で全文検索やセマンティック検索などの検索機能を有効にするには、 MongoDB Search およびベクトル検索プロセス(mongot)を配置し、それをMongoDBデータベース配置(mongod)に接続する必要があります。 。mongot の配置は任意であり、提供される検索機能を使用する予定の場合にのみ必要です。

MongoDB Database プロセス(mongod)は、mongot のすべての検索クエリのプロキシとして機能します。mongod はクエリを mongot に転送し、クエリを処理します。mongot はクエリ結果を mongod に返し、ノードはその結果を に転送します。mongot と直接やり取りすることはありません。

mongot プロセスには、データベースや他の検索ノードと共有されていない独自の永続ボリュームがあります。ストレージ は、データベースから継続的に提供されるデータから構築されたインデックスを維持するために使用されます。インデックス定義(メタデータ)はデータベース自体に保存されます。

mongot は、次のアクションを実行します。

  • インデックスを管理します。

    mongot は、データベース内のインデックス定義を更新します。

  • データベースからデータを取得します。

    mongot ノードは、データベースへの永続的な接続を確立し、データベースからインデックスをリアルタイムで更新します。

  • 検索クエリを処理します。

    When mongod$search$searchMeta、または $vectorSearch クエリを受信すると、そのクエリは mongot ノードのいずれかに送信されます。クエリを受け取った mongot はクエリを処理し、データを集計し、その結果を mongod に返し、ユーザーに転送します。

mongot コンポーネントは 1 つのMongoDBレプリカセットと厳密に結合されているため、複数のデータベースやレプリカセットで共有することはできません。レプリカセット配置の場合、専用検索ノードの 1 つのグループがレプリカセットを提供します。シャーディングされたクラスターの場合、各シャードは mongot ノードの独自のグループを維持します。シャードは mongot インスタンスを共有しません。

mongotmongod の間のネットワーク接続は両方向で行われます。

  • mongot は、インデックスの構築とクエリの実行に使用されるデータを取得するためにレプリカセットへの接続を確立します。

  • mongodmongot に接続して、インデックス管理やデータのクエリなどの検索関連の操作を転送します。

spec.replicasフィールドは、 Kubernetes 演算子が配置する mongot インスタンスの数を制御します。レプリカセットソースの場合、spec.replicasmongot ポッドの合計数を設定します。シャーディングされたクラスターソースの場合、spec.replicasシャードあたりmongot ポッドの数を設定します。

spec.replicas1 より大きい値に設定する場合は、mongodmongot ポッドの間に L7 ロードバランサーを配置する必要があります。mongod プロセスは mongot への単一の永続的な TCP 接続を開くため、L4 ロードバランサーは複数の mongot インスタンスにクエリを分散できません。すべてのトラフィックはその 1 つの接続を介してフローします。L7 ロードバランサーはHTTP/2 と gRPC を理解しているため、クエリカーソルの実行中は各ストリームを単一の mongot に固定しながら、個々の gRPC ストリームを mongot ポッドに分散することができます。

Kubernetes演算子 の有無にかかわらず、検索配置アーキテクチャに大きな違いはありません。Kubernetes Operator は、特にデータベースもKubernetes Operator によって管理されている場合に、完全に機能する検索ノードを配置するために必要な手順を簡素化します。

配置するには、MongoDBSearch カスタム リソース(CR)を適用します。これをKubernetes Operator が取得して mongot ポッドを取得して配置を開始し、spec で指定された永続ストレージをリクエストします。Kubernetes Operator を通じて配置されたMongoDB Search とベクトル検索 は、同じKubernetes Operator によって配置されたMongoDBレプリカセットまたはシャーディングされたクラスター、または完全に独立したKubernetesの外部MongoDBデプロイ(レプリカセットまたはシャーディングされたクラスター)を対象にすることができます。使用するように mongot を配置して構成する方法については、以下をご覧ください。

でMongoDB Search とベクトル検索 を使用するには、次の手順に従います。

  • MongoDB Community を配置するには、 Kubernetes演算子 を使用して、完全に機能するMongoDB 8.2 以降のレプリカセットまたはシャーディングされたクラスターがKubernetesクラスター内に配置されている必要があります。

  • MongoDB Enterprise配置では、次のいずれかの方法で、完全に機能するMongoDB 8.2 以降のレプリカセットまたはシャーディングされたクラスターが配置されている必要があります。

    • Kubernetes演算子を使用するKubernetesクラスター内

    • Kubernetesクラスターの外部

  • Cloud ManagerまたはMongoDB Ops Manager のインスタンス

始める前に、以下の点を考慮してください。

次の表は、 Kubernetes 演算子が自動的に実行する構成タスクと、 KubernetesにMongoDB Search とベクトル検索を正常に配置するし、 KubernetesのMongoDBレプリカセットまたはシャーディングされたクラスターまたは 外部MongoDB配置に接続するために実行する必要があるアクションを示しています。

タスク
(Inside Kubernetes)
Performed by
(External MongoDB)
Performed by

Kubernetes内でのMongoDB Ops Managerの配置

Kubernetes 演算子

Kubernetes 演算子

Kubernetes の外部でのCloud ManagerまたはMongoDB Ops Managerの配置

あなたの

あなたの

MongoDBレプリカセットまたはシャーディングされたクラスターの配置

Kubernetes 演算子

あなたの

MongoDBSearch カスタムリソースを作成する

あなたの

あなたの

MongoDB配置への接続文字列の提供

Kubernetes 演算子

あなたの

mongot 構成 YAML を作成

Kubernetes 演算子

Kubernetes 演算子

mongod プロセスで必要なレプリカセットパラメータを設定する

Kubernetes 演算子

あなたの

searchCoordinator ロールを持つ mongot のユーザーを作成

Kubernetes Operator と MongoDBUserリソースを適用することで

あなたの

クエリ検索に必要な権限を持つユーザーでMongoDBレプリカセットを構成する

あなたの

あなたの

MongoDB Search およびベクトル検索インデックスの作成

あなたの

あなたの

mongodノードからの接続に対して検索ポッドまたはロードバランサーを外部で公開します

不要

あなたの

mongot ノードからの接続のために mongod ポッドを外部で公開

不要

あなたの

マネージド ロードバランサーの構成(spec.replicas1 より大きい場合)

Kubernetes 演算子

Kubernetes 演算子

非マネージド ロードバランサーの構成(spec.replicas1 より大きい場合)

あなたの

あなたの

シャードごとの TLS 証明書のプロビジョニング(TLS を使用したシャーディングされたクラスター)

あなたの

あなたの

ロードバランサーを外部で公開する(外部MongoDB + マネージド DB)

不要

あなたの

次の画像は、mongot プロセスのセキュリティ構成を示しています。MongoDBサーバーがKubernetesクラスター内にある場合、 Kubernetes Operator はMongoDB Search とベクトル検索の キーファイル認証 を自動的に設定します。MongoDBサーバーが外部の場合は、レプリカセットのキーファイル認証情報を含むkubernetes secretを作成し、MongoDBSearch CRで参照する必要があります。

検索用のキーファイル認証と TLS 構成を示す図。
クリックして拡大します

mongot プロセスは、mTLS を使用して mongod 接続を認証します。TLS を有効にすると、mongot プロセスは認証のクライアント証明書としてMongoDBサーバーの TLS 証明書を使用します。この証明書は、mongot が構成されている CA 証明書に対して検証されます。認証を正しく機能させるには、TLS を有効にして、mongotmongod の両方を構成する必要があります。

同じKubernetesクラスター内のMongoDBリソースをインデックスように構成された場合、MongoDB と MongoDBSearch リソースの両方が TLS 用に構成されている場合、 Kubernetes Operator は mongod CA 証明書を mongot に自動的に伝達し、検索クエリ接続で mTLS を有効にします。MongoDBレプリカセットがKubernetesの外部に配置されている場合は、レプリカセットのCA証明書を含むKubernetes secretを作成し、MongoDBSearch.spec.source.external.tls.caフィールドで参照、検索クエリリクエストでmTLS認証を有効にする必要があります。

MongoDBSearch は、TLS を使用して転送中のデータと認証情報を保護できます。インデックス マネジメント コマンドと検索クエリの場合は、spec.security.tlsフィールドを設定し、TLS 証明書を提供します。このフィールドを空のオブジェクト({})に設定すると、デフォルト設定でTLSを有効にできます。

バージョン 1.8.0 から非推奨 :spec.security.tls.certificateKeySecretRef は非推奨です。レプリカセットの配置の場合、 Kubernetes 演算子は引き続き certificateKeySecretRef をサポートしていますが、spec.security.tls.certsSecretPrefix に移行する必要があります。シャーディングされたクラスターの配置では、 Kubernetes 演算子がシャードごとに個別の mongotサーバー証明書シークレットを読み取るため、certificateKeySecretRef は使用できません。

spec.security.tls.certsSecretPrefix は、任意フィールドです。これを指定すると、 Kubernetes Operator は読み込むすべての証明書シークレット名に <certsSecretPrefix>- を先頭に追加します。Kubernetes Operator は、次の証明書シークレットを読み取ります。

クラスター トポロジー
mongot 証明書

レプリカセット

[<certsSecretPrefix>-]<name>-search-cert

シャーディングされたクラスター

[<certsSecretPrefix>-]<name>-search-0-<shardName>-cert (per shard)

spec.loadBalancer.managed を設定すると、ロードバランサーのクライアント証明書は [<certsSecretPrefix>-]<name>-search-lb-0-client-cert になります。次の表は、ロードバランサーのサーバー証明書を示しています。

クラスター トポロジー
証明書

レプリカセット

[<certsSecretPrefix>-]<name>-search-lb-0-cert

シャーディングされたクラスター

[<certsSecretPrefix>-]<name>-search-lb-0-<shardName>-cert

TLS 証明書は、 MongoDBレプリカセットが使用する CA 証明書を発行したのと同じ CA によって発行され、署名されている必要があります。

MongoDBSearch と MongoDB の両方がKubernetes Operator によって配置されると、基礎の mongotmongod の構成は大部分がKubernetes Operator 自体によって処理されます。MongoDBレプリカセットをKubernetesクラスターの外部に配置する場合、次のようにします。

  • .spec.source.external.tls フィールドには、mongod の構成に使用したのと同じ CA 証明書を含むKubernetes Secret を入力する必要があります。

  • searchTLSMode パラメータは、mongod 構成で requireTLS に設定する必要があります。

ロードバランサーがない場合、mongod は mTLS を使用して mongot に直接接続します。mongod は独自のクライアント証明書を提示し、mongot は信頼できる CA に対してそれを検証します。

マネージド ロードバランサー(spec.loadBalancer.managed)を構成すると、Envy プロキシは mongod からの mTLS 接続を終了し、mongot への新しい mTLS 接続を確立します。ロードバランサーは接続を終了して再確立するため、mongot に接続するときに、元の mongod 証明書ではなく、独自のクライアント証明書が使用されます。mongot CA は、ロード バランサーのクライアント証明書を発行した認証局を信頼する必要があります。Kubernetes 演算子 は、Envy TLS 構成を自動的に管理します。次の証明書が必要です。

  • mongod が接続する Envy プロキシのサーバー証明書。ロードバランサーはこの証明書を使用して受信 mTLS 接続を終了します。

  • Envy プロキシのクライアント証明書。アップストリーム mTLS 接続を確立するときにロードバランサーがmongot に提示するもの。

spec.security.tls.certsSecretPrefix が定義する命名規則に従って、これらの証明書をKubernetes Secret としてプロビジョニングします。完全な命名パターンについては、 MongoDB Search とベクトル検索の設定 を参照してください。

項目一覧