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/






Posted by bloodguy
,