개요
로컬 환경에서 Redis Standalone 및 High Availability 외에도 클러스터 형태로 구성하는 방식에 대해서 탐색
클러스터 구성
클러스터는 물리적인 여러 노드를 묶어서 하나의 시스템으로 구성하는 것을 의미
1대의 서버로 갈 부하를 여러 대로 나누어 받을 수 있으며, 데이터를 노드에 읽고 쓰는 작업에 대해서 자동으로 샤딩을 지원
클러스터 없이 여러 노드를 묶기 위해선 인스턴스들을 대상으로 키를 분배하는 샤딩을 직접 구현
** 언어별 라이브러리에 따라 자동으로 구성해주기도 하나 대부분 Deprecated 되어 직접 구현해서 사용하거나, 최근에는 대부분 Redis Cluster를 권장하므로 클러스터를 구성하여 사용
Redis Cluster를 로컬에서 기동하기 위한 최소 설정 및 셋업을 기재
Config
port 6379
pidfile /var/run/redis_6379.pid
dbfilename dump.rdb
cluster-enabled yes
cluster-config-file nodes_6379.conf
cluster-node-timeout 3000
Plain Text
복사
port 6380
pidfile /var/run/redis_6380.pid
dbfilename dump.rdb
cluster-enabled yes
cluster-config-file nodes_6380.conf
cluster-node-timeout 3000
Plain Text
복사
port 6381
pidfile /var/run/redis_6381.pid
dbfilename dump.rdb
cluster-enabled yes
cluster-config-file nodes_6381.conf
cluster-node-timeout 3000
Plain Text
복사
클러스터를 구성하기 위한 최소 인스턴스 수는 3개이므로, 각각에 해당하는 설정 파일을 작성
각 파일의 port와 pidfile, 그리고 cluster-config-file에 대해서 상이하게 작성하여 구분지음
Redis Server
redis-server <redis-configuration-path>
redis-server ~/Desktop/redis_6379.conf
redis-server ~/Desktop/redis_6380.conf
redis-server ~/Desktop/redis_6381.conf
각 인스턴스들을 기존에 작성한 설정 파일을 이용하여 기동
Redis Cluster
redis-cli —cluster create <space-separated-endpoint>
redis-cli —cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381
** —cluster-replicas를 생략했으므로 슬레이브 노드는 구성하지 않고 오로지 마스터 노드로만 구성
위 명령어를 이용하여 클러스터 모드로 기동 중인 각 Redis 인스턴스들을 클러스터로 묶고, 데이터 읽기 쓰기를 위한 해시 슬롯을 할당 및 설정
데이터 읽기/쓰기
SET
클러스터를 대상으로 SET 명령어를 이용하여 키/값을 쓸 수 있음
작성한 키/값은 샤딩된 노드들을 대상으로 자동으로 분배
GET
클러스터를 대상으로 GET 명령어를 이용하여 키/값을 읽을 수 있음
읽은 키/값은 샤딩된 노드들을 대상으로 조회된 것으로, 키를 지정한 노드를 이용하지 않고 클러스터의 노드 중 하나를 대상으로 해도 조회 가능
주의 사항
Standalone은 구성 불가
클러스터를 구성하려는 노드들 중 하나라도 Redis 설정 파일에 클러스터 구성 설정이 되어 있지 않거나, Standalone으로 구성된 경우엔 클러스터 구성이 불가능
** 너무 당연한 것이긴한데, 아무 생각 없이 하다가 왜 안 되지 할 수도 있으므로 ㅎㅎ…
Multi-Get / Multi-Set
mget, mset은 여러 노드에 걸쳐 데이터를 읽고 써야하는데, 이는 Redis Cluster의 분산 아키텍쳐와 충돌되어 수행할 수 없음
** 스크립트를 이용하여 순차적으로 하나씩 반복하여 처리하는 대안 존재
참고자료
Redis Cluster 조작 방법