본문 바로가기

리눅스

[draft] Redis의 주요 구성 방법

728x90

Redis의 주요 구성 방법

Redis Standalone : 단일 Redis 인스턴스로 간단하지만 장애 복구가 없습니다.

Redis Master-Slave : 데이터 복제가 가능하지만 장애 복구는 수동입니다.

Redis Sentinel : 고가용성을 제공하며 장애 발생 시 자동으로 슬레이브를 마스터로 승격합니다.

Redis Cluster : 데이터 분산과 복제를 통해 확장성 및 고가용성을 제공합니다.

커널 파라미터 조정

더보기

---

메모리 오버커밋 설정

sudo tee -a /etc/sysctl.conf <<EOF

# 메모리 오버커밋 설정
vm.overcommit_memory = 1
EOF

또는

sudo sysctl vm.overcommit_memory=1

Transparent Huge Pages(THP) 비활성화

echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag

파일 디스크립터 수 증가

sudo tee -a /etc/security/limits.conf <<EOF

# 파일 디스크립터 수 증가
*		soft	nofile		65535
*		hard	nofile		65535
EOF

또는

sudo ulimit -n 65535

TCP 연결 유지 시간 줄이기

sudo tee -a /etc/sysctl.conf <<EOF

# TCP 연결 유지 시간 줄이기
net.ipv4.tcp_tw_reuse = 1
EOF

TCP Keepalive 시간 조정

sudo tee -a /etc/sysctl.conf <<EOF

# TCP Keepalive 시간 조정
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 5
EOF

Swappiness 줄이기

sudo tee -a /etc/sysctl.conf <<EOF

# Swappiness 줄이기
vm.swappiness = 1
EOF
sudo sysctl -p

SWAP 메모리 비활성화

sudo sed -i '/^\/swap.img/s/^/#/' /etc/fstab
sudo swapoff -a

시스템 재기동

sudo reboot

---

Redis 설치 및 설정

Redis 설치

sudo apt update
sudo apt install -y redis-server
redis-server --version

Redis 설정

vim /etc/redis/redis.conf
bind 0.0.0.0                     # 모든 IP에서 접속 허용
port 6379                        # Redis 기본 포트

requirepass "your_secure_password"  # 비밀번호 설정 (보안상 중요)
protected-mode yes               # 보호 모드 활성화 (외부 접근 시 보안 고려)

tcp-backlog 511                  # TCP 백로그 설정
timeout 300                      # 클라이언트 연결 타임아웃 (300초)
tcp-keepalive 60                 # TCP Keepalive 시간

daemonize yes                    # 백그라운드에서 실행

loglevel notice                  # 로그 레벨
logfile /var/log/redis/redis-server.log  # 로그 파일 경로

dbfilename dump.rdb              # RDB 파일 이름
dir /var/lib/redis               # 데이터 파일 저장 경로

maxmemory 2gb                    # 최대 메모리 사용량
maxmemory-policy allkeys-lru     # LRU 정책 설정

save 900 1                        # 15분마다 1개 이상의 키가 변경되면 스냅샷 저장
save 300 10                       # 5분마다 10개 이상의 키가 변경되면 스냅샷 저장
save 60 10000                     # 1분마다 10000개 이상의 키가 변경되면 스냅샷 저장

appendonly yes                    # AOF 활성화
appendfilename "appendonly.aof"   # AOF 파일 이름
appenddirname "aof" # AOF 디렉토리 이름(Redis 7.0 버전 이상 지원)
appendfsync everysec              # AOF 동기화 설정
aof-use-rdb-preamble yes          # AOF 재시작 시 RDB 우선 사용
sudo mkdir -p /var/lib/redis/aof
sudo chown redis:redis /var/lib/redis/aof

systemd 서비스 파일 설정

sudo vim /etc/systemd/system/redis.service
[Service]
...
TimeoutStartSec=30           # 서비스 시작에 대한 최대 대기 시간 (초)
TimeoutStopSec=30            # 서비스 종료에 대한 최대 대기 시간 (초)

