首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在kubernetes上添加mongoDB状态集成员问题

在kubernetes上添加mongoDB状态集成员问题
EN

Stack Overflow用户
提问于 2020-05-26 01:35:10
回答 1查看 686关注 0票数 1

我在库伯内特斯创造了蒙戈状态,所有三个舱都在运行,

代码语言:javascript
复制
NAME                                     READY   STATUS    RESTARTS   AGE
mongo-0                                  1/1     Running   0          40m
mongo-1                                  1/1     Running   0          40m
mongo-2                                  1/1     Running   0          40m
mysql-5456cbb767-t8g2g                   1/1     Running   0          3h45m
nfs-client-provisioner-5d77dc5bd-mcz8p   1/1     Running   0          42m

但是,在使用正确的DNS名称启动和重新配置副本集的第一个成员后,无法添加其余的副本集。

代码语言:javascript
复制
>rs.initiate()
>var cfg = rs.conf()
>cfg.members[0].host="mongo‑0.mongo:27017"
>rs.reconfig(cfg)

添加第二个成员,给我这个错误

代码语言:javascript
复制
rs0:PRIMARY> rs.add("mongo‑1.mongo:27017")
{
    "operationTime" : Timestamp(1590453966, 1),
    "ok" : 0,
    "errmsg" : "Quorum check failed because not enough voting nodes responded; required 2 but only the following 1 voting nodes responded: mongo-0:27017; the following nodes did not respond affirmatively: mongo‑1.mongo:27017 failed with Error connecting to mongo‑1.mongo:27017 :: caused by :: Could not find address for mongo‑1.mongo:27017: SocketException: Host not found (authoritative)",
    "code" : 74,
    "codeName" : "NodeNotFound",
    "$clusterTime" : {
        "clusterTime" : Timestamp(1590453966, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}
rs0:PRIMARY>

同时,在所有节点上使用主机名-f还会返回节点的正确主机名。例如:

代码语言:javascript
复制
ubuntu@k8s-master:~$ hostname -f
k8s-master

有什么办法解决这个问题吗?

已部署的服务

代码语言:javascript
复制
ubuntu@k8s-master:~$ kubectl get svc --all-namespaces=true -o wide
NAMESPACE              NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE     SELECTOR
default                kubernetes                  ClusterIP   10.96.0.1        <none>        443/TCP                  20h     <none>
default                mongo                       ClusterIP   None             <none>        27017/TCP                7h59m   app=mongo
default                mysql                       ClusterIP   None             <none>        3306/TCP                 11h     app=mysql
default                nrf-instance-service        NodePort    10.96.18.198     <none>        9090:30005/TCP           10h     app=nrf-instance
kube-system            kube-dns                    ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   20h     k8s-app=kube-dns
kube-system            metrics-server              ClusterIP   10.111.247.62    <none>        443/TCP                  11h     k8s-app=metrics-server
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.97.205.147    <none>        8000/TCP                 20h     k8s-app=dashboard-metrics-scraper
kubernetes-dashboard   kubernetes-dashboard        NodePort    10.100.212.222   <none>        443:32648/TCP            20h     k8s-app=kubernetes-dashboard

也是在每个mongo上检查dns。

代码语言:javascript
复制
ubuntu@k8s-master:~$ kubectl exec -ti mongo-0 -- cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
ubuntu@k8s-master:~$ kubectl exec -ti mongo-1 -- cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
ubuntu@k8s-master:~$ kubectl exec -ti mongo-2 -- cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
代码语言:javascript
复制
ubuntu@k8s-master:~$ kubectl exec -ti mongo-0 -- nslookup kubernetes.default
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1

ubuntu@k8s-master:~$ kubectl exec -ti mongo-1 -- nslookup kubernetes.default
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1

ubuntu@k8s-master:~$ kubectl exec -ti mongo-2 -- nslookup kubernetes.default
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1

statefulset.yaml含量

代码语言:javascript
复制
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongo
spec:
  selector:
    matchLabels:
      app: mongo
  serviceName: "mongo"
  replicas: 3
  template:
    metadata:
      labels:
        app: mongo
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: mongo
        image: mongo
        command: 
        - mongod 
        - "--bind_ip_all"
        - "--replSet"
        - rs0
        ports:
        - containerPort: 27017
        volumeMounts:
        - name: mongo-volume
          mountPath: /data/db
  volumeClaimTemplates:
  - metadata:
      name: mongo-volume
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 5Gi

kubectl得到端点mongo -oyaml

代码语言:javascript
复制
apiVersion: v1
kind: Endpoints
metadata:
  annotations:
    endpoints.kubernetes.io/last-change-trigger-time: "2020-05-26T08:27:18Z"
  creationTimestamp: "2020-05-26T00:42:16Z"
  labels:
    app: mongo
    service.kubernetes.io/headless: ""
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:endpoints.kubernetes.io/last-change-trigger-time: {}
        f:labels:
          .: {}
          f:app: {}
          f:service.kubernetes.io/headless: {}
      f:subsets: {}
    manager: kube-controller-manager
    operation: Update
    time: "2020-05-26T08:27:18Z"
  name: mongo
  namespace: default
  resourceVersion: "114014"
  selfLink: /api/v1/namespaces/default/endpoints/mongo
  uid: 0a7faaa4-9de7-4a14-b101-04fc5884d23c
subsets:
- addresses:
  - hostname: mongo-1
    ip: 10.244.1.16
    nodeName: k8s-worker-node2
    targetRef:
      kind: Pod
      name: mongo-1
      namespace: default
      resourceVersion: "114012"
      uid: 249f3cf6-aa2b-4d4e-a736-671dd1942fc7
  - hostname: mongo-2
    ip: 10.244.2.28
    nodeName: k8s-worker-node1
    targetRef:
      kind: Pod
      name: mongo-2
      namespace: default
      resourceVersion: "113775"
      uid: 796a80d9-889e-4fdd-88f2-0baf3ed080c6
  - hostname: mongo-0
    ip: 10.244.2.31
    nodeName: k8s-worker-node1
    targetRef:
      kind: Pod
      name: mongo-0
      namespace: default
      resourceVersion: "113825"
      uid: 8948c536-43fd-46c4-9132-d5afe145ede7
  ports:
  - name: mongo
    port: 27017
    protocol: TCP

添加了

代码语言:javascript
复制
rs0:PRIMARY> rs.add("mongo‑1.mongo.default.svc.cluster.local:27017")
{
    "operationTime" : Timestamp(1590526166, 1),
    "ok" : 0,
    "errmsg" : "Quorum check failed because not enough voting nodes responded; required 2 but only the following 1 voting nodes responded: mongo-0:27017; the following nodes did not respond affirmatively: mongo‑1.mongo.default.svc.cluster.local:27017 failed with Error connecting to mongo‑1.mongo.default.svc.cluster.local:27017 :: caused by :: Could not find address for mongo‑1.mongo.default.svc.cluster.local:27017: SocketException: Host not found (authoritative)",
    "code" : 74,
    "codeName" : "NodeNotFound",
    "$clusterTime" : {
        "clusterTime" : Timestamp(1590526166, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}
rs0:PRIMARY> 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-27 10:38:52

我复制了你的设置并发现了问题。

原来你用错连字符了。

代码语言:javascript
复制
‑ -

第一个(由您使用)的十六进制表示形式为0x2011。第二个是正则的,其十六进制为0x2d。它们看起来几乎一样,但从dns的角度来看,它们并不相同。

要解决您的问题,您需要使用一个常规连字符。在此:

代码语言:javascript
复制
rs.add("mongo-1.mongo:27017")

试着复制粘贴上面的命令,看看它是否有效。

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

https://stackoverflow.com/questions/62013293

复制
相关文章

相似问题

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