본문 바로가기

리눅스

우분투 24.04에서 Redis Cluster를 구성하는 방법

반응형

우분투 24.04에서 Redis Cluster를 구성하는 방법

1. 구성 환경

서버 구성

서버 Redis 인스턴스 비고
192.168.0.111 6381, 6382  
192.168.0.112 6381, 6382  
192.168.0.113 6381, 6382  

아키텍처(Redis Cluster)

        +---------------------+
        |     Client App      |
        +----------+----------+
                   |
           Redis Cluster
                   
   192.168.0.111:6381 (Master)
   192.168.0.112:6381 (Master)
   192.168.0.113:6381 (Master)

   192.168.0.111:6382 (Replica)
   192.168.0.112:6382 (Replica)
   192.168.0.113:6382 (Replica)

2. OS 커널 튜닝 확인

backlog 큐 확인

cat /proc/sys/net/core/somaxconn
65535

Transparent Huge Page 비활성화

cat /etc/rc.local | grep transparent_hugepage
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

메모리 overcommit 설정

sysctl vm.overcommit_memory

또는

cat /etc/sysctl.conf | grep overcommit_memory
vm.overcommit_memory=1

파일 디스크립터 설정

ulimit -n

또는

cat /etc/security/limits.conf | grep nofile
* soft nofile 65535
* hard nofile 65535

3. Redis 설치

Redis Repository 등록

curl -fsSL https://packages.redis.io/gpg \
  | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] \
  https://packages.redis.io/deb $(lsb_release -cs) main" \
  | sudo tee /etc/apt/sources.list.d/redis.list

패키지 업데이트

sudo apt update

Redis 설치

sudo apt install -y redis-server

버전 확인

redis-server --version

4. 기본 Redis 서비스 비활성화

Cluster 환경에서는 기본 Redis 서비스를 사용하지 않습니다.

sudo systemctl disable --now redis-server

5. Redis 데이터 디렉토리 생성

각 인스턴스별 데이터 디렉토리를 생성합니다.

sudo mkdir -pv /var/lib/redis/{6381,6382}

권한 설정

sudo chown redis:redis /var/lib/redis/6381
sudo chown redis:redis /var/lib/redis/6382

6. Redis 설정 파일 생성

redis6381.conf 생성

sudo tee /etc/redis/redis6381.conf > /dev/null <<'EOF'
cluster-enabled yes
cluster-node-timeout 3000
appendonly yes
appendfsync everysec
maxmemory 12gb
maxmemory-policy allkeys-lru
tcp-backlog 2048
loglevel verbose
EOF
더보기

---

sudo tee /etc/redis/redis6381.conf > /dev/null <<'EOF'
#################################
# Network
#################################

bind 0.0.0.0
port 6381
daemonize yes
protected-mode no

tcp-backlog 2048
tcp-keepalive 60
timeout 0

#################################
# Security
#################################

requirepass redis_password
masterauth redis_password

#################################
# File
#################################

dir /var/lib/redis/6381
pidfile /var/run/redis6381.pid
logfile "/var/log/redis/redis6381.log"

#################################
# Cluster
#################################

cluster-enabled yes
cluster-config-file nodes6381.conf
cluster-node-timeout 3000

#################################
# Persistence
#################################

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

dbfilename dump.rdb

save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error no

#################################
# RDB / AOF
#################################

rdbcompression yes
rdbchecksum yes
aof-use-rdb-preamble yes

#################################
# Memory / Performance
#################################

maxmemory 12gb
maxmemory-policy allkeys-lru

hz 10

#################################
# Logging
#################################

loglevel verbose

#################################
# 기타
#################################

supervised no
EOF

6382 포트는 port/pidfile/dir/logfile/cluster-config-file만 변경하여 동일하게 생성합니다.

cp /etc/redis/redis6381.conf /etc/redis/redis6382.conf
sed -i 's/port 6381/port 6382/' /etc/redis/redis6382.conf
sed -i 's/redis6381/redis6382/g' /etc/redis/redis6382.conf
sed -i 's/\/6381/\/6382/g' /etc/redis/redis6382.conf
sed -i 's/nodes6381.conf/nodes6382.conf/' /etc/redis/redis6382.conf

---

7. Redis 인스턴스 실행

각 인스턴스를 실행합니다.

redis-server /etc/redis/redis6381.conf
redis-server /etc/redis/redis6382.conf

프로세스 확인

ps -ef | grep redis

포트 확인

ss -lntp | grep redis
728x90

Redis 자동 시작 (systemd)

서비스 파일 생성

sudo tee /etc/systemd/system/redis6381.service > /dev/null <<'EOF'
[Unit]
Description=Redis 6381
After=network.target

[Service]
Type=simple
User=redis
ExecStart=/usr/bin/redis-server /etc/redis/redis6381.conf
ExecStop=/usr/bin/redis-cli -p 6381 shutdown
Restart=always

[Install]
WantedBy=multi-user.target
EOF

서비스 활성

systemctl daemon-reload
systemctl enable --now redis6381

8. Redis 설정 확인

Redis 접속

redis-cli -p 6381 -a redis_password

현재 설정 확인

CONFIG GET tcp-backlog
CONFIG GET maxmemory
CONFIG GET maxmemory-policy
CONFIG GET loglevel
127.0.0.1:6381> CONFIG GET tcp-backlog
1) "tcp-backlog"
2) "2048"
127.0.0.1:6381> CONFIG GET maxmemory
1) "maxmemory"
2) "12gb"
127.0.0.1:6381> CONFIG GET maxmemory-policy
1) "maxmemory-policy"
2) "allkeys-lru"
127.0.0.1:6381> CONFIG GET loglevel
1) "loglevel"
2) "verbose"

9. Redis Cluster 생성

Cluster 생성 명령

redis-cli --cluster create \
192.168.0.111:6381 \
192.168.0.111:6382 \
192.168.0.112:6381 \
192.168.0.112:6382 \
192.168.0.113:6381 \
192.168.0.113:6382 \
--cluster-replicas 1 \
-a redis_password

10. Cluster 상태 확인

Cluster 정보 확인

redis-cli -p 6381 -a redis_password cluster info

노드 확인

redis-cli -p 6381 -a redis_password cluster nodes
cluster_state:ok
cluster_slots_assigned:16384

11. Cluster 테스트

Cluster 모드로 접속

redis-cli -c -p 6381 -a redis_password

데이터 입력

SET testkey redis_cluster

조회

GET testkey

12. 운영 점검 명령

서버 상태

INFO

메모리

INFO memory

클라이언트

CLIENT LIST

Keyspace

INFO keyspace

성능

INFO stats

Replication

INFO replication

Slow Query

SLOWLOG GET 10

Cluster 상태

cluster info
cluster nodes

13. 노드 복구

기존 노드 재조인

redis-cli --cluster add-node \
192.168.0.114:6381 \
192.168.0.111:6381

Replica 추가

redis-cli --cluster add-node \
192.168.0.114:6382 \
192.168.0.111:6381 \
--cluster-slave

14. Redis에서 온라인으로 설정 변경하기

접속

redis-cli -p 6381 -a redis_password

설정 변경

127.0.0.1:6381> CONFIG SET maxmemory 12gb

127.0.0.1:6381> CONFIG SET maxmemory-policy allkeys-lru

127.0.0.1:6381> CONFIG SET loglevel verbose

설정 파일(redis.conf)에 영구 반영

127.0.0.1:6381> CONFIG REWRITE

 

728x90
반응형