balancer를 무조건 신뢰하기는 힘들다.
수동으로 chunk를 나누고 shard간에 분배시켜 유지하기 위해서,
sh.splitFind() 명령어를 이용해 chunk를 관리하기 좋은 크기로 잘게 나눈 다음,
원하는 chunk를 각 shard에 적절히 분배하기 위해 chunk를 옮겨야 한다.
이때 사용되는 명령어가 sh.moveChunk()
shard가 shard001, shard002 이렇게 2개 있고,
namespace가 SERVICE_DB.USER_LIST 이고,
이동하고자 하는 chunk가 user_id=bloodguy, nicehide 를 포함하는 2개의 chunk 이고,
shard001 -> shard002로 옮기려고 할 경우,
아래의 명령어를 통해 원하는 바를 이룰 수 있다.
// 1. 일단 balancer를 중지한다.
sh.stopBalancer()
// 2. chunk 이동
sh.moveChunk('SERVICE_DB.USER_LIST', {user_id:'bloodguy'}, 'shard002')
sh.moveChunk('SERVICE_DB.USER_LIST', {user_id:'nicehide'}, 'shard002')
// 3. balancer 재시작
sh.startBalancer()
왠만하면 pre-split을 하거나 balancer를 신뢰하거나 chunk가 균등분배 되길 바라는 쪽이 낫다.
대용량이고 chunk수가 많을 경우 수동으로 하는 건 정말 할 짓이 아닌 것 같다.
[참조]
startBalancer : http://docs.mongodb.org/manual/reference/method/sh.startBalancer/
stopBalancer : http://docs.mongodb.org/manual/reference/method/sh.stopBalancer/
sh.moveChunk : http://docs.mongodb.org/manual/reference/method/sh.moveChunk/
Migrate Chunks in a Sharded Cluster : http://docs.mongodb.org/manual/tutorial/migrate-chunks-in-sharded-cluster/
'DataBase' 카테고리의 다른 글
[MongoDB] batchInsert시 current batch size is too large: 에러 발생 (0) | 2014.02.26 |
---|---|
[MongoDB] MongoDB의 낙장불입. (0) | 2014.02.13 |
[MongoDB] chunk 사이즈 체크 및 나누기 (chunk, dataSize, split) (0) | 2014.02.12 |
[MongoDB] locks (0) | 2014.02.01 |
[MongoDB] heavy write(upsert+remove) 상황에서 고가용성을 위한 팁 (heavy write, upsert, remove, availability) (2) | 2014.01.29 |