Redis와 Kafka를 활용한 대규모 트래픽 처리 시스템 설계하기

Redis에 접속해서 명령어 사용해보기

Redis에 접속해서 명령어 사용해보기


Redis Cluster 구축 및 기본 명령어 사용하기

앞에서 Redis가 무엇인지와 주요 활용 사례를 살펴보았다.

이번에는 Docker Compose를 이용하여 Redis Cluster를 직접 구축하고, Redis CLI를 통해 서버 상태와 설정을 확인하는 기본 명령어를 실행해본다.

Redis는 단일 서버로도 사용할 수 있지만, 운영 환경에서는 고가용성과 확장성을 위해 Redis Cluster를 구성하는 경우가 많다.


Redis Cluster란?

Redis Cluster는 여러 Redis 노드를 하나의 클러스터로 구성하여 데이터를 분산 저장하는 기능이다.

데이터를 여러 노드에 분산함으로써 처리 성능을 높이고, 일부 노드에 장애가 발생하더라도 서비스를 계속 운영할 수 있다.

flowchart LR

    Client

    Cluster[Redis Cluster]

    Master1[(Master 1)]
    Master2[(Master 2)]
    Master3[(Master 3)]

    Replica1[(Replica 1)]
    Replica2[(Replica 2)]
    Replica3[(Replica 3)]

    Client --> Cluster

    Cluster --> Master1
    Cluster --> Master2
    Cluster --> Master3

    Master1 --> Replica1
    Master2 --> Replica2
    Master3 --> Replica3

이번 실습에서는 3개의 Master와 3개의 Replica, 총 6개의 Redis 노드로 Cluster를 구성한다.


Docker Compose 작성하기

Redis Cluster는 Docker Compose를 이용하면 간단하게 실행할 수 있다.

compose.yml

version: "3.9"

services:

  redis-cluster:

    container_name: redis-cluster-6

    image: grokzen/redis-cluster:7.0.15

    environment:
      - IP=0.0.0.0
      - BIND_ADDRESS=0.0.0.0
      - INITIAL_PORT=7001
      - MASTERS=3
      - SLAVES_PER_MASTER=1

    ports:
      - "7001-7006:7001-7006"

    volumes:
      - ./data/redis:/data
      - ./config/redis/0/redis.conf:/redis-conf/7001/redis.conf
      - ./config/redis/1/redis.conf:/redis-conf/7002/redis.conf
      - ./config/redis/2/redis.conf:/redis-conf/7003/redis.conf
      - ./config/redis/3/redis.conf:/redis-conf/7004/redis.conf
      - ./config/redis/4/redis.conf:/redis-conf/7005/redis.conf
      - ./config/redis/5/redis.conf:/redis-conf/7006/redis.conf

networks:

  my_network:

    driver: bridge

Docker 이미지는 Cluster 구성을 자동으로 수행하며, 실행과 동시에 6개의 Redis 노드를 생성한다.


주요 설정 살펴보기

INITIAL_PORT

INITIAL_PORT=7001

Redis Cluster가 사용할 첫 번째 포트이다.

이후 노드들은 다음과 같이 생성된다.

7001
7002
7003
7004
7005
7006

MASTERS

MASTERS=3

Master 노드 개수를 의미한다.

이번 실습에서는 Master가 3개 생성된다.


SLAVES_PER_MASTER

SLAVES_PER_MASTER=1

Master마다 Replica를 하나씩 생성한다.

결과적으로 다음과 같은 구조가 만들어진다.

MasterReplica
70017004
70027005
70037006

redis.conf 작성

각 Redis 노드는 동일한 설정 파일을 사용한다.

bind 0.0.0.0

port 7001

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

appendonly yes

dir /redis-data/7001

protected-mode no

주요 설정은 다음과 같다.

설정설명
bind외부 접속 허용
portRedis 실행 포트
cluster-enabledCluster 모드 활성화
cluster-config-fileCluster 메타데이터 저장
cluster-node-timeout노드 장애 감지 시간
appendonlyAOF 영속성 사용
dir데이터 저장 위치
protected-mode보호 모드 비활성화

프로젝트 폴더 구조

Redis 설정 파일은 다음과 같은 구조로 관리한다.

project

├── compose.yml

├── data
│   └── redis

└── config
    └── redis
        ├── 0
        │   └── redis.conf
        ├── 1
        │   └── redis.conf
        ├── 2
        │   └── redis.conf
        ├── 3
        │   └── redis.conf
        ├── 4
        │   └── redis.conf
        └── 5
            └── redis.conf

각 노드가 자신의 설정 파일을 사용하도록 Volume을 연결한다.


