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

外部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 ロールを持つユーザーを作成します。

MongoDBバージョン 8.2 以降を使用する場合は、このセクションの手順を完了します。

ユーザーを作成し、そのユーザーに組み込みsearchCoordinator ロールを割り当てるには、 Cloud Managerまたは Ops Manager UIまたは を使用して、次の手順を実行します。mongosh

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

  2. [Security]タブにGo、[Users] をクリックします。

2
3
Username

search-sync-sourceと入力します。

Password

強力で安全なパスワードを設定します。

Authentication Database

adminデータベースを選択します。

4

Assign Roles セクションで、adminデータベースの ドロップダウンから組み込み searchCoordinator ロールを選択します。

5

mongoshで、次のコマンドを実行します。

1
use admin;
2
db.createUser({
user: "search-sync-source",
pwd: "<PASSWORD>", // Replace with your actual password
roles: [
{ role: "searchCoordinator", db: "admin" }
]
});

8.2 より前のバージョンのMongoDBを使用している場合は、このセクションの手順を完了します。

ユーザーを作成し、そのユーザーに組み込みsearchCoordinator ロールを割り当てるには、 Cloud Managerまたは Ops Manager UIまたは を使用して、次の手順を実行します。mongosh

権限を持つ searchCoordinator ロールを作成し、その後に searchCoordinator ロールを持つユーザーを追加するには、Cloud Manager または Ops Manager UI で次の手順を実行します。

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

  2. Securityタブの下にある Roles サブタブにGo。

  3. [Add New Custom Role] をクリックします。

2
3

Role Inheritance セクションで、adminデータベースから次の 3 つのロールを追加します。

  • clusterMonitor

  • directShardOperations

  • readAnyDatabase

4
  1. Privilegesセクションで、 Add Privilegeをクリックします。

  2. Resource には、データベースの __mdb_internal_search を入力します。

    コレクションフィールドには何も入力しないでください。

  3. Actions の下に、次のアクションを追加します。

    • changeStream

    • cleanupStructuredEncryptionData, compactStructuredEncryptionData

    • collStats

    • convertToCapped

    • createCollection, dropCollection, listCollections, renameCollectionSameDB

    • createIndex, dropIndex, listIndexes

    • createSearchIndexes, dropSearchIndex, listSearchIndexes, updateSearchIndex

    • dbHash, dbStats

    • find, insert, remove, update

    • killCursors

    • planCacheRead

5
  1. [Add Privilege] をクリックします。

  2. Resource の場合、リソースタイプを cluster に切り替えます。

  3. Action の場合は bypassDefaultMaxTimeMS を選択します。

6
7

