Database/Practice

[Practice] Redis Sentinel

ozofweird 2020. 10. 8. 19:34

1. Redis Sentinel

1) VMware 설정

Sentinel은 Redis와 동일한 서버에 설치해도 되고, 독립적인 서버에 설치해도 상관없다. Port만 따로 설정하면된다. 편의를 위해 각각의 Slave 서버에 포트만 다르게 설치한다.

VMware IP  
Master 192.168.94.10 : 6379  
Slave 1 / Sentinel 1 192.168.94.20 : 6380 192.168.94.20 : 26379
Slave 2 / Sentinel 2 192.168.94.30 : 6381 192.168.94.30 : 36379
Slave 3 / Sentinel 3 192.168.94.40 : 6382 192.168.94.40 : 46379

2) Slave 1 / Sentinel 1

'/etc/redis.conf'와 '/etc/redis-sentinel.conf'에 필요한 설정을 적용해준다.

// CentOS 6 epel 설치
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

// Redis 설치 
yum install redis

// CentOS 6 자동 실행 
chkconfig redis on 
service redis start
bind 0.0.0.0
port 6380
requirepass test1234
slaveof 192.168.94.10 6379
masterauth test1234

// Master와의 동기화 주기
repl-ping-slave-period 10
repl-timeout 60

기본적인 Slave로서의 설정이 완료되면 Sentinel 설정을 해준다.

항목 설명
sentinel monitor 마지막 '2'는 Sentinel 서버 몇 대가 Master의 응답이 없다는 상태로 판단할 때 Redis Master를 장애로 판단할 것인지에 대한 숫자 값이다.
sentinel down-after-milliseconds
몇초동안 응답에 실패했을 때 응답이 없는 상태로 판단할 것인지에 대한 시간 설정이다.
sentinel parallel-syncs Master에 장애가 발생했을 때 Slave는 새로운 Master의 데이터를 Sync해야하기에 새로운 Master에 Slave가 동시에 몇대를 접속할 수 있게 하는지에 대한 설정이다.

여러대의 Slave가 동시의 Master로 접속 시 과부하가 생길 수 있기에 1대씩 순차적으로 접속할 수 있도록 설정한다.
sentinel failover-timeout
Failover 시 3분이내에 Failover가 처리 완료되면 Slave를 Master로 변환처리한다.
sentinel auth-pass Sentinel이 Failover시 사용될 Master / Slave 암호를 입력한다.
bind 0.0.0.0
port 26379

sentinel monitor mymaster 192.168.94.10 6379 2
sentinel down-after-milliseconds mymaster 5000

sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel auth-pass mymaster test1234

daemonize yes
pidfile /var/run/sentinel.pid
logfile /var/log/redis/sentinel.log

3) Slave 2 / Sentinel 2

// CentOS 6 epel 설치
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

// Redis 설치 
yum install redis

// CentOS 6 자동 실행 
chkconfig redis on 
service redis start
bind 0.0.0.0
port 6381
requirepass test1234
slaveof 192.168.94.10 6379
masterauth test1234

// Master와의 동기화 주기
repl-ping-slave-period 10
repl-timeout 60
bind 0.0.0.0
port 36379

sentinel monitor mymaster 192.168.94.10 6379 2
sentinel down-after-milliseconds mymaster 5000

sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel auth-pass mymaster test1234

daemonize yes
pidfile /var/run/sentinel.pid
logfile /var/log/redis/sentinel.log

4) Slave 3 / Sentinel 3

// CentOS 6 epel 설치
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

// Redis 설치 
yum install redis

// CentOS 6 자동 실행 
chkconfig redis on 
service redis start
bind 0.0.0.0
port 6382
requirepass test1234
slaveof 192.168.94.10 6379
masterauth test1234

// Master와의 동기화 주기
repl-ping-slave-period 10
repl-timeout 60
bind 0.0.0.0
port 46379

sentinel monitor mymaster 192.168.94.10 6379 2
sentinel down-after-milliseconds mymaster 5000

sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel auth-pass mymaster test1234

daemonize yes
pidfile /var/run/sentinel.pid
logfile /var/log/redis/sentinel.log

※ bind 항목의 경우 Sentinel들의 IP로 변경해주는게 좋다.

※ Master와 Slave 암호를 Sentinel 설정파일에 입력한 암호로 동일하게 변경을 해야한다.

5) Sentinel 실행

3대의 Sentinel을 실행한다. 각각 기본적으로 Redis를 설치하면서 제공해주는 기본 스크립트를 이용하여 구동하고, 확인한다.

sudo /etc/init.d/redis-sentinel start
ps -ef | grep sentinel
tail -n 16 /var/log/redis/sentinel.log

Sentinel 실행

6) Sentinel 테스트

모든 Sentinel이 구동이 완료되었을 경우, Redis Master를 종료한 뒤 Sentinel에서의 로그를 확인한다. Slave 1으로 Master가 승격이 된것을 확인할 수 있다.

Sentinel 테스트


[참고] crystalcube.co.kr/177

[참고] ossian.tistory.com/39?category=764921

728x90