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
각 구성은 필요에 맞게 선택할 수 있으며 서비스 규모나 중요도에 따라 구 방식을 결정하는 것이 중요합니다.
'리눅스' 카테고리의 다른 글
[draft] PHP 메모리 사용량 확인 (0) | 2024.10.17 |
---|---|
[draft] 우분투에서 고정 IP 주소를 설정하는 방법 (1) | 2024.10.15 |
[draft] 리눅스에서 LISTEN 포트를 확인하는 방법 (0) | 2024.10.15 |
[draft] hplog 명령어 (0) | 2024.10.15 |
[draft] 우분투에서 PHP 8.3으로 업그레이드하고 기존의 PHP 8.1을 삭제하는 방법 (0) | 2024.10.14 |