MongoDB sharded cluster 설치 (config server + shard + mongos)
MongoDB난이도: 고급소요 시간: 2–3시간데이터나 쓰기 부하가 단일 replica set의 한계를 넘을 때 구성하는 sharded cluster입니다. 3개 멤버의 config server replica set, 2개 또는 3개의 shard replica set, 2개의 mongos router로 구성하며, keyfile 기반 내부 인증, 권한 부여(authorization), sh.addShard, shard key 선택, 컬렉션 샤딩, balancer, 데이터 분포 검증을 다룹니다. 결과로 애플리케이션이 mongos를 통해서만 접속하는, 수평 확장 가능한 클러스터를 얻습니다. 데이터가 서버 한 대에 들어간다면 replica set 설치가 더 단순하고 충분합니다.
구성: config server 3대 + shard 멤버 2×3대 + mongos 2대 (최소 11대, 테스트용은 더 적게)
시작하기 전에
- 모든 서버가 같은 최신 운영체제이며, 시간이 NTP(chrony)로 동기화되어 있습니다. 멤버 간 시간 차이는 세션 및 oplog 문제를 일으킵니다.
- RAM과 CPU가 폼의 값과 같습니다(WiredTiger cache는 이 값으로 계산). Swap은 구성되어 있지만 작습니다.
- 데이터 디렉터리(…)가 별도 디스크/LV에 있고, XFS로 포맷되어 noatime으로 마운트되며 fstab에 영구 등록되어 있습니다. WiredTiger와 ext4 조합은 성능 문제를 일으킬 수 있습니다.
- 모든 서버 이름이 모든 서버와 애플리케이션 서버에서 조회됩니다(DNS 또는 /etc/hosts). Replica set 구성에는 IP가 아니라 이름을 사용합니다.
- 서버 간에 …, …, … 포트가 열려 있고, 애플리케이션 네트워크에서 이 포트에 접근할 수 있습니다. 이 포트를 다른 서비스가 사용하지 않습니다.
- 서버가 HTTPS로 repo.mongodb.org와 pgp.mongodb.com에 접근할 수 있거나, 사내 mirror가 구성되어 있습니다.
- 운영체제 자체의 mongodb 패키지나 이전 MongoDB 설치가 없습니다.
- 첫 번째 서버에서 다른 서버로 root(또는 sudo 권한 사용자)로 scp를 할 수 있습니다(keyfile 복사용). 그렇지 않으면 안전한 방법으로 파일을 직접 옮깁니다.
- root 또는 sudo 권한으로 로그인했으며, 유지보수 시간과 서버 스냅샷(롤백) 계획이 준비되어 있습니다.
- Shard key는 애플리케이션 팀과 함께 결정했습니다: 가장 빈번한 쿼리의 필터 필드, 높은 카디널리티, 값의 고른 분포. Shard key는 나중에 reshardCollection으로 변경할 수 있지만 비용이 큽니다.
가이드 단계
- 운영체제 준비 (모든 서버) — Hostname: … · Hostname: … · Hostname: … · Hostname: … · Hostname: … · 시스템 업데이트 및 필요 도구 …
- MongoDB 소프트웨어 설치 — MongoDB … 저장소 추가 · MongoDB … 저장소 추가 · MongoDB 서버 소프트웨어 설치 (config server 및 shard) · mongos 및 mongosh 설치 (router) · 데이터 디렉터리 준비 · SELinux 정책, 레이블, 포트 …
- Keyfile (클러스터 내부 인증) — Keyfile 생성 · Keyfile을 모든 서버로 복사 · Keyfile 권한
- Config server replica set — mongod.conf (config server): … · mongod 시작 · rs.initiate (config server)
- Shard A (replica set shardA) — mongod.conf (shard A): … · mongod 시작 · rs.initiate (shard A) · Shard-local 관리자 사용자 (shard A)
- Shard B (replica set shardB) — mongod.conf (shard B): … · mongod 시작 · rs.initiate (shard B) · Shard-local 관리자 사용자 (shard B)
- Shard C (replica set shardC) — mongod.conf (shard C): … · mongod 시작 · rs.initiate (shard C) · Shard-local 관리자 사용자 (shard C)
- mongos (router) — mongos.conf: … · mongos systemd 서비스 · mongos 시작 · 클러스터 관리자 생성 · Shard 추가 (sh.addShard) · 애플리케이션 사용자 생성
- Shard key와 컬렉션 샤딩 — Shard key 선택 (결정 단계) · 컬렉션 샤딩 · Balancer 상태 · Balancer 시간 창
- 검증 — 클러스터 상태 · 분포 테스트 · Config server replica set 상태 · 애플리케이션 연결 문자열
- 설치 후 — 로그 로테이션 · 백업 전략 · 모니터링