首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gke上的Mongodb副本集不工作

gke上的Mongodb副本集不工作
EN

Stack Overflow用户
提问于 2016-08-05 17:18:38
回答 1查看 150关注 0票数 0

我为每个mongo pod创建了3个rc:

代码语言:javascript
复制
apiVersion: v1
kind: ReplicationController
metadata:
  labels:
    name: mongo
  name: mongo-controller-1
spec:
  replicas: 1
  selector:
    name: mongo-1
  template:
    metadata:
      labels:
        name: mongo-1
        type: mongo
        pod: mongo-1
    spec:
      containers:
      - image: mongo
        command:
        - "/bin/bash"
        - "-c"
        - "service mongod stop; mkdir -p /srv/mongodb/db0 && mongod --dbpath /srv/mongodb/db0 --replSet rs0 && mongo --eval 'rs.initiate()'"
        name: mongo
        ports:
        - name: mongo
          containerPort: 27017
          hostPort: 27017
        volumeMounts:
            - name: mongo-persistent-storage-1
              mountPath: /data/db
            - name: mongo-js
              mountPath: /replicaset.js
      volumes:
        - name: mongo-persistent-storage-1
          gcePersistentDisk:
            pdName: mongo-1
            fsType: ext4
        - name: mongo-js
          hostPath:
            path: /home/sukhi/replicaset.js
      nodeSelector:
        role: mongo-1

---

apiVersion: v1
kind: ReplicationController
metadata:
  labels:
    name: mongo
  name: mongo-controller-2
spec:
  replicas: 1
  selector:
    name: mongo-2
  template:
    metadata:
      labels:
        name: mongo-2
        type: mongo
        pod: mongo-2
    spec:
      containers:
      - image: mongo
        command:
        - "/bin/bash"
        - "-c"
        - "/entrypoint.sh --port 27017 --smallfiles --replSet rs0"
        name: mongo
        ports:
        - name: mongo
          containerPort: 27017
          hostPort: 27017
        volumeMounts:
            - name: mongo-persistent-storage-2
              mountPath: /data/db
      volumes:
        - name: mongo-persistent-storage-2
          gcePersistentDisk:
            pdName: mongo-2
            fsType: ext4
      nodeSelector:
        role: mongo-2

---

apiVersion: v1
kind: ReplicationController
metadata:
  labels:
    name: mongo
  name: mongo-controller-3
spec:
  replicas: 1
  selector:
    name: mongo-3
  template:
    metadata:
      labels:
        name: mongo-3
        type: mongo
        pod: mongo-3
    spec:
      containers:
      - image: mongo
        command:
        - "/bin/bash"
        - "-c"
        - "/entrypoint.sh --port 27017 --smallfiles --replSet rs0"
        name: mongo
        ports:
        - name: mongo
          containerPort: 27017
          hostPort: 27017
        volumeMounts:
            - name: mongo-persistent-storage-3
              mountPath: /data/db
      volumes:
        - name: mongo-persistent-storage-3
          gcePersistentDisk:
            pdName: mongo-3
            fsType: ext4
      nodeSelector:
        role: mongo-3

和4个服务,每个pod 1个,外加一个整体服务:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  labels:
    name: mongo
  name: mongo
spec:
  ports:
    - port: 27017
      targetPort: 27017
  selector:
    type: mongo

---

apiVersion: v1
kind: Service
metadata:
  labels:
    name: mongo-1
  name: mongo-1
spec:
  ports:
    - port: 27017
      targetPort: 27017
  selector:
    pod: mongo-1

---

apiVersion: v1
kind: Service
metadata:
  labels:
    name: mongo-2
  name: mongo-2
spec:
  ports:
    - port: 27017
      targetPort: 27017
  selector:
    pod: mongo-2

---

apiVersion: v1
kind: Service
metadata:
  labels:
    name: mongo-3
  name: mongo-3
spec:
  ports:
    - port: 27017
      targetPort: 27017
  selector:
    pod: mongo-3

创建pod后,我运行:

kubectl exec mongo-controller-1asd -it -- mongo

要获取一个mongo shell,然后运行:

rs.initiate()

到目前为止一切都很好,rs.conf()显示:

代码语言:javascript
复制
rs0:OTHER> rs.conf()
{
        "_id" : "rs0",
        "version" : 1,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "mongo-controller-1-ogwo7:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("57a458a59d13b31c826e27cd")
        }
}

问题在我添加第一个同级节点后立即开始

代码语言:javascript
复制
rs0:PRIMARY> rs.add({host:"mongo-2.default.svc.cluster.local", priority:1})
{ "ok" : 1 } 

并检查rs.status()

代码语言:javascript
复制
rs0:PRIMARY> rs.status()
2016-08-05T09:15:39.840+0000 E QUERY    [thread1] Error: error doing query: failed: network error while attempting to run command 'replSetGetStatus' on host '127.0.0.1:27017
'  :
DB.prototype.runCommand@src/mongo/shell/db.js:135:1
DB.prototype.adminCommand@src/mongo/shell/db.js:153:16
rs.status@src/mongo/shell/utils.js:1091:12
@(shell):1:1
2016-08-05T09:15:39.843+0000 I NETWORK  [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2016-08-05T09:15:39.844+0000 I NETWORK  [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) ok
rs0:SECONDARY> rs.status()
{
        "set" : "rs0",
        "date" : ISODate("2016-08-05T09:15:46.289Z"),
        "myState" : 2,
        "term" : NumberLong(1),
        "heartbeatIntervalMillis" : NumberLong(2000),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "mongo-controller-1-ogwo7:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 207,
                        "optime" : {
                                "ts" : Timestamp(1470388513, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2016-08-05T09:15:13Z"),
                        "infoMessage" : "could not find member to sync from",
                        "configVersion" : 2,
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "mongo-2.default.svc.cluster.local:27017",
                        "health" : 1,
                        "state" : 0,
                        "stateStr" : "STARTUP",
                        "uptime" : 23,
                        "optime" : {
                                "ts" : Timestamp(0, 0),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                        "lastHeartbeat" : ISODate("2016-08-05T09:15:43.295Z"),
                        "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
                        "pingMs" : NumberLong(0),
                        "configVersion" : -2
                }
        ],
        "ok" : 1
}

正如您所看到的,我正在将主进程更改为次进程,而我刚刚添加的新进程在启动时停滞不前。我无法添加更多节点,因为我遇到了没有主集群和不起作用的集群的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-05 20:23:58

我发现了一种更好的添加对等体的方法:一旦进入mongo shell,就用已经定义的对等体创建一个config变量,如下所示;

代码语言:javascript
复制
var config = {
    "_id" : "rs0",
    "members" : [
        {
            "_id" : 0,
            "host" : "mongo-1.default.svc.cluster.local"
        },
        {
            "_id" : 1,
            "host" : "mongo-2.default.svc.cluster.local"
        },
        {
            "_id" : 2,
            "host" : "mongo-3.default.svc.cluster.local",
        }
    ]
}

然后初始化复制集

代码语言:javascript
复制
rs.initiate(config)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38785659

复制
相关文章

相似问题

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