티스토리 뷰

redis failover tool "Sentinel" 사용법.

Redis Sentinel이란 고가용성 서비스를 위한  Failover 도구 입니다.

Master 서버가 죽을경우 Replication 서버인 Slave가 Master로 승격되는 형태로 동작하는 전형적인 서버 이중화를 구현 가능

하도록 돕는 도구 입니다.

( 버그가 존재한다고는 하는데  아직까지 깊이 있게 경험해보지 못한 관계로 사용법에 대해서만 다루도록 하겠습니다.)


일단 기본적으로 Redis가 설치 되어야 합니다.

공식 사이트에 지원하는 버전에 대해 나와 있습니다.

Redis Sentinel is compatible with Redis 2.4.16 or greater, and redis 2.6.0-rc6 or greater.


2.4.16 이상  2.6.0-rc6이상 으로 나와있습니다. ( RC 버전은 정식판 출시 전 작업이 완료된 버전을 미리 배포하는 방식. 일종의 오픈베타개념이라 생각하면 됩니다. )


Redis Sentinel의 Failover 과정

Redis Failover를 판단하기 위해 두가지 과정을 거쳐야 합니다.

바로 Subjective down (sdown), Objective down (odown)

Subjective down은 Sentinel이 장애를 감지한 경우로 Subjective down 만으로는 Failover가 진행되지 않습니다.

감지하는 Sentinel 과반수 이상이 장애를 감지 할 경우 Objective down이 발생하는데 이 경우 Failover를 진행 하게 됩니다.


1. Master, Slave Monitoring

[그림1] Sentinel Monitoring


2. Objective down 발생

[그림2] Objective down


3. 기존 Slave, Master 승격

[그림3] Master 승격


설치환경

Ubuntu : 12.10

Redis : redis-2.6.14


step 1. redis 설치

일단 선수과제로 Redis를 설치합니다.

http://rocksea.tistory.com/83  -> 설치하기.

http://rocksea.tistory.com/87  -> master, slave 설정

redis를 설치하면 sentinel은 같이 설치 됩니다. ( 소스안에 sentinel.conf와 실행 바이너리가 존재함 )


step 2. redis sentinel 설정 및 실행

redis-2.6.14/sentinel.conf

sentinel monitor mymaster 127.0.0.1 6379 1  # monitoring할 master 아이피 및 odown 기준을 위한 sentinel 정족 수 설정

sentinel auth-pass mymaster 1234             # master  password 설정

sentinel down-after-milliseconds mymaster 30000   # 장애감지 이후 몇초 후 sdown으로 전이 될지 설정

sentinel can-failover mymaster yes  # failover 진행 여부 설정

sentinel parallel-syncs mymaster 1  # 새로 승격된 master 와 syncs를 맞출 slave 갯수 설정

sentinel failover-timeout mymaster 900000  # timeout 시간내 failover 완료시 나머지 slave에게 새로운 마스터 
                                                           # 설정 가능 하도록 command를 보냄

sentinel 실행
$ ./redis-server ../sentinel.conf --sentinel

step 3. Master Server 종료 

Master 종료시 Slave Console 화면
[22243] 28 Oct 18:26:38.977 * Connecting to MASTER...
[22243] 28 Oct 18:26:38.977 * MASTER <-> SLAVE sync started
[22243] 28 Oct 18:26:38.977 # Error condition on socket for SYNC: Connection refused

Sentinel Console 화면
[22248] 28 Oct 18:27:04.817 # +sdown master mymaster 127.0.0.1 6379
[22248] 28 Oct 18:27:04.817 # +odown master mymaster 127.0.0.1 6379 #quorum 1/1
[22248] 28 Oct 18:27:04.818 # +failover-triggered master mymaster 127.0.0.1 6379
[22248] 28 Oct 18:27:04.818 # +failover-state-wait-start master mymaster 127.0.0.1 6379 #starting in 6899 milliseconds
[22248] 28 Oct 18:27:11.754 # +failover-state-select-slave master mymaster 127.0.0.1 6379
[22248] 28 Oct 18:27:11.854 # +selected-slave slave 127.0.0.1:6389 127.0.0.1 6389 @ mymaster 127.0.0.1 6379
[22248] 28 Oct 18:27:11.855 * +failover-state-send-slaveof-noone slave 127.0.0.1:6389 127.0.0.1 6389 @ mymaster 127.0.0.1 6379
[22248] 28 Oct 18:27:11.955 * +failover-state-wait-promotion slave 127.0.0.1:6389 127.0.0.1 6389 @ mymaster 127.0.0.1 6379
[22248] 28 Oct 18:27:11.956 # +promoted-slave slave 127.0.0.1:6389 127.0.0.1 6389 @ mymaster 127.0.0.1 6379
[22248] 28 Oct 18:27:11.956 # +failover-state-reconf-slaves master mymaster 127.0.0.1 6379
[22248] 28 Oct 18:27:12.056 # +failover-end master mymaster 127.0.0.1 6379
[22248] 28 Oct 18:27:12.056 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6389
[22248] 28 Oct 18:27:42.115 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6389

로그내용을 살펴보면 Master가 sdown, odown진행 후 failover 기능이 동작 한 뒤 기존의 slave를 master로 승격시키고

slave를 sdown시킨 후 동작이 완료 됩니다.


기존의 Master를 다시 올리게 되면 Slave로 올라오게 되면서 서로 Master <-> Slave 역할이 바뀌게 됩니다.

[22248] 28 Oct 18:30:20.461 * +demote-old-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6389

[22248] 28 Oct 18:30:20.662 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6389


일단 여기까지 Test를 진행 하였으며 앞으로 버그라던지 다른 보완점을 찾게되면 Post Update를 하도록 하겠습니다.

.by rocksea


'Developer' 카테고리의 다른 글

[DBMS] DBMS 별 rownum 사용법.  (4) 2013.11.08
[R]데이터 마이닝 도구 "R" 소개 및 설치.  (0) 2013.10.31
[Nodejs] imagemagick을 이용한 이미지 변환.  (0) 2013.10.18
ImageMagick 사용법.  (0) 2013.10.18
[PHP] pear 란.  (0) 2013.10.15
댓글