화요일, 6월 2, 2020
Home Linux Redis Sentinel

Redis Sentinel

Redis Sentinel

Redis는 일반적으로 Master와 Slave로 구성됩니다.
운영중 예기치 않게 마스터가 다운되었다면 Redis담당자가 이를 감지해서 Slave를 Master로 설정하고
클라이언트들이 새로운 Master에 접속할 수 있도록 해주어야 합니다.
Sentinel은 Master와 Slave를 감시하고 있다가 Master가 다운되면 이를 감지해서
자동으로 Slave를 Master설정해 줍니다.

Sentinel 기능은 아래와 같습니다.
모니터링 : Sentinel은 마스터 및 슬레이브 인스턴스가 정상적으로 작동하는지 지속적으로 확인합니다.
알림 : Sentinel은 API를 통해 다른 컴퓨터 프로그램 인 시스템 관리자에게 모니터링되는 Redis 인스턴스 중 하나에 문제가 있음을 알릴 수 있습니다.
자동 장애 조치 : 마스터가 예상대로 작동하지 않는 경우 Sentinel은 슬레이브가 마스터로 승격 된 페일 오버 프로세스를 시작할 수 있으며 다른 추가 슬레이브는 새 마스터를 사용하도록 재구성되며 Redis 서버를 사용하는 애플리케이션은 사용할 때 새 주소를 알려줍니다 연결.
구성 제공자 : Sentinel은 클라이언트 서비스 검색을위한 권한의 원천으로 작용합니다. 클라이언트는 Sentinels에 연결하여 지정된 서비스를 담당하는 현재 Redis 마스터의 주소를 요청합니다. 장애 조치가 발생하면 Sentinels가 새 주소를보고합니다.

기존의 Redis Server 들이 있고, 각각의 Sentinel 서버가 이 4대의 Redis 를 감시합니다.
Sentinel 이 3대인 이유는 문제가 발생하였을때를 대비하기 위함입니다.
그리고 Sentinel 이 FailOver 를 하기 위해서 Redis 를 감시한다고 했는데,
어떤 결함으로 인해 문제가 발생했을때 이것이 Sentinel 자체의 문제일 수 있어서 여러대를 두는 것입니다.
더불어 짝수(2대)가 아니라 홀수(3대)인 이유는 SDown 과 ODown 이라는 개념이 있는데 이때를 위해서 짝수가 아닌 홀수개의 Sentinel 이 좋기 때문입니다.
다수결 원칙으로 5:5 로 투표되면 결론이 나지 않기 때문에 홀수로 둔다고 생각하시면 됩니다.

Redis Sentinel 은 아래와 같이 Master 1대, Slave 3대, Sentinel  3대로 구성합니다.

Master : 10.0.0.201 [port:6379]
Slave #1 : 10.0.0.211 [port:6379]
Slave #2 : 10.0.0.212 [port:6379]
Slave #3 : 10.0.0.213 [port:6379]

Sentinel #1 : 10.0.0.211 [port:26379]
Sentine2 #2 : 10.0.0.212 [port:26379]
Sentine3 #3 : 10.0.0.213 [port:26379]

Sentinel 구성전 Master 1대, Slave 3대의 redis process 가 start 되어있어야 합니다.

1.Sentinel 설정하기

디렉토리(/etc/redis/)에 보면 sentinel.conf 라는 파일이 존재합니다.
sentinel은 conf 파일만 다른 redis 입니다.

대상 서버는 아래와 같습니다.
Sentinel #1 : 10.0.0.211 [port:26379]
Sentine2 #2 : 10.0.0.212 [port:26379]
Sentine3 #3 : 10.0.0.213 [port:26379]

아래와 같이 sentinel config를 구성합니다.

