어떤 연유로 sharding+replica set 풀세트의 MongoDB 전체 포트를 변경할 일이 생겼다고 가정.



mongos, config 서버는 그냥 conf 에서 변경한 상태로 다시 올리면 됨.

문제는 레플리카셋인데 이건 정보를 수정해줘야 함.


1. 레플리카셋 정보 변경

전체 클러스터를 내린 후 포트를 변경하고, 레플리카셋 별로 하나씩 mongod를 올린다.

새 포트로 레플리카셋에 접속하면 무정부상태인데, 아래와 같은 방법으로 변경한다.

// 레플리카셋 설정정보 받아오기

> cfg = rs.conf()

// 설정변경

> cfg.members[0].host = "호스트명:새 포트번호"

// ... 레플리카셋 멤버수만큼 전부 수정

// reconfig 실행. 붕뜬 상태이므로 force 옵션을 줘야 함.

> rs.reconfig(cfg, {force: true})

// rs.conf() 를 찍어보면서 바뀔 때 까지 대기



2. 샤딩 정보 변경

전체 레플리카셋이 준비완료 상태임을 확인하고 config 서버들을 올린 후 아무 config 서버나 하나 접속하고 아래처럼 실행.

// 인증과정 처리

// config DB 접속

> use config

// shards 정보 확인 - 어차피 다 업데이트 해야함

> db.shards.find()

// shards 컬렉션 정보를 수정된 레플리카셋 정보로 변경

> db.shards.update({_id:'shard00001'}, {$set:{host:'shard00001/HOST1:NEW_PORT,HOST2:NEW_PORT...'}})



3. mongos

레플리카셋과 config 변경이 완료되면 mongos를 올리고 접속해서 확인.





[참조]

http://docs.mongodb.org/manual/reference/method/rs.reconfig

Posted by bloodguy
,