Redis 실행 및 확인

sudo systemctl daemon-reload
sudo systemctl --now enable redis-server
sudo systemctl status redis-server

성능 테스트 및 모니터링

redis-cli ping
redis-benchmark -q -n 1000 -c 10 -P 5

Redis Standalone 구성

Standalone 모드는 단일 Redis 인스턴스를 실행하는 가장 간단한 구성입니다. 개발 환경이나 소규모 애플리케이션에서 사용되며 단일 장애점(Single Point of Failure)이 존재합니다.

1. Redis 설정

redis.conf 파일에서 필요한 설정을 수정합니다.

기본 설정으로도 충분하지만 외부 접속을 허용하려면 bind 및 protected-mode를 수정합니다.

vim /etc/redis/redis.conf
더보기

---

redis.conf 설정 파일

sudo tee /etc/redis/redis.conf <<EOF
bind 0.0.0.0
port 6379

protected-mode no

tcp-backlog 511
timeout 300
tcp-keepalive 60

daemonize yes

loglevel notice
logfile /var/log/redis/redis-server.log

dbfilename dump.rdb

dir /var/lib/redis

maxmemory 2gb
maxmemory-policy allkeys-lru

save 900 1
save 300 10
save 60 10000

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

aof-use-rdb-preamble yes
EOF

---

2. Redis 실행 및 확인

sudo systemctl status redis-server
redis-cli ping

Redis Master-Slave(Master-Replica) 구성

Master-Slave 모드는 데이터 복제 기능을 제공하여 마스터 서버의 데이터를 슬레이브 서버로 복제합니다. 마스터 서버는 쓰기 작업을 처리하고 슬레이브 서버는 읽기 작업을 처리합니다. 장애 복구는 자동화되지 않고 수동으로 이루어집니다.

1. 마스터 서버 설정

마스터 서버는 기본적으로 standalone Redis 서버와 동일하게 설정됩니다.

더보기

---

sudo tee /etc/redis/redis.conf <<EOF
bind 0.0.0.0
port 6379

protected-mode no

tcp-backlog 511
timeout 300
tcp-keepalive 60

daemonize yes

loglevel notice
logfile /var/log/redis/redis-server.log

dbfilename dump.rdb

dir /var/lib/redis

maxmemory 2gb
maxmemory-policy allkeys-lru

save 900 1
save 300 10
save 60 10000

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

aof-use-rdb-preamble yes
EOF

---

2. 슬레이브 서버 설정

슬레이브 서버는 redis.conf 파일에서 마스터 서버를 지정해야 합니다.

vim /etc/redis/redis.conf
더보기

---

save 설정 비활성화(RDB 파일을 생성하지 않음)

sudo tee /etc/redis/redis.conf <<EOF
bind 0.0.0.0
port 6379

protected-mode no

tcp-backlog 511
timeout 300
tcp-keepalive 60

daemonize yes

loglevel notice
logfile /var/log/redis/redis-server.log

dbfilename dump.rdb

dir /var/lib/redis

maxmemory 2gb
maxmemory-policy allkeys-lru

save ""

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

aof-use-rdb-preamble yes

slaveof 192.168.10.111 6379
slave-read-only yes
EOF

save 설정 활성화(RDB 파일 생성)

sudo tee /etc/redis/redis.conf <<EOF
bind 0.0.0.0
port 6379

protected-mode no

tcp-backlog 511
timeout 300
tcp-keepalive 60

daemonize yes

loglevel notice
logfile /var/log/redis/redis-server.log

dbfilename dump.rdb

dir /var/lib/redis

maxmemory 2gb
maxmemory-policy allkeys-lru

save 900 1
save 300 10
save 60 10000

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

aof-use-rdb-preamble yes

slaveof 192.168.10.111 6379
slave-read-only yes
EOF

---

