Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1760208
  • 博文数量: 150
  • 博客积分: 660
  • 博客等级: 上士
  • 技术积分: 2480
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-08 11:39
文章分类

全部博文(150)

文章存档

2019年(4)

2018年(36)

2017年(53)

2016年(7)

2015年(3)

2014年(3)

2013年(27)

2012年(2)

2011年(1)

2006年(1)

2005年(13)

分类: NOSQL

2017-08-17 10:49:18

增加mongodb复制集的仲裁节点

目的

拥有4个节点(1primary 3secondary)的复制集理论上如果有任意一个节点宕机,均可保证集群选举出新的primary,保证集群的可用性。只是当前状态数据要保持4份,从磁盘空间利用率的角度来看不够节约,于是计划调整为1primary、2secondary、1ARBITER的模式。

步骤

查看集群状态

  • 连接primary,运行rs.status()命令
  • 选择id为2,即192.168.1.230:27017的节点作为仲裁节点
goluk:PRIMARY> rs.status()
{
    "set" : "goluk",
    "date" : ISODate("2017-08-17T02:18:15.981Z"),
    "myState" : 1,
    "term" : NumberLong(-1),
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1502936295, 493),
            "t" : NumberLong(-1)
        },
        "appliedOpTime" : Timestamp(1502936295, 493),
        "durableOpTime" : Timestamp(1502936295, 481)
    },
    "members" : [
        {
            "_id" : 0,
            "name" : "10.0.1.31:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 8479476,
            "optime" : Timestamp(1502936295, 493),
            "optimeDate" : ISODate("2017-08-17T02:18:15Z"),
            "electionTime" : Timestamp(1502896073, 1),
            "electionDate" : ISODate("2017-08-16T15:07:53Z"),
            "configVersion" : 10,
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "10.0.1.32:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 40222,
            "optime" : Timestamp(1502936294, 239),
            "optimeDurable" : Timestamp(1502936294, 239),
            "optimeDate" : ISODate("2017-08-17T02:18:14Z"),
            "optimeDurableDate" : ISODate("2017-08-17T02:18:14Z"),
            "lastHeartbeat" : ISODate("2017-08-17T02:18:14.589Z"),
            "lastHeartbeatRecv" : ISODate("2017-08-17T02:18:15.485Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "10.0.1.33:27017",
            "configVersion" : 10
        },
        {
            "_id" : 2,
            "name" : "192.168.1.230:27017",
            "health" : 0,
            "state" : 8,
            "stateStr" : "(not reachable/healthy)",
            "uptime" : 0,
            "optime" : Timestamp(0, 0),
            "optimeDurable" : Timestamp(0, 0),
            "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
            "optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
            "lastHeartbeat" : ISODate("2017-08-17T02:18:14.515Z"),
            "lastHeartbeatRecv" : ISODate("2017-07-15T14:54:07.533Z"),
            "pingMs" : NumberLong(31),
            "lastHeartbeatMessage" : "Connection refused",
            "configVersion" : -1
        },
        {
            "_id" : 3,
            "name" : "10.0.1.33:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 2801929,
            "optime" : Timestamp(1502936295, 338),
            "optimeDurable" : Timestamp(1502936295, 337),
            "optimeDate" : ISODate("2017-08-17T02:18:15Z"),
            "optimeDurableDate" : ISODate("2017-08-17T02:18:15Z"),
            "lastHeartbeat" : ISODate("2017-08-17T02:18:15.421Z"),
            "lastHeartbeatRecv" : ISODate("2017-08-17T02:18:14.407Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "10.0.1.31:27017",
            "configVersion" : 10
        }
    ],
    "ok" : 1
}

移除230节点

  • 在230节点上停止mongod进程
  • 在primary上执行remove操作
goluk:PRIMARY> rs.remove("192.168.1.230:27017")
{ "ok" : 1 }

移除之后查看集群状态

goluk:PRIMARY> rs.status()
{
    "set" : "goluk",
    "date" : ISODate("2017-08-17T02:20:03.647Z"),
    "myState" : 1,
    "term" : NumberLong(-1),
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1502936403, 86),
            "t" : NumberLong(-1)
        },
        "appliedOpTime" : Timestamp(1502936403, 292),
        "durableOpTime" : Timestamp(1502936403, 150)
    },
    "members" : [
        {
            "_id" : 0,
            "name" : "10.0.1.31:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 8479584,
            "optime" : Timestamp(1502936403, 292),
            "optimeDate" : ISODate("2017-08-17T02:20:03Z"),
            "electionTime" : Timestamp(1502896073, 1),
            "electionDate" : ISODate("2017-08-16T15:07:53Z"),
            "configVersion" : 11,
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "10.0.1.32:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 40330,
            "optime" : Timestamp(1502936401, 721),
            "optimeDurable" : Timestamp(1502936401, 720),
            "optimeDate" : ISODate("2017-08-17T02:20:01Z"),
            "optimeDurableDate" : ISODate("2017-08-17T02:20:01Z"),
            "lastHeartbeat" : ISODate("2017-08-17T02:20:01.725Z"),
            "lastHeartbeatRecv" : ISODate("2017-08-17T02:20:01.726Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "10.0.1.33:27017",
            "configVersion" : 11
        },
        {
            "_id" : 3,
            "name" : "10.0.1.33:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 2802036,
            "optime" : Timestamp(1502936401, 721),
            "optimeDurable" : Timestamp(1502936401, 721),
            "optimeDate" : ISODate("2017-08-17T02:20:01Z"),
            "optimeDurableDate" : ISODate("2017-08-17T02:20:01Z"),
            "lastHeartbeat" : ISODate("2017-08-17T02:20:01.725Z"),
            "lastHeartbeatRecv" : ISODate("2017-08-17T02:20:01.764Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "10.0.1.31:27017",
            "configVersion" : 11
        }
    ],
    "ok" : 1

增加仲裁节点

  • 在230节点上重启mongod进程或者服务
  • 在primary上执行增加仲裁节点命令
 goluk:PRIMARY> rs.addArb("192.168.1.230:27017")
{ "ok" : 1 } 

查看集群状态,确认仲裁节点

 goluk:PRIMARY> rs.status()
{
    "set" : "goluk",
    "date" : ISODate("2017-08-17T02:28:10.300Z"),
    "myState" : 1,
    "term" : NumberLong(-1),
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1502936890, 59),
            "t" : NumberLong(-1)
        },
        "appliedOpTime" : Timestamp(1502936890, 60),
        "durableOpTime" : Timestamp(1502936890, 36)
    },
    "members" : [
        {
            "_id" : 0,
            "name" : "10.0.1.31:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 8480071,
            "optime" : Timestamp(1502936890, 60),
            "optimeDate" : ISODate("2017-08-17T02:28:10Z"),
            "electionTime" : Timestamp(1502896073, 1),
            "electionDate" : ISODate("2017-08-16T15:07:53Z"),
            "configVersion" : 12,
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "10.0.1.32:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 40817,
            "optime" : Timestamp(1502936889, 662),
            "optimeDurable" : Timestamp(1502936889, 662),
            "optimeDate" : ISODate("2017-08-17T02:28:09Z"),
            "optimeDurableDate" : ISODate("2017-08-17T02:28:09Z"),
            "lastHeartbeat" : ISODate("2017-08-17T02:28:09.915Z"),
            "lastHeartbeatRecv" : ISODate("2017-08-17T02:28:09.981Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "10.0.1.33:27017",
            "configVersion" : 12
        },
        {
            "_id" : 3,
            "name" : "10.0.1.33:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 2802523,
            "optime" : Timestamp(1502936889, 662),
            "optimeDurable" : Timestamp(1502936889, 662),
            "optimeDate" : ISODate("2017-08-17T02:28:09Z"),
            "optimeDurableDate" : ISODate("2017-08-17T02:28:09Z"),
            "lastHeartbeat" : ISODate("2017-08-17T02:28:09.916Z"),
            "lastHeartbeatRecv" : ISODate("2017-08-17T02:28:09.978Z"),
            "pingMs" : NumberLong(0),
            "syncingTo" : "10.0.1.31:27017",
            "configVersion" : 12
        },
        {
            "_id" : 4,
            "name" : "192.168.1.230:27017",
            "health" : 1,
            "state" : 7,
            "stateStr" : "ARBITER",
            "uptime" : 10,
            "lastHeartbeat" : ISODate("2017-08-17T02:28:10.170Z"),
            "lastHeartbeatRecv" : ISODate("2017-08-17T02:28:08.512Z"),
            "pingMs" : NumberLong(31),
            "configVersion" : 12
        }
    ],
    "ok" : 1
} 

在230上节点上继续确认是否更改为仲裁节点

  • 执行mongo,可以发现提示符已经变更为ARBITER,确认修改成功
goluk:ARBITER>
阅读(2470) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~