Redis Cluster 실행

Docker Compose를 실행한다.

docker-compose up --build -d

정상적으로 실행되면 Redis Cluster가 생성된다.

컨테이너 상태를 확인한다.

docker ps

예시

redis-cluster-6

Running 상태라면 정상적으로 실행된 것이다.


Redis CLI 접속

Redis CLI를 이용하여 Cluster에 접속한다.

docker exec -it redis-cluster-6 redis-cli -p 7001

또는 특정 호스트와 포트를 직접 지정할 수도 있다.

redis-cli -h localhost -p 7001

Redis 프롬프트가 나타나면 명령어를 입력할 수 있다.


서버 상태 확인

가장 먼저 Redis 서버가 정상적으로 동작하는지 확인해보자.

PING

정상적으로 실행 중이라면 다음과 같은 결과가 출력된다.

PONG

Redis 서버가 정상적으로 응답하고 있다는 의미이다.


서버 정보 확인

Redis 서버의 다양한 정보를 확인할 수 있다.

INFO

실행하면 다음과 같은 정보가 출력된다.

  • Redis 버전
  • 실행 시간(Uptime)
  • 메모리 사용량
  • CPU 사용량
  • 연결된 클라이언트 수
  • Cluster 정보

INFO 명령어는 Redis 서버를 운영할 때 가장 많이 사용하는 명령어 중 하나이다.


설정 값 조회

현재 Redis 설정을 조회할 수 있다.

예를 들어 최대 메모리 설정을 확인하려면 다음 명령어를 사용한다.

CONFIG GET maxmemory

출력 예시

1) "maxmemory"

2) "0"

0은 메모리 제한이 설정되지 않았다는 의미이다.


설정 값 변경

Redis는 실행 중에도 일부 설정을 변경할 수 있다.

예를 들어 최대 메모리를 512MB로 변경하려면 다음 명령어를 실행한다.

CONFIG SET maxmemory 512mb

변경 후 다시 조회하면 적용된 값을 확인할 수 있다.

CONFIG GET maxmemory

운영 환경에서는 메모리 사용량을 제어하기 위해 자주 사용하는 설정이다.


Cluster 상태 확인

Redis Cluster의 전체 상태를 확인하는 명령어이다.

CLUSTER INFO

출력 예시는 다음과 같다.

cluster_state:ok

cluster_slots_assigned:16384

cluster_known_nodes:6

cluster_size:3

각 항목의 의미는 다음과 같다.

항목설명
cluster_stateCluster 상태
cluster_slots_assigned할당된 Slot 개수
cluster_known_nodesCluster에 등록된 노드 수
cluster_sizeMaster 노드 개수

정상적인 Cluster라면 cluster_state:ok가 출력된다.


Redis Cluster 구조 이해하기

Redis Cluster는 데이터를 16384개의 Hash Slot으로 나누어 관리한다.

각 Master 노드가 일부 Slot을 담당하며, 데이터는 Slot 기준으로 저장된다.

flowchart LR

    Slot["16384 Hash Slots"]

    Master1[(Master 7001)]

    Master2[(Master 7002)]

    Master3[(Master 7003)]

    Slot --> Master1
    Slot --> Master2
    Slot --> Master3

Client는 Key를 기준으로 Hash Slot을 계산한 뒤, 해당 Slot을 담당하는 Master 노드에 데이터를 저장한다.


자주 사용하는 Redis 관리 명령어

명령어설명
PING서버 상태 확인
INFO서버 정보 조회
CONFIG GET설정 조회
CONFIG SET설정 변경
CLUSTER INFOCluster 상태 조회

이 명령어들은 Redis를 운영하거나 장애를 점검할 때 가장 많이 사용된다.


정리

이번에는 Docker Compose를 이용하여 Redis Cluster를 구성하고, Redis CLI를 사용하여 서버와 Cluster 상태를 확인해보았다.

또한 PING, INFO, CONFIG GET, CONFIG SET, CLUSTER INFO와 같은 기본 명령어를 통해 Redis 서버의 상태와 설정을 확인하는 방법도 살펴보았다.

Redis를 운영할 때는 이러한 기본 명령어를 익혀두면 서버 상태를 빠르게 점검하고 문제를 진단하는 데 큰 도움이 된다.


한 줄 요약

Docker Compose를 이용하면 Redis Cluster를 손쉽게 구성할 수 있으며, Redis CLI의 PING, INFO, CONFIG, CLUSTER INFO 명령어를 통해 서버와 클러스터의 상태를 효율적으로 관리할 수 있다.


© 2020. All rights reserved.

SIKSIK