구성 계획
- 192.168.0.11 redis, sentinel
- 192.168.0.12 redis, sentinel
- 192.168.0.13 redis, sentinel
- redis 포트 : 6379
- sentinel 포트 : 26379
redis 설치, 설정
192.168.0.11 ~ 192.168.0.13 공통
# 관련 패키지 설치
sudo apt install -y gcc make pkg-config libjemalloc-dev libjemalloc2 tcl libssl-dev libsystemd-dev
# redis 설치
wget http://download.redis.io/releases/redis-7.2.4.tar.gz
tar xvzf redis-7.2.4.tar.gz
cd redis-7.2.4
cd deps
make hiredis jemalloc linenoise lua
cd ..
make USE_SYSTEMD=yes
make test
make install PREFIX=/home/kalva/redis_6379
# 설정 파일 복사
cp redis.conf /home/kalva/redis_6379/redis_6379.conf
cp sentinel.conf /home/kalva/redis_6379/sentinel_26379.conf
# 로그 디렉토리 생성
cd /home/kalva/redis_6379
mkdir logs
192.168.0.11 redis 설정, 구동
vi /home/kalva/redis_6379/redis_6379.conf
# 모두 접속 허용
bind 0.0.0.0
# 백그라운드로 동작
daemonize yes
# pid파일 위치
pidfile "/home/kalva/redis_6379/redis_6379.pid"
# log파일 위치
logfile "/home/kalva/redis_6379/logs/redis_6379.log"
# rdb 파일 디렉토리
dir /home/kalva/redis-7.2.4/
# 슬레이브가 마스터 서버와 통신하기 위한 패스워드
masterauth mypass
# redis 클라이언트가 redis 와 통신하기 위한 패스워드
requirepass mypass
appendonly yes
appendfsync everysec
# Redis 구동
/home/kalva/redis_6379/bin/redis-server /home/kalva/redis_6379/redis_6379.conf
192.168.0.12, 192.168.0.13 redis 설정, 구동
vi /home/kalva/redis_6379/redis_6379.conf
# 모두 접속 허용
bind 0.0.0.0
# 백그라운드로 동작
daemonize yes
# pid파일 위치
logfile "/home/kalva/redis_6379/logs/redis_6379.log"
# log파일 위치
pidfile "/home/kalva/redis_6379/redis_6379.pid"
# rdb 파일 디렉토리
dir /home/kalva/redis-7.2.4/
# 슬레이브가 마스터 서버와 통신하기 위한 패스워드
masterauth mypass
# redis 클라이언트가 redis 와 통신하기 위한 패스워드
requirepass mypass
appendonly yes
appendfsync everysec
# 복제 마스터 서버 정보
replicaof 192.168.0.11 6379
# Redis 구동
/home/kalva/redis_6379/bin/redis-server /home/kalva/redis_6379/redis_6379.conf
sentinel 설정
192.168.0.11 ~ 192.168.0.13 redis 설정, 구동
vi /home/kalva/redis_6379/sentinel_26379.conf
# 백그라운드로 동작
daemonize yes
# pid파일 위치
pidfile "/home/kalva/redis_6379/sentinel_26379.pid"
# log파일 위치
logfile "/home/kalva/redis_6379/logs/sentinel_26379.log"
# 모니터링 대상 master정보, 쿼럼설정
sentinel monitor mymaster 192.168.0.11 6379 2
# master비번
sentinel auth-pass mymaster mypass
# master 다운판정 시간 6초
sentinel down-after-milliseconds mymaster 6000
# failover 완료되어야 하는 시간
sentinel failover-timeout mymaster 180000
# sentinel 구동
/home/kalva/redis_6379/bin/redis-sentinel /home/kalva/redis_6379/sentinel_26379.conf
구동 테스트
복제 정보, 센티널 정보 확인
# 복제 정보 확인
kalva@kalva:~$ /home/kalva/redis_6379/bin/redis-cli -h 192.168.0.11
192.168.0.11:6379> auth mypass
OK
192.168.0.11:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.0.12,port=6379,state=online,offset=406,lag=0
slave1:ip=192.168.0.13,port=6379,state=online,offset=406,lag=0
master_failover_state:no-failover
master_replid:bd536db1af0fc367cce17cb5bede06e52ac778e3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:406
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:406
192.168.0.11:6379>
# 센티널 노드 확인
# slaves=2,sentinels=3 가 맞는지 확인
kalva@kalva:~$ /home/kalva/redis_6379/bin/redis-cli -h 192.168.0.11 -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.0.11:6379,slaves=2,sentinels=3
master 노드 확인
kalva@kalva:~$ /home/kalva/redis_6379/bin/redis-cli -h 192.168.0.11 -p 26379 sentinel get-master-addr-by-name mymaster
1) "192.168.0.11"
2) "6379"
Failover 테스트
# 192.168.0.13 서버 우선순위 50으로 설정
# replica-priority 값이 낮을수록 우선순위기 높다.
kalva@kalva:~$ /home/kalva/redis_6379/bin/redis-cli
127.0.0.1:6379> auth mypass
OK
127.0.0.1:6379> CONFIG SET replica-priority 50
OK
# FAILOVER
kalva@kalva:~$ /home/kalva/redis_6379/bin/redis-cli -h 192.168.0.11 -p 26379
192.168.0.11:26379> SENTINEL FAILOVER mymaster
OK
# 마스터 노드 확인
192.168.0.11:26379> SENTINEL GET-MASTER-ADDR-BY-NAME mymaster
1) "192.168.0.13"
2) "6379"
# 192.168.0.13 에서 확인
kalva@kalva:~/redis_6379$ /home/kalva/redis_6379/bin/redis-cli
127.0.0.1:6379> auth mypass
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.0.12,port=6379,state=online,offset=554510,lag=0
slave1:ip=192.168.0.11,port=6379,state=online,offset=554510,lag=0
master_failover_state:no-failover
master_replid:ef914c9e01ccbc78289a259f66c5894b4818e248
master_replid2:bd536db1af0fc367cce17cb5bede06e52ac778e3
master_repl_offset:554649
second_repl_offset:453815
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:554635
kalva@kalva:~$ /home/kalva/redis_6379/bin/redis-cli -h 192.168.0.11 -p 26379
192.168.0.11:26379> SENTINEL SENTINELS mymaster
1) 1) "name"
2) "93275507e9835dc182df09356d8fe829715b3eae"
3) "ip"
4) "192.168.0.12"
5) "port"
6) "26379"
7) "runid"
8) "93275507e9835dc182df09356d8fe829715b3eae"
9) "flags"
10) "sentinel"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "270"
19) "last-ping-reply"
20) "270"
21) "down-after-milliseconds"
22) "6000"
23) "last-hello-message"
24) "1868"
25) "voted-leader"
26) "?"
27) "voted-leader-epoch"
28) "0"
2) 1) "name"
2) "c4c59fc8e54187cd99f926a677f3e4a9bf88c68b"
3) "ip"
4) "192.168.0.13"
5) "port"
6) "26379"
7) "runid"
8) "c4c59fc8e54187cd99f926a677f3e4a9bf88c68b"
9) "flags"
10) "sentinel"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "270"
19) "last-ping-reply"
20) "270"
21) "down-after-milliseconds"
22) "6000"
23) "last-hello-message"
24) "233"
25) "voted-leader"
26) "?"
27) "voted-leader-epoch"
28) "0"