对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

安装和使用MongoDB Search 和 Vector Search With external MongoDB Enterprise Edition

您可以使用Kubernetes 操作符 在Kubernetes集群上部署MongoDB 搜索和向量搜索,与外部MongoDB Enterprise Edition v8.2.0 或更高版本的服务器一起运行。此过程演示如何在Kubernetes集群中部署和配置 mongot进程,以使用新的或现有的外部副本集部署。 本教程演示如何配置启用TLS的安全部署。您必须提供 TLS 证书:

  • MongoDBSearch 服务的服务器证书和密钥。

  • 外部MongoDB数据库的公共 CA 证书。

要部署MongoDB Search 和 Vector Search,您必须具备以下条件:

  • 一个运行的Kubernetes集群,且本地可用 kubeconfig。

  • Kubernetes命令行工具 kubectl,配置为与集群通信。

  • Helm( Kubernetes的包管理器),用于安装Kubernetes Operator。

  • Bash v5.1 或更高版本,用于运行本教程中的命令。

  • 运行8.2 或更高版本的MongoDB Enterprise Edition副本集,用于存储数据。

    要学习;了解有关部署MongoDB Enterprise 的更多信息,请参阅部署和配置MongoDB数据库资源。

  • 运行的MongoDB Cloud Manager或MongoDB Ops Manager ,用于管理MongoDB任务。

  • 外部数据库 TLS

    您的外部MongoDB Enterprise部署必须配置为使用并要求 TLS 连接。

  • 外部数据库 CA文件

    您必须拥有用于签署外部MongoDB部署服务器证书的公共证书颁发机构 (CA) 证书文件(示例external-ca.crt)。您在本地需要此文件。

  • Search Service 证书文件

    对于 MongoDBSearch 服务,您必须拥有有效的 TLS 服务器证书和私钥(示例 search-service.crt、search-service.key)。该证书必须对您用于访问服务的主机名称有效(示例,mdbs-search.example.com)。

在使用Kubernetes Operator 安装MongoDB Search 和 Vector Search 之前,您必须执行以下操作:

登录到Cloud Manager或MongoDB Ops Manager用户界面并执行以下步骤,为MongoDB Search 和 Vector 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,在字段中逐个添加以下参数:

    Parameter
    值

    mongotHost

    您的搜索主机名和端口。示例:search-node1.example.com:27017。

    searchIndexManagementHostAndPort

    您的搜索主机名和端口。示例:search-node1.example.com:27017。

    skipAuthenticationToSearchIndexManagementServer

    false

    searchTLSMode

    您配置的 TLS模式。示例,如果 mongot进程配置为接受 TLS 连接,则为 preferTLS。

    useGrpcForSearch

    true

3
  1. 单击 Review & Deploy 按钮。

  2. 查看并确认以应用更改。

    Cloud Manager或MongoDB Ops Manager对副本集执行滚动重启以应用新配置。

You must create a user with the searchCoordinator role. In MongoDB versions 8.2 and later, the searchCoordinator is a built-in role. You must create a user and assign the role to the user.

To create the user and assign the user the built-in searchCoordinator role, complete the following steps by using either the Cloud Manager or Ops Manager UI or the mongosh:

1
  1. 登录Cloud Manager或MongoDB Ops Manager用户界面。

  2. GoSecurity标签页并单击 Users。

2
3
Username

输入 search-sync-source。

Password

设置安全强度高的密码。

Authentication Database

选择 admin数据库。

4

在 Assign Roles 部分,从 admin数据库的下拉列表中选择内置searchCoordinator角色。

5

准备环境,以便在终端中运行本教程中的示例代码。

1

要设立环境变量以供本过程的后续步骤使用,请复制以下内容,设立环境变量的值,然后在终端中运行命令:

1export K8S_CTX="<your kubernetes context here>"
2
3export MDB_NS="mongodb"
4
5export MDB_VERSION="8.2.0"
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_TLS_CA_SECRET_NAME="ca"
12export MDB_SEARCH_TLS_SECRET_NAME="mdbs-search-tls"
13
14export MDB_SEARCH_SERVICE_NAME="mdbs-search"
15export MDB_SEARCH_HOSTNAME="mdbs-search.example.com"
16
17# External MongoDB replica set members - REPLACE THESE VALUES with your actual external MongoDB hosts
18# In production, replace with your actual external MongoDB replica set members
19export MDB_EXTERNAL_HOST_0="mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
20export MDB_EXTERNAL_HOST_1="mdbc-rs-1.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
21export MDB_EXTERNAL_HOST_2="mdbc-rs-2.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
22
23# REPLACE with your actual external MongoDB replica set name
24export MDB_EXTERNAL_REPLICA_SET_NAME="mdbc-rs"
25
26export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes"
27export OPERATOR_ADDITIONAL_HELM_VALUES=""
28
29export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_EXTERNAL_HOST_0}/?replicaSet=${MDB_EXTERNAL_REPLICA_SET_NAME}&tls=true&tlsCAFile=/tls/ca.crt"

请注意,这些环境变量仅在当前终端会话中可用,并且需要在任何新的终端会话中重新设立。

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 操作符监视 MongoDB、MongoDBOpsManager 和 MongoDBSearch 自定义资源,并管理 MongoDB 部署的生命周期。如果您已经安装了MongoDB Controllers for Kubernetes 操作符,请跳过此步骤。否则,请从您在上一步中添加的Helm存储库安装MongoDB Controllers for Kubernetes 操作符。

