전체 글 144

Oplog을 이용한 Point-in-Time Recovery

테스트 시나리오[베이스 백업: 375,000건] → [정상 변화: +5,000건] → [기준점 ts 기록] → [장애: 대량 삭제] → [기준점까지 PITR]Step 0. 현재 상태 재확인 & 백업 시점의 oplog 기준점 (ts) 확보 Step 1. 추가 +5000건 데이터 발생 & 복구 목표시oplog 기준점 (ts) 확보 Step 2. 대량 오삭제 장애발생 Step 3. 장애 이후 구간의 oplog만 따로 덤프docker exec -it mongo-node-1 mongodump --port 27017 \ -u admin -p 'admin1234' --authenticationDatabase admin \ --db local --collection oplog.rs \ --query '{ ..

Mongo/BACKUP 2026.10.04

MongoDB Backup / Restore 실습

지금까지 Replica Set, Failover, Oplog를 다루면서 "복제는 장애 대응이지 백업이 아니다"라는 점을 여러 번 짚었습니다. Secondary가 3개 있어도 누군가 실수로 db.orders.drop()을 실행하면, 그 삭제는 즉시 모든 노드에 복제되어 전부 함께 사라집니다. 복제와 백업은 전혀 다른 문제를 해결하는 도구입니다. 이번 글에서는 실제로 백업을 뜨고, 데이터를 지운 뒤, 복구하는 과정을 손으로 직접 실습합니다.1. 백업 방식 3가지논리적 백업 (mongodump/mongorestore): 문서를 쿼리로 읽어서 BSON 파일로 덤프. 버전 간 이식성이 좋고 컬렉션 단위 선택이 가능하지만, 대용량에서는 느립니다.물리적 백업 (볼륨/파일시스템 스냅샷): 데이터 파일 자체를 블록 단위..

Mongo/BACKUP 2026.10.04

MongoDB Read Preference / Write Concern 테스트

Failover 테스트 글에서 "w: 1로 쓰면 Rollback될 수 있다"고 짚었던 부분, Replication Lag 글에서 "분석 쿼리를 Secondary로 분리하라"고 했던 부분 — 둘 다 결국 Read Preference와 Write Concern 설정값의 문제입니다. 이번 글에서는 이 두 설정을 직접 바꿔가며 응답 속도, 데이터 정합성, Stale Read가 어떻게 달라지는지 실제로 테스트하는 방법을 정리합니다.1. Read Preference — 읽기를 어디로 보낼 것인가 모드 동작 적합한 상황primary (기본값)항상 Primary에서만 읽음최신 데이터가 반드시 필요한 경우primaryPreferred평소 Primary, 장애 시에만 Secondary가용성을 약간 더 우선하고 싶을 때se..

Mongo/운영 2026.10.04

의도적 replication lag 발생시키기 시나리오

