AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

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レプリカセットと厳密に結合されているため、複数のデータベースやレプリカセットで共有することはできません。つまり、レプリカセット配置には専用の検索ノードがあります。

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

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

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

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

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

MongoDB Enterprise配置でMongoDB Search とベクトル検索を活用するには、次のものが必要です。

  • 完全に機能するMongoDB 8.0.14+次のいずれかの方法で配置されたレプリカセット。

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

    • Kubernetesクラスターの外部

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

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

ストレージ、ネットワーク、リソース、Kubernetesのバージョンと互換性、名前空間とRBAC、およびクラスターDNS要件について説明します。

  • |k8s| で永続的なボリュームを作成するには、動作する StorageClass が必要です。クラスター。これを行わない場合、PersistentVolumeClaims は保留中のままになり、MongoDB には耐久性があるストレージが存在しない可能性があります。

  • 正しく構成されたクラスターネットワークが必要です。ClusterIP、NodePort、または LoadBalancer などのサービスはトラフィックをルーティングできる必要があります。外部クライアントがアクセスする必要がある場合は、 Ingress またはロードバランサーを設定します。

  • データベースと検索ノードには、MongoDBデータベースとMongoDB Search およびベクトル検索のワークロードがリソースを集中的に消費するため、十分なCPU、メモリ、ディスク領域が割り当てられている必要があります。エビクションやスロットリングを避けるために、Ped 仕様で リクエストと制限 を使用することをお勧めします。

  • Kubernetesのバージョンは、使用するMongoDB演算子またはHelmチャートでサポートされている必要があります。一部の CRD または API はバージョン間で異なります。詳細については、Kubernetes演算子互換性のためのMongoDBパラメーター を参照してください。

  • 必要な RBAC ロールとロール バインディングは、 Kubernetes Operator と ポッド内で実行中プロセスがリソースを管理できるようにする必要があります。

MongoDB 検索する とベクトル検索 を配置する際の制限について説明します。

次のアーキテクチャではMongoDB Searchとベクトル検索を配置できません。

  • IBM Power (ppc64le)

  • IBM Z (s390x)

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

タスク
(Kubernetes 内)
実行者
(外部MongoDB)
によって実行されます

Kubernetes内でのMongoDB Ops Managerの配置

Kubernetes 演算子
Kubernetes 演算子

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

あなたの

あなたの

MongoDBレプリカセットの配置

Kubernetes 演算子

あなたの

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

あなたの

あなたの

MongoDBレプリカセットへの接続文字列の指定

Kubernetes 演算子

あなたの

mongot 構成 YAML を作成

Kubernetes 演算子
Kubernetes 演算子

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

Kubernetes 演算子

あなたの

MongoDBバージョン 8.2 未満の多角形 searchCoordinator ロール

Kubernetes 演算子

あなたの

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

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

あなたの

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

あなたの

あなたの

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

あなたの

あなたの

mongodノードから接続するために検索ポッドを外部で公開します

不要

あなたの

mongot ノードからの接続用にmongodポッドを外部で公開します

不要

あなたの

Kubernetesクラスターで実行中mongodと mongot プロセスのアーキテクチャ。

次の図は、 KubernetesクラスターにMongoDB Enterpriseレプリカセット単一のMongoDB Search およびベクトル検索インスタンスの配置アーキテクチャを示しています。

KubernetesクラスターでのMongoDB EnterpriseによるMongoDB Search とベクトル検索の配置アーキテクチャを示す図。
クリックして拡大します

次の図は、 MongoDB Enterprise Editionレプリカセットを持つMongoDB Search およびベクトル検索用のKubernetes Operator がKubernetesクラスターに配置するコンポーネントを示しています。

演算子を使用した、 MongoDB Search およびベクトル検索配置を持つMongoDB Enterpriseレプリカセットに含まれるコンポーネントを示す図。
クリックして拡大します

mongot プロセスと mongod プロセスの両方がKubernetesクラスター内に配置されている場合、 Kubernetes Operator は両方のプロセスの構成を自動的に実行します。具体的には、 Kubernetes演算子は次の操作を実行します。

  1. を使用して、または命名規則によって、 と同じ名前のMongoDBMongoDBSearch spec.source.mongodbResourceRefCR を検索して、 が参照するMongoDB CRMongoDBSearch を検索します。

  2. YAMLファイルに mongot 構成を生成し、それを <MongoDBSearch.metadata.name>-search-config という名前の構成マップに保存します。

    コンフィギュレーション マップは検索ポッドによってマウントされ、YAML 構成はスタートアップ時に mongot のプロセスによって使用されます。生成された YAML には、レプリカセットへの接続方法、TLS 設定などに関するすべての情報が含まれています。

  3. CR の と 設定に従って構成されたストレージとリソースの要件を持つ、 という名前のMongoDB Search とベクトル検索ステートメントセットを配置します。<MongoDBSearch.metadata.name>-searchspec.persistencespec.resourceRequirements

  4. mongot ホストのホスト名やポート番号など、必要な setParameter オプションを追加して、すべての mongod プロセスの構成を更新します。必要な setParameter オプション( MongoDBレプリカセットノードのホスト名とポート番号など)。

  5. v8.2 より前のMongoDBバージョンの場合、 は mongot プロセスに必要なすべての権限を持つ searchCoordinatorカスタムロールを作成します。MongoDB 8.2 以降では、searchCoordinator は組み込みロールです。

