MongoDB 2.6 버전으로 업그레이드 하기 위해선 반드시 업그레이드할 시스템이 2.4 버전이어야 한다.
그 아래 버전이라면 어떻게든 2.4 버전까지 업그레이드 시키고 난 후에 2.6 버전 업그레이드가 가능하다.
[사전체크]
1. 사용자 권한/인증이 크게 변경되었기 때문에 admin DB에 모든 권한(userAdminAnyDatabase)을 가진 user가 최소 1개 이상 있어야 함.
// 없으면 하나 추가하자
mongos> use admin
switched to db admin
mongos> db.addUser('USER', 'PASS')
2. 2.6 버전의 mongo 실행파일로 mongos에 접속해서 db.upgradeCheckAllDBs() 를 실행해서 문제가 있다면 미리 조치를 취해야 함.
// 2.6 버전의 mongo로 접속
mongos> use admin
switched to db admin
mongos> db.auth('USER', 'PASS')
1
mongos> db.upgradeCheckAllDBs()
Checking database MY_DB
Checking collection MY_DB.system.indexes
Checking collection MY_DB.my_collection
33791 documents processed
68454 documents processed
...
...
Everything is ready for the upgrade!
true
mongos>
// 뭔가 줄줄줄 나오다가 Everything is ready for the upgrade! 문장이 나오고 true가 반환되어야 함
그 외에도 2.6 버전에서 변경되는 점은 아래 페이지에서 확인해서 미리 조치를 취할 것.
http://docs.mongodb.org/manual/release-notes/2.6-compatibility/
[실행파일 업그레이드]
1. 우선 balancer 부터 중지시키자.
mongos> sh.stopBalancer()
Waiting for active hosts...
Waiting for the balancer lock...
Waiting again for active hosts after balancer is off...
2. config에 있는 metadata부터 업그레이드 시켜야 한다.
2.6 버전의 mongos를 --upgrade 옵션과 함께 --configdb 옵션에 2.4 버전의 configDB를 지정해서 실행시키면 metadata를 업그레이드 해준다.
[root@localhost]# $MONGO_2.6_PATH/bin/mongos --configdb config-01.bloodguy.com:27018,config-02.bloodguy.com:27018,config-03.bloodguy.com:27018 --keyFile $MONGO_KEY_PATH --upgrade
// metadata 업그레이드가 성공하면 아래와 같은 로그가 나오면서 mongos는 종료된다.
upgrade of config server to v5 successful
Config database is at version v5
// --upgrade 옵션을 빼고 동일하게 2.6 버전의 mongos를 재실행 해보자. 만약 실패하면 로그를 확인하고 조치를 취하자.
3. mongos upgrade
실행파일 중 가장 먼저 mongos부터 업그레이드 해야한다.
metadata 업그레이드가 완료되었다면 2.4 버전의 mongos를 하나씩 shutdown 하면서 2.6 버전의 mongos로 대체하여 실행하자.
// 2.4 버전 mongos 접속
[root@localhost]# $MONGO_2.4_PATH/bin/mongo mongos-01.bloodguy.com:27017
// admin db 선택 후 shutdown
mongos> use admin
swtiched to db admin
mongos> db.auth('USER', 'PASS')
1
mongos> db.shutdownServer()
...
...
> quit()
// 2.6 버전 mongos 시작
[root@localhost]# $MONGO_2.6_PATH/bin/mongos -f $MONGO_2.6_CONF_PATH
4. mongod upgrade
mongod 업그레이드를 하기 전에 모든 mongos instance를 2.6으로 업그레이드 완료했는지 마지막으로 체크해 볼 것.
mongod는 config 서버부터 업그레이드 한다.
mongos 설정 중 --configDB 의 configDB string 에서 제일 먼저 지정된 서버를 마지막에 업그레이드하는 것만 주의하자.
// 2.4 버전 mongod(config) 접속
// config-01.bloodguy.com 이 configDB string의 제일 처음에 있으므로 가장 마지막에 업그레이드 할 것
[root@localhost]# $MONGO_2.4_PATH/bin/mongo config-03.bloodguy.com:27018
// 인증하고 shutdown
> use admin
switched to db admin
> db.auth('root', 'PASS')
1
configsvr> db.shutdownServer()
...
...
> quit()
// 2.6 버전 mongod 시작
[root@localhost]# $MONGO_2.6_PATH/bin/mongod -f $MONGO_2.6_CONF_PATH
config 서버 3개 다 업그레이드 했다면 다음은 각 ReplicaSet의 ARBITER, SECONDARY 차례다.
업그레이드 방법은 config 서버와 동일하다.
모든 ARBITER, SECONDARY 업그레이드가 완료되었다면 이젠 PRIMARY 차례다.
주의할 점은 바로 db.shutdownServer()로 종료하지 말고 rs.stepDown()으로 새로운 PRIMARY가 선출된 후 shutdown 하는 것이다.
이후 과정은 ARBITER, SECONDARY와 동일하다.
5. 모든 과정이 완료되었다면 balancer를 재시작 하자.
mongos> sh.startBalancer()
[사용자 인증모드 업그레이드]
MongoDB 사이트의 오피셜 문서에 따르면,
사용자 인증모드를 업그레이드 하고 나면 다운그레이드가 대단히 어렵게 되므로,
우선 바이너리 파일 업그레이드 후 1~2일 정도 경과를 지켜보다가 문제가 없을 경우 사용자 인증모드를 업그레이드 할 것은 권장한다.
사용자 인증모드 업그레이드는 별 거 없이 명령어 하나 실행시키는 정도로 간단하다.
mongos> use admin
switched to db admin
mongos> db.auth('root', 'PASS')
1
// 사용자 인증모드 업그레이드
mongos> db.runCommand({authSchemaUpgrade: 1})
인증모드 업그레이드가 완료되면 admin DB의 system.users collection은 system.backup.users collection으로 복사된다.
기타 지저분한(-_-) collection 들이 몇 개 더 생성되는 것을 확인할 수 있다.
[참고]
http://docs.mongodb.org/manual/release-notes/2.6-upgrade/
'DataBase' 카테고리의 다른 글
[MongoDB] 2.4/2.6 remove benchmark (write concern, bulk write) (0) | 2015.09.14 |
---|---|
[MongoDB] 2.4/2.6 update benchmark (write concern, bulk write) (0) | 2015.09.11 |
[MongoDB] priority 설정 (0) | 2015.09.10 |
[MongoDB] ReplicaSet의 SECONDARY 멤버를 ARBITER로 변환하기 (0) | 2015.09.10 |
[MongoDB] Transparent Huge Page 관련 warning 뜰 경우 (0) | 2015.09.01 |