# 슬레이브 설정
slaveof <master-ip> 6379
# 읽기 전용 설정 (필요 시)
slave-read-only yes

3. 실행 및 확인

슬레이브 서버가 마스터 서버의 데이터를 복제하고 있는지 확인합니다.

 

마스터 서버에서 클라이언트 접속

redis-cli -h <master-ip> info replication

출력에서 connected_slaves가 1 이상이어야 슬레이브가 연결된 것을 의미합니다.

$ redis-cli -h 192.168.10.111 info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.10.112,port=6379,state=online,offset=0,lag=5
master_replid:859ba84849e72a19d5a4b4d83d4ea252e1bb4f33
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14

슬레이브 서버에서 확인

redis-cli -h <slave-ip> info replication

출력에서 role:slave가 보이면 해당 서버가 슬레이브로 설정되었음을 의미합니다.

$ redis-cli -h 192.168.10.112 info replication
# Replication
role:slave
master_host:192.168.10.111
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1
master_link_down_since_seconds:1729002316
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:4f5a7e414c8fee9f199e6044fc1b416768076283
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

Redis Sentinel 구성

Sentinel 모드는 고가용성을 위한 구성이며 마스터 서버에 장애가 발생하면 자동으로 슬레이브를 새로운 마스터로 승격시킵니다. Sentinel은 마스터 장애 감지 및 자동 장애 복구 기능을 제공합니다.

1. 마스터-슬레이브 구성

기본적으로 Master-Slave 구성이 선행되어야 합니다.

더보기

---

마스터

sudo tee /etc/redis/redis.conf <<EOF
bind 0.0.0.0
port 6379

protected-mode no

tcp-backlog 511
timeout 300
tcp-keepalive 60

daemonize yes

loglevel notice
logfile /var/log/redis/redis-server.log

dbfilename dump.rdb

dir /var/lib/redis

maxmemory 2gb
maxmemory-policy allkeys-lru

save 900 1
save 300 10
save 60 10000

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

aof-use-rdb-preamble yes
EOF

슬레이브1, 2

sudo tee /etc/redis/redis.conf <<EOF
bind 0.0.0.0
port 6379

protected-mode no

tcp-backlog 511
timeout 300
tcp-keepalive 60

daemonize yes

loglevel notice
logfile /var/log/redis/redis-server.log

dbfilename dump.rdb

dir /var/lib/redis

maxmemory 2gb
maxmemory-policy allkeys-lru

save ""

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

aof-use-rdb-preamble yes

slaveof 192.168.10.111 6379
slave-read-only yes
EOF

마스터 - Replication 정보 확인

$ redis-cli -h 192.168.10.111 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.10.112,port=6379,state=online,offset=294,lag=1
slave1:ip=192.168.10.113,port=6379,state=online,offset=294,lag=1
master_replid:2d402e8fef55ad9128716f580d4dde47461466c9
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:308
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:308

슬레이브1 - Replication 정보 확인

$ redis-cli -h 192.168.10.112 info replication
# Replication
role:slave
master_host:192.168.10.111
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:322
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:2d402e8fef55ad9128716f580d4dde47461466c9
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:322
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:322

슬레이브2 - Replication 정보 확인

$ redis-cli -h 192.168.10.113 info replication
# Replication
role:slave
master_host:192.168.10.111
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:336
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:2d402e8fef55ad9128716f580d4dde47461466c9
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:336
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:253
repl_backlog_histlen:84

---

2. Sentinel 설치

sudo apt update
sudo apt install -y redis-sentinel
redis-sentinel --version

3. Sentinel 설정

각 센티널 인스턴스는 sentinel.conf 파일을 사용하여 설정합니다.

sudo vim /etc/redis/sentinel.conf
bind 0.0.0.0

protected-mode no

port 26379

daemonize yes

pidfile "/var/run/sentinel/redis-sentinel.pid"

logfile "/var/log/redis/redis-sentinel.log"

dir "/var/lib/redis"

sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 15000