[Security]タブにGo、[Users をクリックします。

8
9
Username

search-sync-sourceと入力します。

Password

強力で安全なパスワードを設定します。

Authentication Database

adminデータベースを選択します。

10

Assign Roles セクションで、adminデータベースの ドロップダウンから組み込み searchCoordinator ロールを選択します。

mongoshで、次のコマンドを実行します。

1
use admin;
2
db.createRole({
role: "searchCoordinator",
privileges: [
{
resource: { db: "__mdb_internal_search", collection: "" },
actions: [
"changeStream", "cleanupStructuredEncryptionData", "collStats",
"compactStructuredEncryptionData", "convertToCapped", "createCollection",
"createIndex", "createSearchIndexes", "dbHash", "dbStats",
"dropCollection", "dropIndex", "dropSearchIndex", "find", "insert",
"killCursors", "listCollections", "listIndexes", "listSearchIndexes",
"planCacheRead", "remove", "renameCollectionSameDB", "update", "updateSearchIndex"
]
},
{
resource: { cluster: true },
actions: [ "bypassDefaultMaxTimeMS" ]
}
],
roles: [
{ role: "clusterMonitor", db: "admin" },
{ role: "directShardOperations", db: "admin" },
{ role: "readAnyDatabase", db: "admin" }
]
});
3
db.createUser({
user: "search-sync-source",
pwd: "<PASSWORD>", // Replace with your actual password
roles: [
{ role: "searchCoordinator", db: "admin" }
]
});

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

1

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

1export K8S_CTX="<your kubernetes context here>"
2
3export MDB_NS="mongodb"
4
5export MDB_VERSION="8.0.10"
6
7export MDB_ADMIN_USER_PASSWORD="admin-user-password-CHANGE-ME"
8export MDB_USER_PASSWORD="mdb-user-password-CHANGE-ME"
9export MDB_SEARCH_SYNC_USER_PASSWORD="search-sync-user-password-CHANGE-ME"
10
11export MDB_SEARCH_HOSTNAME="mdbs-search"
12
13# External MongoDB replica set members - REPLACE THESE VALUES with your actual external MongoDB hosts
14# In production, replace with your actual external MongoDB replica set members
15export MDB_EXTERNAL_HOST_0="mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
16export MDB_EXTERNAL_HOST_1="mdbc-rs-1.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
17export MDB_EXTERNAL_HOST_2="mdbc-rs-2.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
18
19# REPLACE with your external MongoDB keyfile secret name
20export MDB_EXTERNAL_KEYFILE_SECRET_NAME="mdbc-rs-keyfile"
21
22# REPLACE with the actual keyfile content from your external MongoDB replica set
23# For testing, this will be automatically generated by the MongoDB Community resource
24export MDB_EXTERNAL_KEYFILE_CONTENT="your-mongodb-keyfile-content-CHANGE-ME"
25
26# REPLACE with your actual external MongoDB replica set name
27export MDB_EXTERNAL_REPLICA_SET_NAME="mdbc-rs"
28
29export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes"
30export OPERATOR_ADDITIONAL_HELM_VALUES=""
31
32export 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リポジトリを追加します。

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

1helm repo add mongodb https://mongodb.github.io/helm-charts
2helm repo update mongodb
3helm search repo mongodb/mongodb-kubernetes
3

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

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

1helm upgrade --install --debug --kube-context "${K8S_CTX}" \
2 --create-namespace \
3 --namespace="${MDB_NS}" \
4 mongodb-kubernetes \
5 ${OPERATOR_ADDITIONAL_HELM_VALUES:+--set ${OPERATOR_ADDITIONAL_HELM_VALUES}} \
6 "${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 とベクトル検索を配置する予定の名前空間で、以下をコピーして貼り付け、実行します。

1kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \
2 create secret generic mdb-admin-user-password \
3 --from-literal=password="${MDB_ADMIN_USER_PASSWORD}"
4
5kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \
6 create secret generic mdbc-rs-search-sync-source-password \
7 --from-literal=password="${MDB_SEARCH_SYNC_USER_PASSWORD}"
8
9kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \
10 create secret generic mdb-user-password \
11 --from-literal=password="${MDB_USER_PASSWORD}"
2

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

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

1kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \
2 create secret generic "${MDB_EXTERNAL_KEYFILE_SECRET_NAME}" \
3 --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 とベクトル検索の設定を参照してください。

    1kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF
    2apiVersion: mongodb.com/v1
    3kind: MongoDBSearch
    4metadata:
    5 name: mdbs
    6spec:
    7 source:
    8 external:
    9 hostAndPorts:
    10 - ${MDB_EXTERNAL_HOST_0}
    11 - ${MDB_EXTERNAL_HOST_1}
    12 - ${MDB_EXTERNAL_HOST_2}
    13 keyfileSecretRef:
    14 name: ${MDB_EXTERNAL_KEYFILE_SECRET_NAME}
    15 key: keyfile
    16 username: search-sync-source
    17 passwordSecretRef:
    18 name: mdbc-rs-search-sync-source-password
    19 key: password
    20 resourceRequirements:
    21 limits:
    22 cpu: "3"
    23 memory: 5Gi
    24 requests:
    25 cpu: "2"
    26 memory: 3Gi
    27EOF
  2. MongoDBSearchリソースの配置が完了するまで待ちます。

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

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

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

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

1kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<YAML
2apiVersion: v1
3kind: Service
4metadata:
5 name: ${MDB_SEARCH_HOSTNAME}
6spec:
7 type: LoadBalancer
8 selector:
9 app: mdbs-search-svc
10 ports:
11 - name: mongot
12 port: 27027
13 targetPort: 27027
14YAML
15
16echo "Waiting for external IP to be assigned to service ${MDB_SEARCH_HOSTNAME}..."
17TIMEOUT=120 # 2 minutes timeout
18ELAPSED=0
19while [ ${ELAPSED} -lt ${TIMEOUT} ]; do
20 EXTERNAL_IP=$(kubectl get service "${MDB_SEARCH_HOSTNAME}" --context "${K8S_CTX}" -n "${MDB_NS}" -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null)
21 if [ -n "${EXTERNAL_IP}" ] && [ "${EXTERNAL_IP}" != "null" ]; then
22 echo "External IP assigned: ${EXTERNAL_IP}"
23 break
24 fi
25 echo "Still waiting for external IP assignment... (${ELAPSED}s/${TIMEOUT}s)"
26 sleep 5
27 ELAPSED=$((ELAPSED + 5))
28done
29
30if [ ${ELAPSED} -ge ${TIMEOUT} ]; then
31 echo "ERROR: Timeout reached (${TIMEOUT}s) while waiting for external IP assignment"
32 echo "LoadBalancer service may take longer to provision or there may be an issue"
33 exit 1
34fi
5

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

1echo; echo "MongoDBSearch resource"
2kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbs/mdbs
3echo; echo "Search pods running in cluster ${K8S_CTX}"
4kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods -l app=mdbs-search-svc
5echo; echo "All pods in namespace ${MDB_NS}"
6kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods

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