MongoDB의 ReplicaSet을 구성할 때 PRIMARY-SECONDARY-ARBITER 형태로 구성하려 했는데,
rs.initiate() 를 하고 보면 PRIMARY-SECONDARY-SECONDARY로 구성되어 있다.
이럴 땐 원래 ARBITER로 구성하려 했던 서버를 ReplicaSet에서 삭제하고 rs.addArb() 로 다시 추가해주면 된다.
// 상태확인
shard_001:PRIMARY> rs.status()
{
"set" : "shard_001",
"date" : ISODate("2015-09-09T23:53:33Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "shard-001-primary.bloodguy.com:27018",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 54488,
"optime" : Timestamp(1441842796, 1),
"optimeDate" : ISODate("2015-09-09T23:53:16Z"),
"self" : true
},
{
"_id" : 1,
"name" : "shard-001-secondary.bloodguy.com:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 53336,
"optime" : Timestamp(1441842796, 1),
"optimeDate" : ISODate("2015-09-09T23:53:16Z"),
"lastHeartbeat" : ISODate("2015-09-09T23:53:32Z"),
"lastHeartbeatRecv" : ISODate("2015-09-09T23:53:31Z"),
"pingMs" : 1,
"syncingTo" : "shard-001-primary.bloodguy.com:27018"
},
// 이 서버는 원래 ARBITER로 하려고 했는데 SECONDARY로 추가되어 있다
{
"_id" : 2,
"name" : "shard-001-arbiter.bloodguy.com:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 53336,
"optime" : Timestamp(1441842796, 1),
"optimeDate" : ISODate("2015-09-09T23:53:16Z"),
"lastHeartbeat" : ISODate("2015-09-09T23:53:32Z"),
"lastHeartbeatRecv" : ISODate("2015-09-09T23:53:33Z"),
"pingMs" : 1,
"syncingTo" : "shard-001-primary.bloodguy.com:27018"
}
],
"ok" : 1
}
// ARBITER로 구성하려 했으나 SECONDARY로 추가되어 있는 서버를 ReplicaSet에서 삭제
shard_001:PRIMARY> rs.remove('shard-001-arbiter.bloodguy.com:27018')
// 확인
shard_001:PRIMARY> rs.status()
{
"set" : "shard_001",
"date" : ISODate("2015-09-09T23:53:33Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "shard-001-primary.bloodguy.com:27018",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 54488,
"optime" : Timestamp(1441842796, 1),
"optimeDate" : ISODate("2015-09-09T23:53:16Z"),
"self" : true
},
{
"_id" : 1,
"name" : "shard-001-secondary.bloodguy.com:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 53336,
"optime" : Timestamp(1441842796, 1),
"optimeDate" : ISODate("2015-09-09T23:53:16Z"),
"lastHeartbeat" : ISODate("2015-09-09T23:53:32Z"),
"lastHeartbeatRecv" : ISODate("2015-09-09T23:53:31Z"),
"pingMs" : 1,
"syncingTo" : "shard-001-primary.bloodguy.com:27018"
}
],
"ok" : 1
}
이제 삭제한 서버로 가서 mongod를 중지한 후 data를 지우고 mongod를 재시작한다.
// mongod를 접속해보면 상태가 REMOVED로 되어 있는 것을 확인할 수 있다
// 여튼 mongod shutdown
shard_001:REMOVED> use admin
switched to db admin
shard_00:REMOVED> db.shutdownServer()
// mongo shell을 빠져나옴
> quit()
// 데이터 삭제
[root@shard-001-arbiter]# rm -rf MONGO_DATA_PATH/*
// mongod 재시작
[root@shard-001-arbiter]# MONGO_BIN_PATH/mongod -f MONGO_CONF_PATH
다시 PRIMARY로 가서 ARBITER로 추가.
// ARBITER 추가
shard_001:PRIMARY> rs.addArb('shard-001-arbiter.bloodguy.com:27018')
{ "down" : [ "shard-001-arbiter.bloodguy.com:27018" ], "ok" : 1 }
// rs.status()를 해보다가 추가한 서버의 stateStr이 ARBITER로 되는 것을 확인했으면 완료
shard_001:PRIMARY> rs.status()
{
"set" : "shard_001",
"date" : ISODate("2015-09-09T23:53:33Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "shard-001-primary.bloodguy.com:27018",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 54488,
"optime" : Timestamp(1441842796, 1),
"optimeDate" : ISODate("2015-09-09T23:53:16Z"),
"self" : true
},
{
"_id" : 1,
"name" : "shard-001-secondary.bloodguy.com:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 53336,
"optime" : Timestamp(1441842796, 1),
"optimeDate" : ISODate("2015-09-09T23:53:16Z"),
"lastHeartbeat" : ISODate("2015-09-09T23:53:32Z"),
"lastHeartbeatRecv" : ISODate("2015-09-09T23:53:31Z"),
"pingMs" : 1,
"syncingTo" : "shard-001-primary.bloodguy.com:27018"
},
// ARBITER로 추가되었다
{
"_id" : 2,
"name" : "shard-001-arbiter.bloodguy.com:27018",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 112,
"lastHeartbeat" : ISODate("2015-09-10T00:16:49Z"),
"lastHeartbeatRecv" : ISODate("2015-09-10T00:16:50Z"),
"pingMs" : 1
}
],
"ok" : 1
}
[참고]
http://docs.mongodb.org/manual/tutorials/convert-secondary-into-arbiter/
'DataBase' 카테고리의 다른 글
[MongoDB] 2.6 업그레이드 (upgrade MongoDB to 2.6) (0) | 2015.09.10 |
---|---|
[MongoDB] priority 설정 (0) | 2015.09.10 |
[MongoDB] Transparent Huge Page 관련 warning 뜰 경우 (0) | 2015.09.01 |
[MongoDB] oplog resize (0) | 2015.08.04 |
[MongoDB] 사이즈 줄이기 (compact, repairDatabase) (0) | 2015.07.31 |