quorum은 마스터의 장애를 감지하기 위한 센티널의 최소 개수입니다.

더보기

---

sudo tee /etc/redis/sentinel.conf <<EOF
bind 0.0.0.0

protected-mode no

port 26379

daemonize yes

pidfile "/var/run/sentinel/redis-sentinel.pid"

logfile "/var/log/redis/redis-sentinel.log"

dir "/var/lib/redis"

sentinel monitor mymaster 192.168.10.111 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 15000
EOF

---

4. Sentinel 실행

sudo systemctl --now enable redis-sentinel
sudo systemctl start redis-sentinel
sudo systemctl stop redis-sentinel
sudo systemctl restart redis-sentinel
sudo systemctl status redis-sentinel

5. Sentinel 작동 확인

마스터 정보 확인

redis-cli -p 26379 sentinel masters
더보기

---

$ redis-cli -p 26379 sentinel masters
1)  1) "name"
    2) "mymaster"
    3) "ip"
    4) "192.168.10.111"
    5) "port"
    6) "6379"
    7) "runid"
    8) "ea8bee8affb530f6171066bfad9cb950d08a29f3"
    9) "flags"
   10) "master"
   11) "link-pending-commands"
   12) "0"
   13) "link-refcount"
   14) "1"
   15) "last-ping-sent"
   16) "0"
   17) "last-ok-ping-reply"
   18) "853"
   19) "last-ping-reply"
   20) "853"
   21) "down-after-milliseconds"
   22) "5000"
   23) "info-refresh"
   24) "2448"
   25) "role-reported"
   26) "master"
   27) "role-reported-time"
   28) "82784"
   29) "config-epoch"
   30) "0"
   31) "num-slaves"
   32) "2"
   33) "num-other-sentinels"
   34) "2"
   35) "quorum"
   36) "2"
   37) "failover-timeout"
   38) "15000"
   39) "parallel-syncs"
   40) "1"

---

슬레이브 정보 확인

redis-cli -p 26379 sentinel slaves mymaster
더보기

---

$ redis-cli -p 26379 sentinel slaves mymaster
1)  1) "name"
    2) "192.168.10.113:6379"
    3) "ip"
    4) "192.168.10.113"
    5) "port"
    6) "6379"
    7) "runid"
    8) "bd209fb89e58eb35f41e7ee89de93c5b786acd7b"
    9) "flags"
   10) "slave"
   11) "link-pending-commands"
   12) "0"
   13) "link-refcount"
   14) "1"
   15) "last-ping-sent"
   16) "0"
   17) "last-ok-ping-reply"
   18) "323"
   19) "last-ping-reply"
   20) "323"
   21) "down-after-milliseconds"
   22) "5000"
   23) "info-refresh"
   24) "5787"
   25) "role-reported"
   26) "slave"
   27) "role-reported-time"
   28) "116289"
   29) "master-link-down-time"
   30) "0"
   31) "master-link-status"
   32) "ok"
   33) "master-host"
   34) "192.168.10.111"
   35) "master-port"
   36) "6379"
   37) "slave-priority"
   38) "100"
   39) "slave-repl-offset"
   40) "113946"
2)  1) "name"
    2) "192.168.10.112:6379"
    3) "ip"
    4) "192.168.10.112"
    5) "port"
    6) "6379"
    7) "runid"
    8) "9a977c1518fff20e2caea4e66aa9fd2f681e2bbc"
    9) "flags"
   10) "slave"
   11) "link-pending-commands"
   12) "0"
   13) "link-refcount"
   14) "1"
   15) "last-ping-sent"
   16) "0"
   17) "last-ok-ping-reply"
   18) "324"
   19) "last-ping-reply"
   20) "324"
   21) "down-after-milliseconds"
   22) "5000"
   23) "info-refresh"
   24) "5788"
   25) "role-reported"
   26) "slave"
   27) "role-reported-time"
   28) "116303"
   29) "master-link-down-time"
   30) "0"
   31) "master-link-status"
   32) "ok"
   33) "master-host"
   34) "192.168.10.111"
   35) "master-port"
   36) "6379"
   37) "slave-priority"
   38) "100"
   39) "slave-repl-offset"
   40) "113946"

