[게임 서버] 8.8 MongoDB 수평 확장
카테고리: GameServer
태그: GameServer
이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 GPT에게 요약을 요청하여 작성되었습니다.
게임 서버 프로그래밍 교과서, 배현직 저자
📦 8. NoSQL 기초
👉🏻 8. MongoDB 수평 확장
📌 수평 확장
- 서버 한 대가 할 일을 여러 대로 분산
- 샤딩, 파티셔닝이라고도 함
MongoDB_ShardCluster_Setting.svg
🔀 mongos
- 애플리케이션 서버에서 명령을 받고, 적절한 샤드로 송수신한다.
⚙️ mongod (ConfigDB)
- 동일한 데이터베이스이지만 하는 역할이 다르다.
- 샤드 클러스터 전체의 메타데이터를 저장한다.
- 샤드 목록, 컬렉션 샤딩 키 정보, 청크 분포 등
- MongoDB가 제공하는 관리 명령어를 사용해야 한다.
sh.addShard(),sh.enableSharding(),sh.shardCollection()등db.config.update(…)와 같은 질의 구문으로 수정하면 안된다.
- ConfigDB가 죽으면, 모든 샤드가 죽는다.
- 별도 서버 기기에 설치하는 것을 권장한다.
- 예비 데이터베이스, 즉 이중화(replica set) 를 하도록 되어 있다.
- MongoDB는 이중화 기능을 제공한다.
🗄️ mongod (Shard#n)
- 샤드 키로 구분되는 도큐먼트를 분배해서 가지고 있다.
- 샤드 키를 해시 함수에 넣고 나오는 정수 값으로, 저장할 샤드를 정한다.
- e.g.
John → 해시 함수 → 1~4
- e.g.
- 샤드 키가 없는 질의 명령을 수행하면, mongos는 모든 샤드에 브로드캐스트한다.
- e.g.
Null → 모든 샤드에서 질의 명령 수행
- e.g.
- 한 샤드가 죽더라도, 다른 샤드는 사용할 수 있다.
- 각 샤드에 이중화를 통해 고가용성을 추구할 수 있다.
댓글남기기