'replset'에 해당되는 글 1건

  1. 2011.06.30 MongoDB replication

MongoDB replication

|
2가지의 replication을 지원
  1. master-slave
    master 1대에 slave여러개
  2. replica-set ( version >= v1.6)
    automatic fail-over and recovery
    using sharding 
    현재 master가 없다면 자체적으로 master를 선정한다
    master가 변경되면 driver들은 자체적으로 변경된 master로 write를 보낸다 
    read data를 분산시킨다


ReplicaSet 구성 (single server로 구성시)
http://www.mongodb.org/display/DOCS/Replica+Set+Tutorial
mongod --fork --logpath /home/yoga/workspace/mongod1/log/mongodb.log --logappend --dbpath /    home/yoga/workspace/mongod1/data --rest --replSet mall --port 27018 --oplogSize 2048
mongod --fork --logpath /home/yoga/workspace/mongod2/log/mongodb.log --logappend --dbpath /    home/yoga/workspace/mongod2/data --rest --replSet mall --port 27019 --oplogSize 2048
mongod --fork --logpath /home/yoga/workspace/mongod3/log/mongodb.log --logappend --dbpath /    home/yoga/workspace/mongod3/data --rest --replSet mall --port 27020  --oplogSize 2048
mongo --port 27018
config = {
     _id: 'foo',
     members: [ {_id: 0, host: 'localhost:27017'},
                       {_id: 1, host: 'localhost:27018'},
                       {_id: 2, host: 'localhost:27019'}] }
rs.initiate(config);
음 master에 엄청난 양의 local데이터가 쌓이는데.... oplog파일 사이즈를 42기가로 잡아서 그런거 같은데...이걸 처음에 셋팅해줘야할듯. 
oplog 처음에 잡는 사이즈가 전체 디스크의 5%를 잡는다고한다..... 시작할때 --oplogSize 2048 같이 명시적으로 주도록하자

replicaSet중 하나를 arbiter로 만들기위해서는config에  arbiterOnly: True를 추가해서 rs.reconfig(config) 를 실행해주면됨 

mongo shell에서 slave에서 read하기 위해서는 rs.slaveOk() 를 slave에서 실행후에 find해보면된다
driver에서는 slaveok=True옵션을 사용 

replicaSet에 관한 명령어 설명 : http://www.mongodb.org/display/DOCS/Replica+Set+Commands
slave가 oplog로 복구 못할정도가 될경우 해결 방법
1. master에서 lock을 걸고 fsync를 통해서 파일에 동기화시킨후 copy 
2. 해당 slave에 data 디렉토리안에 데이터를 전부 삭제하고 재투입 (자동복구...시간 오래걸림) 
And
prev | 1 | next