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

外部MongoDB Enterprise Edition でのMongoDB Search およびベクトル検索 のインストールと使用

Kubernetes演算子 を使用して、 KubernetesクラスターにMongoDB Search とベクトル検索を配置し、外部MongoDB Enterprise Edition v8.0.10 以上のサーバーで実行できます。この手順では、 Kubernetesクラスターに mongot プロセスを配置して構成し、新規または既存の外部レプリカセット配置を使用する方法を示します。

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

  • ローカルで使用可能な kubeconfig を含む実行中のKubernetesクラスター。

  • Kubernetesコマンドライン ツール(kubectl)は、クラスターと通信するように構成されています。

  • Helm、Kubernetesのパッケージマネージャーである Helm は、 Kubernetes演算子をインストールします。

  • このチュートリアルのコマンドを実行中には、Batch v5.1 以上が必要です。

  • データの保存用にバージョン 8.0.10 以降を実行中MongoDB Enterprise Editionレプリカセット。

    MongoDB Enterprise の配置の詳細については、 MongoDBデータベース リソースの配置と構成 を参照してください。

  • MongoDBタスクを管理するための実行中のMongoDB Cloud ManagerまたはMongoDB Ops Manager 。

Kubernetes Operator を使用してMongoDB Search とベクトル検索をインストールする前に、次の操作を行う必要があります。

Cloud ManagerまたはMongoDB Ops Manager UIにログインし、次の手順を実行して、 MongoDB Search およびベクトル検索用のCloud ManagerまたはMongoDB Ops Managerを構成します。

1
  1. MongoDB Cloud ManagerまたはMongoDB Ops Managerにログインします。

  2. [Deployment] タブをクリックします。

  3. 変更するクラスターを選択します。