1. 테스트 데이터 자동 생성- 테스트 생성은 Python Faker + PyMongo 조합 으로 시도하겠음.- 아래 URL 참조하기 Python Faker + PyMongo 조합 데이터생성1. Python 환경 준비Docker Host에서 실행해도 됩니다.mkdir mongodb-lag-testcd mongodb-lag-testpython3 -m venv venvsource venv/bin/activate설치:pip install pymongo faker 확인:pip list | grep -E "pymongo|Faker" 2. Faker 데이터 생성기workforgooddba.tistory.com 테스트 데이터 생성 2. 실시간 lag 모니터링별도의 mongosh에서:while (true) { ..

Python Faker + PyMongo 조합 데이터생성

1. Python 환경 준비Docker Host에서 실행해도 됩니다.mkdir mongodb-lag-testcd mongodb-lag-testpython3 -m venv venvsource venv/bin/activate설치:pip install pymongo faker 확인:pip list | grep -E "pymongo|Faker" 2. Faker 데이터 생성기workload_generator.py를 만듭니다.from pymongo import MongoClient, WriteConcernfrom faker import Fakerfrom datetime import datetime, timezoneimport randomimport timeimport argparsefake = Faker("ko_K..

Mongo/Performance 2026.10.03

MongoDB Replication Lag 발생 및 분석

지난 글에서 Oplog 윈도우를 초과할 정도로 Replication Lag가 누적되면 전체 재동기화가 필요해질 수 있다고 설명했습니다. 이번 글에서는 실제로 Lag가 왜 발생하는지, 어떻게 측정하고 원인을 좁혀가는지, 그리고 어떤 조치로 완화할 수 있는지를 실무 관점에서 정리합니다. MySQL의 Seconds_Behind_Master를 분석해본 경험이 있다면 접근 방식 자체는 낯설지 않을 것입니다.1. Replication Lag가 왜 문제인가Stale Read: readPreference: secondary로 읽기를 분산했다면, Lag만큼 오래된 데이터를 사용자에게 보여주게 됩니다.Oplog 윈도우 소진 위험: Lag가 Oplog 윈도우(보관 중인 변경 이력의 시간 범위)를 넘어서면 증분 복제가 불가능..

Mongo/HA 2026.10.03

MongoDB Primary 장애와 자동 Failover 테스트

Replica Set을 구축했다면 그다음 할 일은 "정말로 장애가 났을 때 자동으로 넘어가는지" 직접 확인하는 것입니다. 설정만 해두고 실제로 장애를 주입해보지 않은 상태로 운영에 들어가는 것은 위험합니다. 이 글에서는 Primary 장애를 인위적으로 재현하는 여러 방법과, 그 과정에서 관찰해야 할 지표, 그리고 흔히 간과하는 Rollback 리스크까지 정리합니다.1. Failover 테스트 전에 알아야 할 타이머 값MongoDB의 자동 Failover는 정해진 타이머에 따라 동작합니다. 테스트 결과를 해석하려면 이 값들을 먼저 알아야 합니다. 설정값 기본값 의미heartbeatIntervalMillis2000ms (2초)멤버 간 하트비트 전송 주기electionTimeoutMillis10000ms (1..

Mongo/운영 2026.10.03

MongoDB 3-Node Replica Set 설치 가이드 (Failover 테스트 환경)

핵심 설계 포인트: Docker Compose로 그대로 따라 설치할 수 있는 가이드로 작성했습니다.컨테이너별로 다른 포트(27017/27018/27019)를 쓰는 이유를 명시했습니다 — 셋 다 27017로 통일하면 호스트에서 접속할 때 엉뚱한 컨테이너로 연결되는 흔한 실수가 생깁니다.keyFile 권한(400 + 999:999 소유자)까지 정확히 맞춰야 기동에 실패하지 않는다는 점을 짚었습니다./etc/hosts 등록이 반드시 필요한 이유(컨테이너 간 DNS는 자동이지만 호스트는 별도)를 설명했습니다. 1. 로컬 pc에서 key file 생성 2. docker-compose.yml 파일 생성services: # 이 파일로 띄울 컨테이너들을..

Mongo/설치 2026.09.30

AI 이용한 개인신문을 받는중

매일 gpt를 이용한 개인신문을 받고있다. 내가 관심있어 하는 주제영역에 대해서 아래 섹션으로 구성해놓고 아래 절차대로 구성한 신문을 매일 보고 있는데 도움이 많이 되는 것 같다. 개인적으로는 DB에 관한 내용을 더 deep하게 달라고 요청했기 때문에 이 부분에 대한 영역이 70% 차지한다. ① 최신 24~72시간 자료 검색DB / AI / 경제 / 부동산 / 커리어 후보를 넓게 수집한다.↓② 공식 출처 우선 검증DB release 같은 기술 정보는 vendor 공식 문서를 우선 확인한다. 어떤 형식으로 받고 있는지에 대해서 간단히 아래는 첫지면에 대한 캡처. 아래는 주제에 대해서 기사 원문.. 진짜로 맞는지는 한번 더 검토해봐야한다.

AI 2026.09.17