🐤 study/etc

Mac에서 Redis Cluster 구성 가이드: 실행/종료/노드상태 확인까지 (+ start/stop 스크립트)

budtree 2025. 5. 17. 15:20

🎧 작업할때 들은 플리

𝚙𝚕𝚊𝚢𝚕𝚒𝚜𝚝 말랑해지고 싶은 날🍑 피치톤 하루에 어울리는 멜로우 팝송 플리 soft & sweet mellow mood Playlist🧃🎧

 

 


 

회사 pc 환경이 window라서 맥북에 레디스를 설치해본 적이 없는데, 맥북 레디스 환경을 구축하면서 가이드를 정리해두려고 한다.

(안하면 또 까먹기 때문)

 

공식 홈페이지에서는 brew를 사용하라고 가이드되어있다.

https://redis.io/docs/latest/operate/oss_and_stack/install/archive/install-redis/install-redis-on-mac-os/

 

Install Redis on macOS

Use Homebrew to install and start Redis on macOS

redis.io

 

brew install redis #설치 명령어
brew services start redis # 실행 명령어
brew services stop redis # 실행중지 명령어

 

redis 실행 명령어

 

 

redis 접속 명령어: redis-cli

 

redis info를 보면 기본 정보를 확인할 수 있는데 기본설치된 버전은 8.0.1이고 standalone으로 설치된 것을 확인할 수 있다.

나는 기본적으로 클러스터 환경을 구성하고 싶어서 추가적인 설정을 할거다.

 

보통 레디스 클러스터를 로컬에서 테스트용으로 구축할때에는 최소 3대의 마스터, 3대의 slave로 구성한다고 한다.

 

redis-cluster 디렉토리를 생성하고, 각 노드가 될 포트를 7000~7005까지 지정해서 그 폴더를 만들어줄거다.

(노드 한대씩 각각의 conf 설정이 필요해서 디렉토리를 분리해야한다.)

 

cd ~/redis-cluster
for port in 7000 7001 7002 7003 7004 7005; do
  cp /opt/homebrew/etc/redis.conf $port/redis.conf
done

이제 각각의 디렉토리 안데 redis.conf 설정값을 복사해서 집어넣어줄거다. 위의 명령어를 실행하면 각각의 폴더에 기본 셋팅된 redis.conf의 파일들이 복사될건데, 여기서 각 설정파일의 포트와 설정을 수정해줘야 한다.

 

6379로 지정되어있는 모습, 각 부모폴더의 포트로 변경해줘야한다.)

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no

위의 설정값들이 기본적으로 cluster 환경에 필요한 값들인데 이것들을 일일히 폴더별로 접근해서 수정하기 귀찮아서 쉘스크립트를 (gpt가) 만들었다.

 

#!/bin/bash

# 원본 설정파일 경로
TEMPLATE_CONF="/opt/homebrew/etc/redis.conf"  # 또는 원하시는 경로로 수정

# 클러스터 포트 범위
PORTS=(7000 7001 7002 7003 7004 7005)

# 클러스터 기준 디렉토리
BASE_DIR=~/redis-cluster

mkdir -p "$BASE_DIR"

for PORT in "${PORTS[@]}"
do
  TARGET_DIR="$BASE_DIR/$PORT"
  mkdir -p "$TARGET_DIR"
  TARGET_CONF="$TARGET_DIR/redis.conf"

  # 원본 설정 복사
  cp "$TEMPLATE_CONF" "$TARGET_CONF"

  # 포트 및 클러스터 관련 설정 덮어쓰기
  sed -i '' "s/^port .*/port $PORT/" "$TARGET_CONF"
  sed -i '' "s/^#* *cluster-enabled .*/cluster-enabled yes/" "$TARGET_CONF"
  sed -i '' "s/^#* *cluster-config-file .*/cluster-config-file nodes.conf/" "$TARGET_CONF"
  sed -i '' "s/^#* *cluster-node-timeout .*/cluster-node-timeout 5000/" "$TARGET_CONF"
  sed -i '' "s/^#* *appendonly .*/appendonly yes/" "$TARGET_CONF"
  sed -i '' "s/^#* *daemonize .*/daemonize no/" "$TARGET_CONF"

  # dir 경로도 해당 포트 디렉토리로 설정
  if grep -q "^dir " "$TARGET_CONF"; then
    sed -i '' "s|^dir .*|dir $TARGET_DIR|" "$TARGET_CONF"
  else
    echo "dir $TARGET_DIR" >> "$TARGET_CONF"
  fi

  echo "✔️ $TARGET_CONF 생성 및 수정 완료"
done

echo "✅ 모든 redis.conf가 포트별로 수정되었습니다."

 

 

역시 돈이 좋다.

 

 

이제 설정은 다 됐고 각 노드를 실행해서 클러스터를 생성할거다.

start_cluster.sh

#!/bin/bash

BASE_DIR=~/redis-cluster
PORTS=(7000 7001 7002 7003 7004 7005)

for PORT in "${PORTS[@]}"
do
  CONF="$BASE_DIR/$PORT/redis.conf"
  echo "Starting Redis on port $PORT..."
  redis-server "$CONF" &
done

echo "All Redis instances started."

각 노드 레디스를 일괄적으로 백그라운드에서 실행하는 스크립트다.

해당 쉘스크립트를 실행하게되면 7000~7005번의 레디스 서버가 클러스터 모드로 잘 실행된 것을 확인할 수 있다. 이제 이 6대의 레디스를 묶어줘야 한다.

 

현재 7000번 포트에서 실행 중인 노드는 myself, master로 표시되며, 클러스터에 포함된 다른 노드의 정보는 보이지 않는 상태이다. 아직 클러스터가 형성되지 않았고 단일 노드만 standalone 상태로 떠있는거다.

모든 노드를 클러스터로 묶어주는 작업이 이후에 필요하다.

redis-cli --cluster create \\
  127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \\
  127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \\
  --cluster-replicas 1

총 6개 노드를 클러스터에 포함시키는 명령어로, 각 마스터노드 당 slave 1개를 구성하게 된다.

 

이제 레디스 클러스터에 접속해서 노드 구조를 확인하면 7000~7005번의 노드들이 하나의 클러스터에 묶여있는 것을 확인할 수 있다.

 

master가 3개, slave가 3개로 잘 적용된 것을 확인할 수 있다.

+) stop_cluster.sh

#!/bin/bash

PORTS=(7000 7001 7002 7003 7004 7005)

for PORT in "${PORTS[@]}"
do
  echo "Stopping Redis on port $PORT..."
  redis-cli -p $PORT shutdown
done

echo "All Redis instances stopped."

레디스 클러스터 테스트가 끝난 이후에는 불필요한 자원을 소모하지 않도록 stop_cluster.sh를 실행해서 모든 노드를 종료해주자!!