2
  1. Modify ボタンをクリックして、配置構成エディターを開きます。

  2. [Process Configuration] セクションの下の [Advanced Configuration Options] をクリックします。

  3. [Add Option ボタンをクリックし、ドロップダウンから [setParameter Startup Option] を選択します。

  4. 名前と値を追加した後、Add をクリックして、フィールドに次のパラメータを 1 つずつ追加します。

    Parameter
    値

    mongotHost

    検索ホスト名とポート。例: search-node1.example.com:27017。

    searchIndexManagementHostAndPort

    検索ホスト名とポート。例: search-node1.example.com:27017。

    skipAuthenticationToSearchIndexManagementServer

    false

    searchTLSMode

    構成された TLSモード。例、mongot プロセスが TLS 接続を受け入れるように構成されている場合は、preferTLS。

3
  1. Review & Deployボタンをクリックします。

  2. 変更を適用するには、確認して確認します。

    Cloud ManagerまたはMongoDB Ops Manager はレプリカセットのローリング再起動を実行して新しい構成を適用します。

searchCoordinator ロールを持つユーザーを作成する必要があります。MongoDBバージョン 8.2 以降では、searchCoordinator は組み込みロールです。ユーザーを作成し、そのユーザーにロールを割り当てる必要があります。MongoDB のバージョンが 8.2 および 8.0.10 以降より前のバージョンの場合、ユーザーを作成する前に、ロールを手動で作成し、特権を割り当てる必要があります。実行中いるMongoDBバージョンに対応するタブを選択して、searchCoordinator ロールを持つユーザーを作成します。

このチュートリアルのサンプルコードをターミナルで実行中ための環境を準備します。

1

この手順の後続のステップで使用する環境変数を設定するには、以下をコピーし、環境変数の値を設定してから、環境変数をロードします。

export K8S_CTX="<your kubernetes context here>" export MDB_NS="mongodb" export MDB_VERSION="8.0.10" export MDB_ADMIN_USER_PASSWORD="admin-user-password-CHANGE-ME"export MDB_USER_PASSWORD="mdb-user-password-CHANGE-ME"export MDB_SEARCH_SYNC_USER_PASSWORD="search-sync-user-password-CHANGE-ME" export MDB_SEARCH_HOSTNAME="mdbs-search" # External MongoDB replica set members - REPLACE THESE VALUES with your actual external MongoDB hosts# In production, replace with your actual external MongoDB replica set membersexport MDB_EXTERNAL_HOST_0="mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"export MDB_EXTERNAL_HOST_1="mdbc-rs-1.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"export MDB_EXTERNAL_HOST_2="mdbc-rs-2.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017" # REPLACE with your external MongoDB keyfile secret nameexport MDB_EXTERNAL_KEYFILE_SECRET_NAME="mdbc-rs-keyfile" # REPLACE with the actual keyfile content from your external MongoDB replica set# For testing, this will be automatically generated by the MongoDB Community resourceexport MDB_EXTERNAL_KEYFILE_CONTENT="your-mongodb-keyfile-content-CHANGE-ME" # REPLACE with your actual external MongoDB replica set nameexport MDB_EXTERNAL_REPLICA_SET_NAME="mdbc-rs" export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes"export OPERATOR_ADDITIONAL_HELM_VALUES="" export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_EXTERNAL_HOST_0}/?replicaSet=${MDB_EXTERNAL_REPLICA_SET_NAME}"
2

Helm は、 Kubernetes上のMongoDBインスタンスの配置と管理を自動化します。Kubernetes Operator 演算子をインストールするための Helmチャートを含む Helmリポジトリをすでに追加している場合は、この手順をスキップします。それ以外の場合は、 Helmリポジトリを追加します。

を追加、コピー、貼り付け、実行するには、次のコマンドを実行します。

helm repo add mongodb https://mongodb.github.io/helm-chartshelm repo update mongodbhelm search repo mongodb/mongodb-kubernetes
3

Kubernetes Operator は、MongoDB、MongoDBOpsManager、MongoDBSearch のカスタム リソースを監視し、 MongoDB配置のライフサイクルを管理します。MongoDB Controls for Kubernetes Operator をすでにインストールしている場合は、この手順をスキップします。それ以外の場合は、前の手順で追加したHelmリポジトリからMongoDB Controls for Kubernetes Operator をインストールします。

MongoDB Controls for Kubernetes Operator を mongodb名前空間にインストールするには、次のコマンドをコピー、貼り付け、実行します。

helm upgrade --install --debug --kube-context "${K8S_CTX}" \ --create-namespace \ --namespace="${MDB_NS}" \ mongodb-kubernetes \ ${OPERATOR_ADDITIONAL_HELM_VALUES:+--set ${OPERATOR_ADDITIONAL_HELM_VALUES}} \ "${OPERATOR_HELM_CHART}"

上記のコマンドは、 Kubernetes Operator を mongodb名前空間にインストールします。このコマンドは、まだ存在しない場合は作成します。インストール後、 Kubernetes Operator は MongoDBSearch カスタム リソースを監視し、 MongoDB Search とベクトル検索配置のライフサイクルを管理します。

1

mongot プロセスでは、検索インデックスを作成し、検索クエリを実行中ために外部MongoDBデプロイに接続するための認証情報が必要です。この手順では、次のKubernetesシークレットが作成されます。

  • mdb-admin-user-password - MongoDB管理者の認証情報。

  • mdb-user-password - 検索クエリを実行する権限を持つユーザーの認証情報。

  • mdbc-rs-search-sync-source-password - データを同期し、インデックスを管理するために mongot プロセスによって内部的に使用される専用検索ユーザーの認証情報。

Kubernetes Operator はこれらのシークレットをMongoDBポッドにマウントします。

シークレットを作成するには、 MongoDB Search とベクトル検索を配置する予定の名前空間で、以下をコピーして貼り付け、実行します。

kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ create secret generic mdb-admin-user-password \ --from-literal=password="${MDB_ADMIN_USER_PASSWORD}" kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ create secret generic mdbc-rs-search-sync-source-password \ --from-literal=password="${MDB_SEARCH_SYNC_USER_PASSWORD}" kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ create secret generic mdb-user-password \ --from-literal=password="${MDB_USER_PASSWORD}"
2

外部MongoDBからの接続を認証するために、mongot プロセスは外部MongoDBレプリカセットノードがレプリカセットノード間の内部認証に使用するのと同じキーファイルを使用します。

外部MongoDBから キーファイル コンテンツを含むKubernetesシークレットを作成するには、次のコマンドをコピーして貼り付け、実行します。

kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ create secret generic "${MDB_EXTERNAL_KEYFILE_SECRET_NAME}" \ --from-literal=keyfile="${MDB_EXTERNAL_KEYFILE_CONTENT}"
3

負荷分散なしで、検索ノードの 1 つのインスタンスを配置できます。配置するには、次の手順を実行します。

  1. mdbs という名前の MongoDBSearch カスタムリソースを作成します。

    このリソースには、次のものが含まれています。

    spec.source.external.hostAndPorts

    外部MongoDBレプリカセットノードのリスト。

    spec.source.external.keyfileSecretRef

    外部レプリカセットノードによって使用されるキーファイル シークレット。

    spec.source.username

    同期ユーザーユーザー名 を検索します。

    spec.source.passwordSecretRef

    同期ユーザーのパスワードを検索します。

    spec.resourceRequirements

    検索コンテナの CPU とメモリリソースの要件。

    このカスタムリソースの設定の詳細については、MongoDB Search とベクトル検索の設定を参照してください。

    kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOFapiVersion: mongodb.com/v1kind: MongoDBSearchmetadata: name: mdbsspec: source: external: hostAndPorts: - ${MDB_EXTERNAL_HOST_0} - ${MDB_EXTERNAL_HOST_1} - ${MDB_EXTERNAL_HOST_2} keyfileSecretRef: name: ${MDB_EXTERNAL_KEYFILE_SECRET_NAME} key: keyfile username: search-sync-source passwordSecretRef: name: mdbc-rs-search-sync-source-password key: password resourceRequirements: limits: cpu: "3" memory: 5Gi requests: cpu: "2" memory: 3GiEOF
  2. MongoDBSearchリソースの配置が完了するまで待ちます。

    MongoDBSearch カスタムリソースを適用すると、 Kubernetes演算子による検索ノード(ポッド)の配置が開始されます。このステップでは、mdbs リソースのステータス フェーズが Running になるまで実行を一時停止します。これはMongoDB Search ステートメントが操作可能であることを示します。

    echo "Waiting for MongoDBSearch resource to reach Running phase..."kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait \ --for=jsonpath='{.status.phase}'=Running mdbs/mdbs --timeout=300s
4

外部MongoDBインスタンスが検索サービスに接続できるようにするには、 MongoDB Search とベクトル検索の外部アクセスを構成する必要があります。検索ポッドをKubernetesクラスターの外部に公開する LoadBalancer サービスを作成できます。

このサービスは、 Kubernetesクラスターの外部からアクセスできる外部IPアドレスまたはホスト名を使用して、ポート 27027 の MongoDBSearch サービスを公開します。

kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<YAMLapiVersion: v1kind: Servicemetadata: name: ${MDB_SEARCH_HOSTNAME}spec: type: LoadBalancer selector: app: mdbs-search-svc ports: - name: mongot port: 27027 targetPort: 27027YAML echo "Waiting for external IP to be assigned to service ${MDB_SEARCH_HOSTNAME}..."TIMEOUT=120 # 2 minutes timeoutELAPSED=0while [ ${ELAPSED} -lt ${TIMEOUT} ]; do EXTERNAL_IP=$(kubectl get service "${MDB_SEARCH_HOSTNAME}" --context "${K8S_CTX}" -n "${MDB_NS}" -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null) if [ -n "${EXTERNAL_IP}" ] && [ "${EXTERNAL_IP}" != "null" ]; then echo "External IP assigned: ${EXTERNAL_IP}" break fi echo "Still waiting for external IP assignment... (${ELAPSED}s/${TIMEOUT}s)" sleep 5 ELAPSED=$((ELAPSED + 5))done if [ ${ELAPSED} -ge ${TIMEOUT} ]; then echo "ERROR: Timeout reached (${TIMEOUT}s) while waiting for external IP assignment" echo "LoadBalancer service may take longer to provision or there may be an issue" exit 1fi
5

MongoDBレプリカセットノード、 Kubernetes演算子用のMongoDBコントロール、および検索ノードの名前空間ポッド内のすべての実行中中のポッドを表示します。

echo; echo "MongoDBSearch resource"kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbs/mdbsecho; echo "Search pods running in cluster ${K8S_CTX}"kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods -l app=mdbs-search-svcecho; echo "All pods in namespace ${MDB_NS}"kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods

MongoDB Search とベクトル検索を正常に配置して外部のMongoDB Enterprise Edition で使用することができたら、 MongoDBクラスターにデータを追加し、 MongoDB Search とベクトル検索インデックスを作成し、データに対してクエリを実行できます。詳細については、 MongoDB Search とベクトル検索 の設定 を参照してください。