redis 설치 에서 redis-stable.tar.gz 압축해제한 디렉토리로 이동합니다.

  • bind 주석 삭제후 Sentinel Server 의 IP 또는 0.0.0.0으로 수정

  • Sentinel Server port 수정

  • sentinel 서버를 3대로 구성하였습니다.
    그렇기 때문에 2대의 sentinel 서버에서 master 로 연결을 실패하면 failover 하도록 할 것입니다.
    그러므로 2 를 quorum 값으로 넣었습니다.
    만약 sentinel 서버가 3 대인데, quorum 값을 3보다 큰 값으로 설정하면, 절대로 failover 가 발생하지 않습니다.

  • master 및 slave 의 password 를 입력해 줍니다.

  • 몇 초 동안 master 로의 연결이 실패했을 때,
    SDown 으로 간주할 것인가 입니다. 단위는 밀리세컨드 입니다.
    기본값 30초는 너무 길기에 5 초로 설정하였습니다.
    주의할 것은 데이터가 많아서 failover 가 일어난 뒤에 redis 에서 sync 하는 시간이 길어지면,
    어떤 이유로 설정한 값인 5초가 넘어가 버린다면, 다시한번 failover 가 일어납니다.
    왜냐면 redis 는 single thread 입니다. 그러므로 상황을 보고 설정하시는게 좋습니다.

  • failover 가 발생했을 때, slave 들은 master 로부터 데이터를 받아야(sync) 합니다.
    이때 몇개씩 나누어서 sync 할 것인지에 대한 설정입니다.
    만약 이 값이 3이라면 slave 3개가 동시에 master 로부터 sync 를 시도합니다.
    1개씩 순차적으로 master 와 sync 하라는 의미입니다.

  • failover 의 타임아웃을 몇초로 둘 것인지 입니다. 기본값은 3분입니다. 그러므로 상황을 보고 설정하시는게 좋습니다.

  • 맨 마지막줄에 아래와 같이 데몬으로 실행될 수 있도록 추가 해 줍니다.

2.Redis Master 에서 정보 확인하기

Master : 10.0.0.201

3.Sentinel 시작하기

Sentinel #1 : 10.0.0.211 [port:26379],Sentine2 #2 : 10.0.0.212 [port:26379],Sentine3 #3 : 10.0.0.213 [port:26379] 3대 모두 아래와 같이 진행합니다.

Sentinel 스크립트가 없기 때문에 redis 스크립트를 복사하여 아래와 같이 수정합니다.

  • Redis Sentinel Start 

  • 서버 재기동후 Sentinel 이 기동 될 수 있도록 Redis Sentinel Service 등록

  • service 확인

4.Redis Sentinel Log 확인

5.Sentinel 동작 확인

Master redis 에서 확인합니다.

  • 먼저 Master 를 종료합니다.

  • Sentinel 로그확인

6485:X 18 Apr 2019 05:38:37.493 # +switch-master mymaster 10.0.0.201 6379 10.0.0.212 6379 부분과 같이 master가 변경되었습니다.

  • Stop 한 Master [10.0.0.201] start 후 로그확인

  • Master로 승격된 10.0.0.212 Sentinel 로그 확인

6435:X 18 Apr 2019 05:40:54.484 * +convert-to-slave slave 10.0.0.201:6379 10.0.0.201 6379 @ mymaster 10.0.0.212

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Time limit is exhausted. Please reload the CAPTCHA.

최신글

에픽게임즈 – BORDERLANDS 2

BORDERLANDS: THE HANDSOME COLLECTION으로 BORDERLANDS 2의 혼돈으로 가득한 Pandora 세계와 BORDERLANDS: THE PRE-SEQUEL의 정신...

인기글

[이클립스] console 출력 제한 해제

이클립스 console 출력 제한 해제 1.limit console output 체크를 해제하시면됩니다.

x470 128gb Ram Support Motherboard

Asrock Rack X470D4U 제품이 BIOS 업데이트로 MAX Memory 128G 지원가능한듯 합니다. X470 에서 128GB RAM 를 지원하는 최초의 X470 Motherboard 인듯합니다. 조만간 32G RAM 구하게 되면...

Java 정규표현식으로 문자, 숫자, 특수문자의 조합 패턴 체크

Java 정규표현식으로 문자, 숫자, 특수문자의 조합 패턴 체크

Tvheadend 4.4.20171030 로그인 문제 해결방법

Tvheadend 4.4.20171030 로그인 문제 해결방법 tvheadend-testing 4.4.20170707-3 를 설치하게 되면 sc-media 라는 그룹이 생성됨. 아래와 같이 tvheadend 로그인 사용자를 sc-media 그룹에 추가 permission 수정 chown -R sc-tvheadend:tvheadend-testing /var/packages/tvheadend-testing vi...