티스토리 뷰

반응형

# Replica & ReplicaSets


>> 복제솔루션 종류

1. Master & Slave

  - Master -> Slave로 단방향 복제

  

>> 실습1 (Master & Slave 구성)

mkdir C:\mongodb\master  

mkdir C:\mongodb\slave1

mkdir C:\mongodb\slave2

  

mongod --journal --dbpath C:\MONGODB\master --port 10000 --master --storageEngine mmapv1

mongod --journal --dbpath C:\MONGODB\slave1 --port 10001 --slave --source localhost:10000 --storageEngine mmapv1

mongod --journal --dbpath C:\MONGODB\slave2 --port 10002 --slave --source localhost:10000 --storageEngine mmapv1

  

mongo localhost:10000 접속후 데이터 생성

use test

db.emp.insert({empno:1})


mongo localhost:10001

rs.slaveOk()   -- 슬레이브 DB를 Read 할 수 있도록 설정.  

use test

db.emp.find()


* Slave는 백업용도 외에 조회용도로 활용할 수 있다.

 : mongoclient driver 설정을 통해서 읽기는 

   Slave로 접속할 수 있게 설정할 수 있음.



>> 실습2 (Master & Slave 복구)

1. Master가 장애시 (마스터 접속후 셧다운)

mongo localhost:10000   

use admin

db.shutdownServer()

마스터의 파일을 모두 삭제함.

slave1, slave2 내림

slave1 데이터를 master로 복사


master 재시작

slave1 재시작

slave2 재시작


* slave 자체가 master가 될 수는 없다.

* slave 장애시에는 해당 slave데이터를 모두 지우고 다시 서버를 올리면 됨.



2. ReplicaSets

  - Primary & Secondary 서버로 구성

    Master & Slave와는 다르게 Primary서버에 장애가 발생하면

    실시간으로 Secondary서버가 Primary 서버의 역할을 수행함.

    즉 Read&Write가 가능해짐.

    Secondary서버는 평상시에는 Read기능만 수행

    Heartbeat로 서버간 상태를 체크함.(매 2초마다)


  - 장애시 Primary 서버 선출방법

    1. Priority에 의한 선출 (DBA가 지정)

    2. Arviter Server에 의한 선출 (저사양의 서버로 구성해도 됨)

       : Arviter의 알고리즘에 의한 방법임으로 불편할 수 있음.

    

  

>> 실습 (Primary & Secondary 서버 구성)

mkdir C:\mongodb\disk1  

mkdir C:\mongodb\disk2

mkdir C:\mongodb\disk3

mkdir C:\mongodb\arvit

  

mongod --journal --dbpath C:\MONGODB\disk1 --port 10001 --replSet rptmongo --oplogSize 10 --storageEngine mmapv1  

mongod --journal --dbpath C:\MONGODB\disk2 --port 10002 --replSet rptmongo --oplogSize 10 --storageEngine mmapv1  

mongod --journal --dbpath C:\MONGODB\disk3 --port 10003 --replSet rptmongo --oplogSize 10 --storageEngine mmapv1  

mongod --journal --dbpath C:\MONGODB\arvit --port 10004 --replSet rptmongo --oplogSize 10 --storageEngine mmapv1  


>> Primary 서버에 접속

mongo localhost:10001/admin


>> ReplicaSets 구성

db.runCommand(

{"replSetInitiate": {"_id":"rptmongo", "members":[{"_id":1, "host":"localhost:10001"},

                                                  {"_id":2, "host":"localhost:10002"},

                                                  {"_id":3, "host":"localhost:10003"},

                                                  {"_id":4, "host":"localhost:10004", arbiterOnly:true}

                                                 ]

                    }

}

)


>> ReplicaSets 조회

rs.status()



>> Secondary 서버 추가 & 삭제


mkdir C:\mongodb\disk4

mongod --journal --dbpath C:\MONGODB\disk4 --port 10005 --replSet rptmongo --oplogSize 10 --storageEngine mmapv1  


-- Primary서버 접속

mongo localhost:10001/admin


-- 추가

rs.add("localhost:10005")


-- 삭제

rs.remove("localhost:10005")


db.printSlaveReplicationInfo()




- EOF -

반응형