-
mongoDB 튜토리얼 6. 레플리카 셋DB/MongoDB 정리 2019. 11. 19. 11:33
복제(replication) 어떤 기억 장소에서, 데이터를 원형대로 읽어 내어 그 데이터를 동일한 물리적 형식으로 다른 기억 장소에 써넣는 것
데이터를 여러 db서버에 분산하여 저장 관리하는 기술
- the process of synchronizing data across multiple servers
-provides redundancy and increases data availability with multiple copies of data on different database servers protects a database from the loss of a single server.
- fault tolerance
- allows you to recover from hardware failure and service interruptions.
How Replication Works in MongoDB?
몽고d 인스턴스들이 같은 데이터 set을 저장하고 관리한다
몽고 d 인스턴스들은 그룹을 이룬다.
몽고 d 인스턴스 중 한 노드 즉 primary 노드가 전체 쓰기를 담당하고 그 후 나머지 인스턴스들 ( secondaries )
은 primary 노드의 연산들을 똑같이 적용한다. 따라서 같은 데이터 set을 유지할 수 있다.
하나의 Replica set에서 primary 노드는 하나만 만들 수 있다.
At the time of automatic failover or maintenance, election establishes for primary and a new primary node is elected.
- 자동으로 prime node가 죽어도 새로 선거(election) 해서 새로운 primary node를 올린다.
3개의 노드로 가정했을때의 그림이다. ( 즉 몽고 d를 3개 돌린 것) // 최소 3개 이상 모여야 함
예를 들면 서울에서 1개 인천 1개 부산 1개. 깨져도 선거과정을 통해 primary로 바로 올라가서 서비스가 중단되지 않고 계속된다.
즉 Reads 와 Writes 모두 Primary에서 일어난다.
A typical diagram of MongoDB replication is shown in which client application always interact with the primary node and the primary node then replicates the data to the secondary nodes.
Replica Set Features
- A cluster of N nodes
- Any one node can be primary
- All write operations go to primary
- Automatic failover
- Automatic recovery
- Consensus election of primary
replica set의 구성은 데이터를 가진 노드와 데이터가 없는 노드로 나뉘는데 primary node는 데이터를 가진
노드에 있다.
1)
primary는 write 작업이 있을 시마다 기록을 남기는데 로그 형태로 남게 된다. 그리고 그 노드는 oplog 라 부른다.
primary가 가지고 있는 oplog를 이용해서 그 write 연산을 또 수행한다.
asynchronous인 이유는 먼저 write가 들어가고 기록이 남고 그 후에 다시 wirte로 시차가 있기 때문
2)
앞 서 말햇듯 데이터가 없는 노드가 있는데 투표권만 가지고 있는 arbiter node이다.
primary 선거 시 역할을 한다.
Primary가 write 하고 남긴 oplog를 Secondary들이 복제하게 되는 것. 그 안에 무슨 작업을 했는지
쓰여있고 똑같이 write 작업을 한번 더 하게 된다.
Heaertbeat를 보내서 ( ping messages) 살았는지 안 살았는지 2초마다 체크한다.
10초를 기다려서 답이 안 오면 죽은 것. 죽었다면 바로 자동으로 선거 들어간다.
기본 선거 10초 동안은 Primary 노드가 없는 상황이다. Application에서 write 작업을 해도
안된다. 하지만 read 연산은 가능하다. write 작업은 무조건 primary -> oplog -> replication
이지만 read는 데이터의 변경이 없다. primary가 죽어도 secondary 가 똑같은 데이터를 가지고 있다면
read작업을 우회해서 즉 다른 secondary 하나를 지정해서 계속해서 가능하다.
priority를 조절해서 다음 primary를 고를 수 있고 아예 배재시킬 수도 있다.
레플리카셋 하나를 만들고 몽고 클라이언트 창에서 이 db에 접속한 다음 rs.initiate()로 초기화 가능하다.
그다음 rs.add()로 기존에 rs0의 이름을 가진 레플리카셋에 추가해보자.
'DB > MongoDB 정리' 카테고리의 다른 글
mongoDB 튜토리얼 8 - DBRefs (0) 2019.12.03 mongoDB 튜토리얼 7. 샤딩 (0) 2019.11.26 MongoDB 튜토리얼 5. Aggregation (0) 2019.10.15 MongoDB 튜토리얼 4. CRUD (31) 2019.10.01 MongoDB 튜토리얼 3. CRUD (31) 2019.09.24