Redis와 MongoDB 클러스터

두 대표적인 NoSQL, Redis와 MongoDB를 클러스터 관점에서 정리합니다.

Redis

Redis는 메모리 기반의 키-값 저장소입니다. 설치는 간단해요.

apt-get install -y redis-server

클러스터 구축

클러스터로 데이터를 분산 저장하고, 마스터-슬레이브 복제로 가용성을 높입니다. 각 노드의 redis.conf 에서 핵심 설정은:

port 6300
cluster-enabled yes
cluster-config-file nodes-6300.conf
cluster-node-timeout 5000
appendonly yes                        # AOF 활성화
appendfilename "appendonly-6300.aof"
daemonize yes                         # 백그라운드 실행

AOF vs RDB: AOF(Append-Only File)는 모든 명령을 기록해 무결성이 높지만 파일이 크고 복구가 느립니다. 기본값인 RDB는 주기적 스냅샷이라 가볍지만 스냅샷 이후 데이터가 유실될 수 있어요. 무결성이 중요하면 AOF를 켭니다.

여러 노드를 실행한 뒤 클러스터를 만듭니다. 아래처럼 셸 스크립트로 자동화하면 편해요.

#!/bin/bash
ports=(6300 6301 6302 6400 6401 6402)
for port in "${ports[@]}"; do
    mkdir -p ./redis-cluster/$port
    cat << EOF > ./redis-cluster/$port/redis.conf
port $port
cluster-enabled yes
cluster-config-file nodes-$port.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
EOF
    redis-server ./redis-cluster/$port/redis.conf
done

yes yes | redis-cli --cluster create \
  127.0.0.1:6300 127.0.0.1:6301 127.0.0.1:6302 \
  127.0.0.1:6400 127.0.0.1:6401 127.0.0.1:6402 \
  --cluster-replicas 1

--cluster-replicas 1 은 마스터 1대당 슬레이브 1대를 붙이라는 뜻입니다. 앞 3개(63006302)가 마스터, 뒤 3개(64006402)가 슬레이브가 됩니다.

상태 확인

redis-cli -c -p 6300 cluster info     # 클러스터 상태
redis-cli -c -p 6300 cluster nodes    # 노드별 역할·담당 슬롯

마스터가 중지되면 슬레이브가 자동으로 승격해 새 마스터가 됩니다. 슬레이브가 중지된 경우엔 클러스터가 정상 동작하고, 재시작하면 마스터에서 최신 데이터를 알아서 동기화해요. 일시적 가용성 감소 외엔 큰 문제가 없습니다.

MongoDB

MongoDB는 대용량 처리에 강한 문서형 NoSQL입니다. 트랜잭션을 쓰려면 레플리카셋 구성이 필요해요.

  • Primary: 세트당 하나. 읽기·쓰기를 담당합니다.
  • Secondary: 프라이머리에서 데이터를 동기화하고, 장애 시 승격 후보이며 투표권이 있습니다.
  • Arbiter: 데이터는 동기화하지 않고 투표권만 갖습니다(실무에선 잘 안 씀).

노드들은 약 10초마다 heartbeat를 주고받습니다. 최소 3대 이상의 홀수 구성을 권장하는데, 이유는 선거가 과반 동의로 이뤄지기 때문이에요. 2대로 구성하면 프라이머리 장애 시 세컨더리 혼자로는 과반이 안 돼 선거 자체가 열리지 않습니다.

(쿠버네티스 위에서의 레플리카셋 구축은 별도 글에서 자세히 다뤘습니다.)

인증 관련 오류

not authorized on admin to execute command — 관리자 생성이 안 된 경우입니다.

use admin
db.createUser({ user: 'root', pwd: '비밀번호', roles: ['root'] })

requires authentication — 로그인만 하면 됩니다.

use admin
db.auth('root', '비밀번호')
// 이후 show dbs, show collections 정상 동작

두 DB 모두 “가용성”이 핵심 키워드예요. Redis는 슬롯 분산 + 슬레이브 승격으로, MongoDB는 홀수 레플리카셋의 선거로 장애를 견딥니다.