首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法连接到MongoDB:服务器选择错误:服务器选择超时

无法连接到MongoDB:服务器选择错误:服务器选择超时
EN

Stack Overflow用户
提问于 2022-06-08 14:39:42
回答 2查看 1.5K关注 0票数 1

我已经设置了Percona MongoDB出口商,当我试图为我的MongDB实例刮取度量标准时,我得到了一个错误:

代码语言:javascript
复制
An error has occurred while connecting to MongoDB:
cannot connect to MongoDB: server selection error: server selection timeout, current topology: { Type: Unknown, Servers: [{ Addr: mongodb-headless-service.labs.svc.cluster.local:27017, Type: Unknown, Last error: connection() error occured during connection handshake: dial tcp: lookup mongodb-headless-service.svc.cluster.local on 159.XX.XX.XX:XX: no such host }, ] }

MongoDB和Percona导出程序都部署在Kubernetes上的相同的名称空间中,我创建了一个用户(在管理级别)来提取度量:

代码语言:javascript
复制
db.createUser({ user: "promt", pwd: "abc123", roles: [ { role: "clusterMonitor", db: "admin" },{ role: "read", db: "local" } ], mechanisms:["SCRAM-SHA-1"]})

要验证出口商是否能够从我正在使用的MongoDB实例中获取任何度量标准,请执行以下操作:

代码语言:javascript
复制
kubectl -n labs port-forward service/mongodb-exporter 9216

我可以进入http://localhost:9216的出口商

在Percona MongoDB出口商部署中,我将MongoDB指定如下:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb-exporter
  namespace: labs
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb-exporter
  template:
    metadata:
      labels:
        app: mongodb-exporter
    spec:
      containers:
      - name: mongodb-exporter
        image: percona/mongodb_exporter:0.30
        imagePullPolicy: "IfNotPresent"
        args:
        - "--mongodb.direct-connect=false"
        - "--mongodb.uri=mongodb://promt:abc123@mongo-headless-service.svc.cluster.local/admin"
        ports:
        - name: metrics
          containerPort: 9216
        resources:
          requests:
            memory: 128Mi
            cpu: 250m

我尝试了许多选项,但它们都导致了相同的错误

  1. 将k8s命名空间添加到mongo-uri --mongodb.uri=mongodb://promt:abc123@mongodb-headless-service.labs.svc.cluster.local/admin
  2. 为SSL --mongodb.uri=mongodb://promt:abc123@mongodb-headless-service.svc.cluster.local/admin?ssl=false添加选项
  3. 从使用k8s无头服务切换到ClusterIP

--mongodb.uri=mongodb://promt:abc123@mongo-single-clusterip.labs.svc.cluster.local/admin

  1. 启用直接连接选项
  • - "--mongodb.uri=mongodb://promt:abc123@mongodb-headless-service.svc.cluster.local/admin“

对于所有这些选项,我还尝试了添加ssl选项和命名空间的变体,但这在所有情况下都失败了,因为相同的错误都是

我的MongoDB实例是一个独立的部署,定义如下:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb-deployment
  namespace: labs
  labels:
    app: mongodb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
      - name: mongodb
        image: docker.io/bitnami/mongodb:4.4.6-debian-10-r0
        imagePullPolicy: "IfNotPresent"
        securityContext:
            runAsNonRoot: true
            runAsUser: 1001
        ports:
          - containerPort: 27017
        env:
            - name: MONGO_INITDB_ROOT_USERNAME
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret-amended
                  key: mongo-root-username
            - name: MONGO_INITDB_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mongodb-secret-amended
                  key: mongo-root-password
        volumeMounts: 
            - mountPath: /data/db
              name: mongodb-vol
      volumes:
      - name: mongodb-vol
        persistentVolumeClaim:
          claimName: mongodb-claim
---
apiVersion: v1
kind: Service
metadata:
  name: mongodb-service
  namespace: labs
spec:
  type: NodePort
  selector:
    app: mongodb
  ports:
    - protocol: TCP
      port: 27017
      targetPort: 27017 
---
apiVersion: v1
kind: Service
metadata:
  name: mongodb-headless-service
  namespace: labs
spec:
  selector:
    app: mongodb
  ports:
    - protocol: TCP
      port: 27017
      targetPort: 27017 
---
apiVersion: v1
kind: Service
metadata:
  name: mongo-single-clusterip
  namespace: labs
spec:
  type: ClusterIP
  selector:
    app: mongodb
  ports:
    - protocol: TCP
      port: 27017
      targetPort: 27017

对于上下文,我将遵循给定的这里这里示例。

我遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2022-09-05 09:28:05

在返回的错误消息中说明了原因:

error occured during connection handshake: dial tcp: lookup mongodb-headless-service.svc.cluster.local on 159.XX.XX.XX:XX: no such host

此FQDN的DNS查找:mongodb-headless-service.svc.cluster.local失败。

您可以通过这里的步骤来确认您的DNS是否已正确设置:https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/

票数 0
EN

Stack Overflow用户

发布于 2022-09-05 11:43:13

您需要在配置中将mongoDB URI更改为mongodb-headless-service.labs.svc.cluster.local &它应该可以很好地工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72547682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档