要在 mongodb命名空间中安装MongoDB Controllers for Kubernetes Operator,请复制、粘贴并运行以下命令:

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}"

前面的命令会在 mongodb 命名空间中安装 Kubernetes 操作符;如果该命名空间不存在,则会创建该命名空间。安装后, Kubernetes 操作符 会监视 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 Pod 中。

要创建密钥,请在计划部署MongoDB Search 和 Vector Search 的命名空间中复制、粘贴并运行以下命令:

1# Create admin user secret
2kubectl create secret generic mdb-admin-user-password \
3 --from-literal=password="${MDB_ADMIN_USER_PASSWORD}" \
4 --dry-run=client -o yaml | kubectl apply --context "${K8S_CTX}" --namespace "${MDB_NS}" -f -
5
6# Create search sync source user secret
7kubectl create secret generic "${MDB_RESOURCE_NAME}-search-sync-source-password" \
8 --from-literal=password="${MDB_SEARCH_SYNC_USER_PASSWORD}" \
9 --dry-run=client -o yaml | kubectl apply --context "${K8S_CTX}" --namespace "${MDB_NS}" -f -
10
11# Create regular user secret
12kubectl create secret generic mdb-user-password \
13 --from-literal=password="${MDB_USER_PASSWORD}" \
14 --dry-run=client -o yaml | kubectl apply --context "${K8S_CTX}" --namespace "${MDB_NS}" -f -
15
16echo "User secrets created."
2

您可以部署一个搜索节点实例,而无需任何负载均衡。要部署,请完成以下步骤:

  1. 创建名为 mdbs 的 MongoDBSearch 自定义资源。

    此资源包含以下内容:

    spec.source.external.hostAndPorts

    外部MongoDB副本集节点列表。

    spec.source.username

    搜索同步用户用户名。

    spec.source.passwordSecretRef

    搜索同步用户密码。

    spec.source.external.tls.ca.name

    将 MongoDBSearch Pod 配置为信任外部数据库。它指向kubernetes secret,其中包含外部MongoDB的公共 CA 证书。

    spec.security.tls.certificateKeySecretRef.name

    保护 MongoDBSearch 服务。它指向kubernetes secret,其中包含 MongoDBSearch Pod 将向传入客户端提供的 TLS 服务器证书和私钥。

    spec.resourceRequirements

    搜索容器的 CPU 和内存资源要求。

    要学习;了解有关此自定义资源中设置的更多信息,请参阅MongoDB搜索和向量搜索设置。

    1kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF
    2apiVersion: mongodb.com/v1
    3kind: MongoDBSearch
    4metadata:
    5 name: ${MDB_SEARCH_RESOURCE_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 tls:
    14 ca:
    15 name: ${MDB_TLS_CA_SECRET_NAME}
    16 username: search-sync-source
    17 passwordSecretRef:
    18 name: ${MDB_RESOURCE_NAME}-search-sync-source-password
    19 key: password
    20 security:
    21 tls:
    22 certificateKeySecretRef:
    23 name: ${MDB_SEARCH_TLS_SECRET_NAME}
    24 resourceRequirements:
    25 limits:
    26 cpu: "3"
    27 memory: 5Gi
    28 requests:
    29 cpu: "2"
    30 memory: 3Gi
    31EOF
  2. 等待 MongoDBSearch资源部署完成。

    当您应用MongoDBSearch 自定义资源时, Kubernetes 操作符开始部署搜索节点 (pod)。此步骤会暂停执行,直到 mdbs 资源的状态阶段为 Running,这表示MongoDB 搜索 StatefulSet 处于可操作状态。

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

启用外部MongoDB实例能够连接到搜索服务,您必须为MongoDB Search 和 Vector Search 配置外部访问权限。您可以创建一个 LoadBalancer 服务,在Kubernetes集群外部公开搜索Pod。

以下服务在端口 27028 上公开 MongoDBSearch 服务,其外部IP或主机名可以从 Kubernetes 集群外部访问。

1kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<YAML
2apiVersion: v1
3kind: Service
4metadata:
5 name: ${MDB_SEARCH_SERVICE_NAME}
6spec:
7 type: LoadBalancer
8 selector:
9 app: ${MDB_SEARCH_RESOURCE_NAME:-mdbs}-search-svc
10 ports:
11 - name: mongot
12 port: 27028
13 targetPort: 27028
14YAML
15
16echo "Waiting for external IP to be assigned to service ${MDB_SEARCH_SERVICE_NAME}..."
17TIMEOUT=120 # 2 minutes timeout
18ELAPSED=0
19while [ ${ELAPSED} -lt ${TIMEOUT} ]; do
20 EXTERNAL_IP=$(kubectl get service "${MDB_SEARCH_SERVICE_NAME}" --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
4

查看MongoDB副本集成员、 Kubernetes Operator 的MongoDB控制器以及搜索节点的命名空间Pod 中运行的所有 Pod。

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 和 Vector Search 以与外部MongoDB Enterprise Edition 一起使用,您可以将数据添加到MongoDB 集群,创建MongoDB Search 和 Vector Search 索引,并对数据运行查询。要学习;了解更多信息,请参阅MongoDB搜索和向量搜索设置。