---

5. Failover 테스트

마스터 서버를 종료하여 센티널이 자동으로 슬레이브를 마스터로 승격시키는지 확인합니다.

Redis Cluster 구성

Cluster 모드는 대규모 데이터 분산과 고가용성을 제공하는 방식입니다. 각 마스터는 데이터를 나누어 저장하며 데이터를 슬레이브로 복제합니다. 장애 복구와 데이터 분산이 모두 자동으로 처리됩니다.

테스트 환경

서버 이름 아이피 주소 Redis 인스턴스
node1 192.168.10.111 인스턴스 6379(master) 인스턴스 6380(slave) 인스턴스 6381(slave)
node2 192.168.10.112 인스턴스 6379(master) 인스턴스 6380(slave) 인스턴스 6381(slave)
node3 192.168.10.113 인스턴스 6379(master) 인스턴스 6380(slave) 인스턴스 6381(slave)

1. Redis 클러스터 모드 설정

Redis 서비스 중지(종료)

sudo systemctl stop redis-server

각 Redis 노드에서 redis.conf 파일을 수정하여 클러스터 모드를 활성화합니다.

vim redis.conf
bind 0.0.0.0

port 6379

daemonize yes

dir /var/lib/redis

cluster-enabled yes         # Redis 클러스터 활성화
cluster-config-file nodes.conf  # 클러스터 설정 파일
cluster-node-timeout 5000   # 클러스터 타임아웃 (5초)

appendonly yes              # AOF 활성화
appendfilename "appendonly.aof" 
appendfsync everysec        # 1초마다 동기화
sudo cp /etc/redis/redis.conf /etc/redis/6380.conf
sudo cp /etc/redis/redis.conf /etc/redis/6381.conf
더보기

---

6379 포트

sudo tee /etc/redis/redis.conf <<EOF
bind 0.0.0.0

port 6379

daemonize yes

dir /var/lib/redis

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

appendonly yes
appendfilename "appendonly.aof" 
appendfsync everysec
EOF

6380 포트

sudo tee /etc/redis/6380.conf <<EOF
bind 0.0.0.0

port 6380

daemonize yes

dir /var/lib/redis

cluster-enabled yes
cluster-config-file nodes-6380.conf
cluster-node-timeout 5000

appendonly yes
appendfilename "6380.aof" 
appendfsync everysec
EOF

6381 포트

sudo tee /etc/redis/6381.conf <<EOF
bind 0.0.0.0

port 6381

daemonize yes

dir /var/lib/redis

cluster-enabled yes
cluster-config-file nodes-6381.conf
cluster-node-timeout 5000

appendonly yes
appendfilename "6381.aof" 
appendfsync everysec
EOF

 

---

2. Redis 인스턴스 실행

클러스터를 구성할 여러 Redis 노드를 실행합니다. 각 노드는 서로 다른 포트에서 실행됩니다.

 

node1, node2, node3

sudo redis-server /etc/redis/redis.conf

node1, node2, node3

sudo redis-server /etc/redis/6380.conf

node1, node2, node3

sudo redis-server /etc/redis/6381.conf

3. 클러스터 생성

node1에서 클러스터를 생성합니다.

--cluster create 명령어로 마스터와 슬레이브를 지정할 수 있습니다.

redis-cli --cluster create \
<node1-ip>:<port1_6379> \
<node1-ip>:<port2_6380> \
<node1-ip>:<port3_6381> \
<node2-ip>:<port1_6379> \
<node2-ip>:<port2_6380> \
<node2-ip>:<port3_6381> \
<node3-ip>:<port1_6379> \
<node3-ip>:<port2_6380> \
<node3-ip>:<port3_6381> \
--cluster-replicas 2
redis-cli --cluster create \
192.168.10.111:6379 192.168.10.111:6380 192.168.10.111:6381 \
192.168.10.112:6379 192.168.10.112:6380 192.168.10.112:6381 \
192.168.10.113:6379 192.168.10.113:6380 192.168.10.113:6381 \
--cluster-replicas 2
더보기