次のアクションを実行する必要があります。

  1. MongoDBUser カスタムリソースを使用してレプリカセットにユーザーを作成します。mongot は、このユーザーの認証情報を使用してレプリカセットに接続し、データをソースします。

    • ユーザー名は任意ですが(例では search-sync-source-user を使用しています)、searchCoordinator ロールが設定されている必要があります。

    • このユーザーのユーザー名とパスワードは、それぞれ MongoDBSearch.spec.source.usernameMongoDBSearch.spec.source.passwordSecretRef で渡されます。

      パスワードシークレットは、MongoDBUser 仕様(MongoDBUser.spec.source.passwordSecretKeyRef)の作成に使用されたものと同じシークレットを参照できます。

  2. MongoDBSearch カスタムリソースを構成して適用します。

mongot プロセスの CR 設定の詳細については、 MongoDB Search とベクトル検索設定 を参照してください。

Kubernetesクラスターの外部で実行中mongodプロセスを使用するためにKubernetesクラスターに配置された mongot プロセスのアーキテクチャ。

次の図は、外部MongoDB Enterprise Editionレプリカセットを使用するKubernetesクラスターでのMongoDB Search とベクトル検索の配置アーキテクチャを示しています。

KubernetesクラスターでのMongoDB EnterpriseによるMongoDB Search とベクトル検索の配置アーキテクチャを示す図。
クリックして拡大します

次の図は、 Kubernetes Operator がMongoDB Search およびベクトル検索用のKubernetesクラスターに配置するコンポーネントを示しています。

演算子を使用したMongoDB Search とMongoDB Enterpriseレプリカセットの配置に含まれるコンポーネントを示す図。
クリックして拡大します

Kubernetesの外部でMongoDBデプロイている場合にMongoDB Search とベクトル検索を活用するには、 Kubernetes演算子を使用して mongot を配置し、いくつかの手順を手動で実行する必要があります。Kubernetes Operator は、検索ポッドの構成を処理します。ただし、 MongoDBレプリカセットがKubernetesの外部にある場合は、 MongoDBノードとネットワークを再構成する必要があります。

以下の手動設定はユーザーが管理します。

  1. 外部レプリカセット内のすべての mongod プロセスで setParameter を使用して、次のパラメータを構成します。構成する際、<search-service-hostname>:27027MongoDBSearch サービスの実際の解決可能なホスト名とポートに置き換えます。

    setParameter:
    mongotHost: "<search-service-hostname>:27027"
    searchIndexManagementHostAndPort: "<search-service-hostname>:27027"
    skipAuthenticationToSearchIndexManagementServer: false
    searchTLSMode: "disabled" # or "requireTLS" for TLS deployments
  2. ((<)8.2 未満のMongoDBバージョンのみ)必要なすべての権限を持つ searchCoordinatorカスタムロールを作成します。

    MongoDB 8.2+ では、searchCoordinator は組み込みロールであるため、この手順をスキップできます。

  3. 検索同期プロセス用の外部レプリカセットにユーザーを作成します。このユーザーには searchCoordinator ロールが必要です。

    - userName: "search-sync-source"
    password: "<your-search-sync-password>"
    database: "admin"
    roles:
    - role: "searchCoordinator"
    db: "admin"
  1. 外部MongoDBホストを指すように を使用してMongoDBSearch CR を構成して適用します。spec.source.external

  2. 検索同期ユーザーのパスワード用にKubernetesシークレットを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
    name: search-sync-source-password
    stringData:
    password: "your-search-sync-password"
  3. 外部MongoDBレプリカセットで使用される キーファイル で指定されたキーと同じキーを含む キーファイル シークレット を作成します。

  4. ネットワークと DNS を設定して、外部MongoDBと検索ポッド間の双方向接続を確保します。外部MongoDB環境は検索サービスのホスト名(<search-service-hostname>)を解決できる必要があります。

外部の mongod プロセスに接続するための mongot プロセスの CR 設定の詳細については、MongoDB Search とベクトル検索の設定を参照してください。

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

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

mongod に接続する際、mongot は自分自身をデータベースユーザーとして認証します。MongoDB Search とベクトル検索を配置する場合は、データベースユーザーを作成する必要があります。Kubernetes Secret に保存されているユーザー認証情報を mongot に渡すには、MongoDBSearch CRspec.source.username フィールドと spec.source.passwordSecretRef フィールドに入力します。

mongodからの接続を受け入れる場合、mongot はMongoDBレプリカセットの内部認証と同様に、キーファイルを使用した内部認証を使用してリモートリクエストを認証します。同じKubernetesクラスターでMongoDBリソースをインデックスように構成すると、 Kubernetes Operator は MongoDBSearch のキーファイル認証を自動的に設定します。MongoDBレプリカセットがKubernetes の外部に配置されている場合は、レプリカセットのキーファイル認証情報を含むKubernetes Secret を作成し、MongoDBSearch.spec.source.external.keyfileSecretRefフィールドで参照必要があります。

MongoDBSearch は TLS を使用して、転送中のデータと認証情報を保護できます。インデックス管理コマンドと検索クエリでは、(空のオブジェクトであっても、{}spec.security.tls フィールドを指定し、 フィールドのKubernetes Secretspec.security.tls.certificateKeySecretRef で TLS 証明書を提供します。この TLS 証明書は、 MongoDBレプリカセットが使用する CA 証明書を発行したのと同じ CA によって発行され、署名されている必要があります。

MongoDBSearchMongoDB の両方がKubernetes Operator によって配置される場合、基礎の mongotmongod の構成は大部分がKubernetes Operator 自体によって処理されます。MongoDBレプリカセットがKubernetesの外部に配置される場合、.spec.source.external.tlsフィールドには、mongod が構成されているのと同じ CA 証明書を含むKubernetes Secret が入力され、mongod 構成自体で searchTLSMode パラメータが に設定されている必要があります。 requireTLS