GeekCoders

[Redis] Master-Slave Replication 본문

DB/Redis

[Redis] Master-Slave Replication

알 수 없는 사용자 2015. 1. 26. 12:10

Redis Master Node에 쓰인 내용을 Slave Node에 복제 하는것이다. 

Master Node는 여러개의 Salve Node를 가질 수 있고, 각 Slave Node도 각자 여러개의 Slave Node를 가질 수 있다.

 


 

 


데이터를 쓸때나 쿼리 연산을 진행하면서 데이터 복제를 진행한다. Non Blocking 이며 복사하는 동안 데이터가 변경될 경우 변경된 데이터의 반영이 이루어지지 않는다. 

Slave는 Master< - >Slave 링크가 떨어졌을 때, 자동으로 재접속이 가능하다. Master가 여러개의 Salve에서 보내는 Sync 요청을 받았을때, 모든 요청을 처기하기 위해 Single Background 저장을 실행한다. 

링크 여결이 떨어진 후에 Slave와 master가 재접속 할 때, 모든 싱크를 맞추는 작업이 시작된다. 


Master-Slave Replication을 사용하는 이유는 Query Off Loading 기법을 이용하여 동시 접속자수나, 처리 속도를 늘릴수 있다. 

Master Node는 Write만 Slave Node는 Read만 가능하게 사용한다. DB Transaction의 대부분이(70 ~90%)을 Read가 차지하고 있기 때문에 Read와 Write를 분산처리 시키면 성능이 향상된다. 


Reids Replication을 사용할 때 흔히 하는 실수 중 하나가, Redis의 복제 과정상 특징을 모른 채 DBMS와 동일하다고 생각하기 때뭉네 발생한다. 슬레이브는 마스터의 상태를 지속적으로 감시하면서 바뀌는 내용을 계속 전달받는다. 만약 이상이 발생해서 마스터와의 연결이 끊어지면 재접속을 시도하며, 마스터에서 전체 데이터를 다시 가져와 마스터의 최종 상태로 자신의 데이터를 변경한다.

슬레이브는 마스터와 동일한 데이터를 유지하기 위해서 RDB를 읽어들이기 전에 현재 자신(슬레이브)의 데이터를 모두 삭제하고 마스터와 싱크를 맞추므로, 마스터에 데이터가 없을 경우 모든 데이터가 날아간다. 이 경우, 장애 발생 시 슬레이브를 사용할 수 없게 된다. 


"slaveof no one"

마스터의 장애 판단 여부는 관리 자나 다른 서비스에서 체크할 수 있다고 하고 명시적으로 현재 마스터에 장애가 일어난 것을 알고 있다면, 해당 슬레이브에 "slaveof no one" 명령을 줘서 더 이상 슬레이브로 동작하지 않도록 설정한다. "slaveof no one" 명령을 주면 현재까지의 데이터를 모두 보존하기 때문에 데이터의 유실이 없다. 



셋팅


Master 일 경우 

requirepass foobared 설정

client-output-buffer-limit 설정



Slave 일 경우

slaveof <masterip><masterport> 설정

masterauth <master-password> 설정

repl-ping-slave-period 10 설정

repl-timeout 60 설정




참고 http://blog.naver.com/fltltmxjs/80195023188

'DB > Redis' 카테고리의 다른 글

[Redis] Password 설정  (0) 2016.08.04
[Redis] 레디스 운영 시 고려사항  (1) 2015.01.22
[Redis] 레디스란 무엇인가  (0) 2015.01.22