---

$ redis-cli --cluster create \
192.168.10.111:6379 192.168.10.111:6380 192.168.10.111:6381 \
192.168.10.112:6379 192.168.10.112:6380 192.168.10.112:6381 \
192.168.10.113:6379 192.168.10.113:6380 192.168.10.113:6381 \
--cluster-replicas 2
>>> Performing hash slots allocation on 9 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.10.112:6380 to 192.168.10.111:6379
Adding replica 192.168.10.113:6380 to 192.168.10.111:6379
Adding replica 192.168.10.111:6381 to 192.168.10.112:6379
Adding replica 192.168.10.113:6381 to 192.168.10.112:6379
Adding replica 192.168.10.112:6381 to 192.168.10.113:6379
Adding replica 192.168.10.111:6380 to 192.168.10.113:6379
M: a486ba6f98727c72b1bf9aca1fe5cde0c84642c9 192.168.10.111:6379
   slots:[0-5460] (5461 slots) master
S: 2fcba5fa0fdce3b5d0224cdf96d24538fe0caafa 192.168.10.111:6380
   replicates 0a9956984cfd1307010e544cffa4108c8ebc4dc4
S: 2c9698066673e4339ad109e64c7a5eca6636d97f 192.168.10.111:6381
   replicates f6dceeb4023c32170dd46d3cbcaa56c2368a2b03
M: f6dceeb4023c32170dd46d3cbcaa56c2368a2b03 192.168.10.112:6379
   slots:[5461-10922] (5462 slots) master
S: ba364a582bc863cbd9cdf54cd8597c29a448d141 192.168.10.112:6380
   replicates a486ba6f98727c72b1bf9aca1fe5cde0c84642c9
S: 11c9e837d887910357d8c5afbd6105004bbd18c2 192.168.10.112:6381
   replicates 0a9956984cfd1307010e544cffa4108c8ebc4dc4
M: 0a9956984cfd1307010e544cffa4108c8ebc4dc4 192.168.10.113:6379
   slots:[10923-16383] (5461 slots) master
S: 3fcd9d429df5e274b21daac86cbf46292619dbeb 192.168.10.113:6380
   replicates a486ba6f98727c72b1bf9aca1fe5cde0c84642c9
S: 530aa708674f112778842ac8c8358c42c7034873 192.168.10.113:6381
   replicates f6dceeb4023c32170dd46d3cbcaa56c2368a2b03
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.168.10.111:6379)
M: a486ba6f98727c72b1bf9aca1fe5cde0c84642c9 192.168.10.111:6379
   slots:[0-5460] (5461 slots) master
   2 additional replica(s)
S: 2fcba5fa0fdce3b5d0224cdf96d24538fe0caafa 192.168.10.111:6380
   slots: (0 slots) slave
   replicates 0a9956984cfd1307010e544cffa4108c8ebc4dc4
M: f6dceeb4023c32170dd46d3cbcaa56c2368a2b03 192.168.10.112:6379
   slots:[5461-10922] (5462 slots) master
   2 additional replica(s)
M: 0a9956984cfd1307010e544cffa4108c8ebc4dc4 192.168.10.113:6379
   slots:[10923-16383] (5461 slots) master
   2 additional replica(s)
S: 11c9e837d887910357d8c5afbd6105004bbd18c2 192.168.10.112:6381
   slots: (0 slots) slave
   replicates 0a9956984cfd1307010e544cffa4108c8ebc4dc4
S: 3fcd9d429df5e274b21daac86cbf46292619dbeb 192.168.10.113:6380
   slots: (0 slots) slave
   replicates a486ba6f98727c72b1bf9aca1fe5cde0c84642c9
