无法从Kubernetes中的NodeJS连接MongoDB副本集

问题描述

我点击了此链接,以在GKE中使用GCP磁盘设置MongoDB副本集。 https://kubernetes.io/blog/2017/01/running-mongodb-on-kubernetes-with-statefulsets/

我使用 mongo-statefulset.yml googlecloud_ssd.yml 成功创建了mongo副本集和服务。

kubectl get all
pod/mongo-0                                    2/2     Running            0          73m
pod/mongo-1                                    2/2     Running            0          72m
pod/mongo-2                                    2/2     Running            0          72m

service/mongo                   ClusterIP   None         <none>        27017/TCP        73m

googlecloud_ssd.yml:

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
Metadata:
  name: fast
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd

mongo-statefulset.yml:

apiVersion: v1
kind: Service
Metadata:
  name: mongo
  labels:
    name: mongo
spec:
  ports:
  - port: 27017
    targetPort: 27017
  clusterIP: None
  selector:
    role: mongo
---
apiVersion: apps/v1
kind: StatefulSet
Metadata:
  name: mongo
spec:
  selector:
    matchLabels:
      role: mongo
  serviceName: "mongo"
  replicas: 3
  template:
    Metadata:
      labels:
        role: mongo
        environment: test
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo
          image: mongo:3.4
          command:
            - mongod
            - "--replSet"
            - rs0
            - "--bind_ip"
            - 0.0.0.0
            - "--smallfiles"
            - "--noprealloc"
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: mongo-persistent-storage
              mountPath: /data/db
        - name: mongo-sidecar
          image: cvallance/mongo-k8s-sidecar
          env:
            - name: MONGO_SIDECAR_POD_LABELS
              value: "role=mongo,environment=test"
  volumeClaimTemplates:
  - Metadata:
      name: mongo-persistent-storage
      annotations:
        volume.beta.kubernetes.io/storage-class: "fast"
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 50Gi

我的节点JS :(版本节点:12)

mongodbConnection = 'mongodb://mongo-0.mongo,mongo-1.mongo,mongo-2.mongo:27017/mydb?replicaset=rs0',{ useUnifiedTopology: true }

mongoose.connect(mongodbConnection).then(() => console.log("MongoDB successfully connected"))
.catch(err => console.log(err));

错误

MongoError: no primary found in replicaset or invalid replica set name
at /usr/src/app/node_modules/mongodb/lib/core/topologies/replset.js:624:11
at done (/usr/src/app/node_modules/mongodb/lib/core/topologies/replset.js:289:7)

更新更多信息:

mongodbConnection = 'mongodb://mongo-0.mongo,mongo-2.mongo:27017/mydb_?',{ useUnifiedTopology: true }

错误

MongoError: seed list contains no mongos proxies,replicaset connections requires the parameter replicaset to be supplied in the URI or options object,mongodb://server:port/db?replicaset=name

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)