S: 2c9698066673e4339ad109e64c7a5eca6636d97f 192.168.10.111:6381
   slots: (0 slots) slave
   replicates f6dceeb4023c32170dd46d3cbcaa56c2368a2b03
S: ba364a582bc863cbd9cdf54cd8597c29a448d141 192.168.10.112:6380
   slots: (0 slots) slave
   replicates a486ba6f98727c72b1bf9aca1fe5cde0c84642c9
S: 530aa708674f112778842ac8c8358c42c7034873 192.168.10.113:6381
   slots: (0 slots) slave
   replicates f6dceeb4023c32170dd46d3cbcaa56c2368a2b03
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

---

4. 클러스터 상태 확인

클러스터의 상태를 확인하려면 클러스터 모드로 redis-cli를 실행합니다.

redis-cli -c -h <node-ip> -p <port> cluster nodes
redis-cli -c -h 192.168.10.111 -p 6379 cluster nodes
$ redis-cli -c -h 192.168.10.111 -p 6379 cluster nodes
2fcba5fa0fdce3b5d0224cdf96d24538fe0caafa 192.168.10.111:6380@16380 slave 0a9956984cfd1307010e544cffa4108c8ebc4dc4 0 1729068440383 7 connected
f6dceeb4023c32170dd46d3cbcaa56c2368a2b03 192.168.10.112:6379@16379 master - 0 1729068440000 4 connected 5461-10922
0a9956984cfd1307010e544cffa4108c8ebc4dc4 192.168.10.113:6379@16379 master - 0 1729068439000 7 connected 10923-16383
11c9e837d887910357d8c5afbd6105004bbd18c2 192.168.10.112:6381@16381 slave 0a9956984cfd1307010e544cffa4108c8ebc4dc4 0 1729068439000 7 connected
3fcd9d429df5e274b21daac86cbf46292619dbeb 192.168.10.113:6380@16380 slave a486ba6f98727c72b1bf9aca1fe5cde0c84642c9 0 1729068441036 1 connected
a486ba6f98727c72b1bf9aca1fe5cde0c84642c9 192.168.10.111:6379@16379 myself,master - 0 1729068440000 1 connected 0-5460
2c9698066673e4339ad109e64c7a5eca6636d97f 192.168.10.111:6381@16381 slave f6dceeb4023c32170dd46d3cbcaa56c2368a2b03 0 1729068439599 4 connected
ba364a582bc863cbd9cdf54cd8597c29a448d141 192.168.10.112:6380@16380 slave a486ba6f98727c72b1bf9aca1fe5cde0c84642c9 0 1729068439600 1 connected
530aa708674f112778842ac8c8358c42c7034873 192.168.10.113:6381@16381 slave f6dceeb4023c32170dd46d3cbcaa56c2368a2b03 0 1729068439902 4 connected

클러스터 상태 확인

redis-cli -c -h 192.168.10.111 -p 6379 cluster info
$ redis-cli -c -h 192.168.10.111 -p 6379 cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:9
cluster_size:3
cluster_current_epoch:9
cluster_my_epoch:1
cluster_stats_messages_ping_sent:159
cluster_stats_messages_pong_sent:165
cluster_stats_messages_sent:324
cluster_stats_messages_ping_received:156
cluster_stats_messages_pong_received:159
cluster_stats_messages_meet_received:9
cluster_stats_messages_received:324

한 번에 redis-server 중지

ps -ef | grep -v grep | grep redis-server | awk '{print $2}' | xargs kill -9

특정 포트의 Redis 서버 종료

redis-cli -h 127.0.0.1 -p 6379 shutdown

Redis 클러스트 정보 삭제

sudo rm -f /var/lib/redis/nodes*.conf

 

각 구성은 필요에 맞게 선택할 수 있으며 서비스 규모나 중요도에 따라 구 방식을 결정하는 것이 중요합니다.

 

728x90