Redis SENTINEL MASTERS

<< SENTINEL REMOVE SENTINEL MASTER >>

Redis SENTINEL MASTERS

센티널이 모니터링하고 있는 마스터들의 정보를 조회한다.   이 정보로 마스터가 다운 상태인지, PING 응답이 얼마동안 없는지 등을 확인할 수 있다.

사용법

명령: SENTINEL MASTERS

센티널은 레디스 서버를 sentinel monitor 명령으로 모니터를 시작하는데, 모니터 대상인 레디스 마스터 서버의 정보를 조회한다.

실행 예


항목 설명

  • name : mymaster01
    마스터일 때 모니터를 시작 명령(sentinel monitor master-name ip port quorum)에서 master-name이다.   슬레이브일 때는 IP:PORT가 표시된다.
  • runid : 6b926c736c1ba33f916135d4c665e1193836f01e
    info server 명령으로 조회할 수 있는 40자리 문자 run_id이다.   슬레이브이고 다운 상태면 runid는 ""로 나온다.
    이 값은 마스터 다운 시 슬레이브 중 마스터를 선정하는데 세 번째 요소로 작용한다.   첫 번째 요소는 slave-priority 값이 적은 것,   두 번째 요소는 slave_repl_offset 값이 큰 것,   위 두 가지가 같다면 runid가 작은 것이 마스터가 됩니다.
  • flags : master, slave, sentinel, s_down, master_down, o_down, disconnected, failover_in_progress, promoted, reconf_sent, reconf_inprog, reconf_done
    flags에는 레디스 서버 상태 정보를 보여준다.   컴마로 구분되어 해당되는 항목이 모두 보여진다.
    자세한 내용은 여기 flags를 보세요.
  • link-pending-commands : 센티널은 각 서버를 모니터링하고 failover를 진행하는데 명령을 실행한다.   이 명령은 비동기(async)로 실행된다.   이 값은 아직 완료되지 않은(결과를 받지 못한) 명령의 개수를 나타낸다.
    서버와 통신이 되지 않으면 이 값은 증가한다.   최대 값은 100이다.   즉 link-pending-commands가 100이 되면 더 이상 명령을 보내지 않는다.   일반적 상황에서 last-ping-sent 값과 같이 증가한다.
  • failover-state : flags가 failover_in_progress 일 때 상세한 상태를 보여준다.   failover_in_progress 상태가 아니면 나타나지 않는다.
    여기 보여주는 로그 내용은 7122 서버가 다운되어 7121 서버가 새 마스터가 되는 과정이다.
    로그 앞에 '#'은 로그 레벨이 WARNING이고 '*'는 NOTICE이다.   Notify-scripts가 설정되었다면 WARNING은 notify-scripts를 통해 알림을 받을 수 있다.
    자세한 내용은 여기 failover_state를 보세요.
  • last-ping-sent : PING을 보내고 아직 PONG을 받지 못한 시간(millisecond)이다.   PONG을 받으면 0이 된다.
    이 시간이 down-after-milliseconds를 초과하면 s_down 상태가 된다.
    계산: Now - link->act_ping_time
    PING을 보낸 시각이 세팅된다.   하지만 이전에 보낸 PING에 대한 응답(PONG)이 오지 않았으면 업데이트하지 않고 이전 PING 보낸 시각을 그대로 둔다.   그래야 얼마나 오랫동안 응답이 오지 않았는지 알 수 있기 때문이다.
  • last-ok-ping-reply : 마지막 PONG을 받고 경과한 시간(millisecond)이다.
    계산: Now - link->last_avail_time
    유효한 응답(pong, loading, masterdown)이 오면 받은 시각이 세팅된다.  "BUSY" 응답이 오면 세팅되지 않는다.
  • last-ping-reply : 마지막 PONG을 받고 경과한 시간(millisecond)이다.
    계산: Now - link->last_pong_time
    유효한 응답을 포함해서 "BUSY" 응답이 오더라도 세팅된다.
  • s-down-time : flags가 s_down 상태일때 s_down 부터 현재까지 경과한 시간(millisecond)이다.
    계산: Now - s_down_since_time
    s_down_since_time은 주관적 다운이 확인되었을 때 현재 시각이 세팅되며 센티널 로그에 "+sdown"이 남는다.
  • o-down-time : flags가 o_down 상태일때 o_down 부터 현재까지 경과한 시간(millisecond)이다.
    계산: Now - o_down_since_time
    o_down_since_time은 객관적 다운이 확인되었을 때 현재 시각이 세팅되며 센티널 로그에 "+odown"이 남는다.
  • down-after-milliseconds : sentinel.conf에 설정하는 down-after-milliseconds 값이다.   이 시간을 초과해서 서버와 통신이 안되면 해당 서버는 주관적 다운(s_down) 상태가 된다.
  • info-refresh : 모니터링하는 서버에 INFO 명령으로 정보를 받은 이후에 지난 시간이다.   INFO 정보는 sentinelRedisInstance.info 필드에 저장된다.
    계산: Now - info_refresh
    INFO 명령에 대한 응답이 왔을때 현재 시각이 세팅된다.
  • role-reported : INFO 명령으로 받은 데이터 중 Replication role:master/slave 를 보여준다.
  • role-reported-time : 역할(role)이 변경된 이후 시간을 지난 시간을 보여준다.
    계산: Now - role_reported_time
    INFO 명령에 대한 응답이 왔고 역할(role)이 변경되었을 때 현재 시각이 세팅된다.
  • config-epoch : 현재 단계를 보여준다.   마스터 변경 같은 주요 상태가 변경될 때 마다 1씩 증가한다.
  • num-slaves : 슬레이브 서버 개수를 표시한다.   다운된 슬레이브도 포함된 숫자이다.   슬레이브에 대한 정보는 SENTINEL SLAVES 명령으로 확인한다.
    계산: dictSize(slaves)
  • num-other-sentinels : 해당 마스터 서버를 모니터링하는 다른 센티널 서버의 수이다.   자신은 제외한 숫자이다.   슬레이브에 대한 정보는 SENTINEL SENTINELS 명령으로 확인한다.
    계산: dictSize(sentinels)
  • quorum : 해당 마스터 서버의 QUORUM 값이다.   이 값이 이상의 센티널 서버가 마스터 다운을 인지해야 객관적 다운(o_down) 상태가 된다.
  • failover-timeout : 장애조치(failover) 단계별로 시간을 체크해서 이 시간을 초과하면 장애조치를 취소한다.   디폴트는 180초(3분)이다.
  • parallel-syncs : 클론이 새 마스터로 승격되었을 때 동시에 몇 개의 클론에게 SLAVEOF 명령을 실행할지 정하는 파라미터이다. 디폴트는 1이다.   자세한 내용은 여기를 보세요

FLAGS 설명

  • master,slave,sentinel: 서버의 역할(role)이 각각 마스터, 슬레이브, 센티널에 해당한다.
    define SRI_MASTER (1<<0),   SRI_SLAVE (1<<1),   SRI_SENTINEL (1<<2)
  • s_down: 주관적(subjectively) 다운, 센티널에서 마스터 서버가 다운되었다는 것을 인지한 상태이다.   아직 다른 센티널과 이 마스터 서버 다운에 대해서 정보를 교환하지 않은 상태이다. 센티널이 마스터 서버에 PING을 보내고 sentinel.conf에 설정된 down-after-milliseconds 시간을 초과해서 응답이 없으면 주관적 다운이 된다.   down-after-milliseconds의 디폴트 시간은 30초이다.
    define SRI_S_DOWN (1<<3)
    이 상태에서 센티널 로그에 남는 내용
    18:00:23.831 # +sdown master mymaster01 127.0.0.1 7122
  • o_down: 객관적(objectively) 다운, 주관적 다운 후에 센티널은 해당 서버를 모니터링하고 있는 다른 센티널과 정보를 교환해서 그들도 해당 서버가 다운되었다고 인지하고 있는지 확인한다.   해당 서버가 다운되었다고 인지한 센티널 수가 자신을 포함해서 쿼럼값 이상이면 객관적 다운으로 판정한다..   예를 들어 센티널 서버가 3대이고 QUORUM이 2이면 2대의 센티널 서버가 다운되었다고 인지하면 객관적 다운 상태가 되는 것이다.   QUORUM은 sentinel monitor master-name ip port quorum 명령에서 마지막 인수이다.   객관적 다운이 되면 슬레이브 중 하나를 선택해서 마스터로 승격시키는 장애조치(failover) 작업을 시작한다.
    객관적 다운 단계가 필요한 이유는 레디스 서버는 다운되지 않았는데 센티널 서버와 통신 문제로, 센티널 서버가 해당 레디스 서버를 다운되었다고 잘못 인지할 수 있기 때문이다.   여러 센티널 서버와 같이 확인하면 오류를 크게 줄일 수 있다.
    define SRI_O_DOWN (1<<4)
    이 상태에서 센티널 로그에 남는 내용
    18:00:23.893 # +odown master mymaster01 127.0.0.1 7122 #quorum 2/2
  • master_down: Master_down은 센티널 일 때 표시된다.   센티널이 모니터링하는 마스터가 s_down되면 센티널은 다른 센티널에게 해당 마스터에 대해서 묻는다. 다른 센티널은 해당 마스터가 다운 여부를 알린다.   센티널은 리턴 값이 다운이면 응답한 센티널의 flags에 master_down을 추가한다.   다운을 인지한 센티널 수가 쿼럼 값 이상이면 마스터를 객관적 다운으로 판정한다.
    define SRI_MASTER_DOWN (1<<5)
  • disconnected: 슬레이브가 있는 마스터일 경우 o_down 다음에 장애조치가 되어 정상으로 돌아와서 disconnected를 보기 어렵지만, 슬레이브가 없는 마스터는 다운된 상태로 그대로 있다.   이때는 s_down, o_down과 함께 disconnected가 표시된다.
    슬레이브나 센티널은 연결이 끊어지면 disconnected가 표시된다.
    link->disconnected == 1
  • failover_in_progress: 객관적 다운 후 failover가 시작되어 진행중임을 나타낸다.   이 상태가 되면 failover-state 항목이 추가로 표시되어 세부 상태 정보를 확인할 수 있다.
    define SRI_FAILOVER_IN_PROGRESS (1<<6)
  • promoted: 마스터가 될 슬레이브를 선정했다.   선정 기준은 다음과 같이 세 가지를 비교한다.
    첫 번째 요소는 slave-priority 값이 적은 것, 0은 선정 대상에서 제외
    두 번째 요소는 slave_repl_offset 값이 큰 것
    세 번째 요소는 runid가 작은 것
    첫 번째 요소부터 비교해서 다르면 나머지 요소는 비교하지 않는다.
    define SRI_PROMOTED (1<<7)
  • reconf_sent: 새 마스터 서버가 선정되었으므로 슬레이브들이 새 마스터로부터 데이터를 받도록(Full resync) 한다.   각 슬레이브들에게 slaveof new-ip new-port 명령을 실행한 상태이다.   이것(reconf_sent)과 다음에 있는 reconf_inprog, reconf_done는 슬레이브 서버에서 볼 수 있다.
    define SRI_RECONF_SENT (1<<8)
  • reconf_inprog: slaveof new-ip new-port 명령이 진행중인 상태이다.
    define SRI_RECONF_INPROG (1<<9)
  • reconf_done: slaveof new-ip new-port 명령이 완료되었다.
    define SRI_RECONF_DONE (1<<10)

FAILOVER-STATE 설명

장애조치 단계(Failover-state)는 1 부터 6까지 6 단계로 나누어지며 순서대로 진행된다.

  1. wait_start : Failover가 시작되었다.   Epoch를 증가시키고 장애조치를 주관할 센티널을 선정한다.
    define SENTINEL_FAILOVER_STATE_WAIT_START   1
    이 상태에서 센티널 로그에 남는 내용
    18:00:23.893 # +new-epoch 4
    18:00:23.893 # +try-failover master mymaster01 127.0.0.1 7122
    18:00:23.911 # +vote-for-leader 0fe5caddfa363ffe5ae45d03f00824ee60bb875c 4
    18:00:23.951 # 9188c2624428e7e304c207c715fc8fb4c7c64cf3 voted for 0fe5caddfa363ffe5ae45d03f00824ee60bb875c 4
    18:00:23.951 # 40ebf60db9dc4385cf404903e1db6c111d14c336 voted for 0fe5caddfa363ffe5ae45d03f00824ee60bb875c 4
    18:00:23.973 # +elected-leader master mymaster01 127.0.0.1 7122
  2. select_slave : 새로운 마스터가 될 슬레이브를 선정한다.
    define SENTINEL_FAILOVER_STATE_SELECT_SLAVE   2
    이 상태에서 센티널 로그에 남는 내용: 다운된 7122 서버를 대신할 서버로 7121를 선정했다.
    18:00:23.973 # +failover-state-select-slave master mymaster01 127.0.0.1 7122
    18:00:24.035 # +selected-slave slave 127.0.0.1:7121 127.0.0.1 7121 @ mymaster01 127.0.0.1 7122
  3. send_slaveof_noone : 선정된 슬레이브에게 SLAVEOF NO ONE 명령을 실행한다.
    define SENTINEL_FAILOVER_STATE_SEND_SLAVEOF_NOONE   3
    이 상태에서 센티널 로그에 남는 내용
    18:00:24.035 * +failover-state-send-slaveof-noone slave 127.0.0.1:7121 127.0.0.1 7121 @ mymaster01 127.0.0.1 7122
  4. wait_promotion : SLAVEOF NO ONE 명령이 완료되기를 기다리는 상태.
    define SENTINEL_FAILOVER_STATE_WAIT_PROMOTION   4
    이 상태에서 센티널 로그에 남는 내용
    18:00:24.118 * +failover-state-wait-promotion slave 127.0.0.1:7121 127.0.0.1 7121 @ mymaster01 127.0.0.1 7122
    18:00:24.947 # +promoted-slave slave 127.0.0.1:7121 127.0.0.1 7121 @ mymaster01 127.0.0.1 7122
  5. reconf_slaves : 슬레이브들에게 새 마스터를 바라보도록 SLAVEOF New-IP New-Port 명령을 실행한 상태.   SLAVEOF 명령은 슬레이브마다 실행하며, 한 슬레이브가 완료되면 다음 슬레이브에 명령을 내린다.   slave-reconf-sent에서 done까지 슬레이브는 새 마스터로부터 전체 데이터를 받는(Full resync) 과정이고, 소요 시간은 데이터 량에 따라 다르다.  slave-reconf-sent, inprog, done는 슬레이브 개수만큼 로그에 남는다.
    define SENTINEL_FAILOVER_STATE_RECONF_SLAVES   5
    이 상태에서 센티널 로그에 남는 내용
    18:00:24.947 # +failover-state-reconf-slaves master mymaster01 127.0.0.1 7122
    18:00:24.982 * +slave-reconf-sent slave 127.0.0.1:7123 127.0.0.1 7123 @ mymaster01 127.0.0.1 7122
    18:00:25.969 * +slave-reconf-inprog slave 127.0.0.1:7123 127.0.0.1 7123 @ mymaster01 127.0.0.1 7122
    18:00:25.969 * +slave-reconf-done slave 127.0.0.1:7123 127.0.0.1 7123 @ mymaster01 127.0.0.1 7122
  6. update_config : 센티널이 가지고 있는 정보를 새 마스터와 슬레이브로 갱신하고 새 마스터를 모니터링하기 시작한다.   7121 서버가 새 마스터가 되었고, 7122, 7123은 슬레이브가 되었다.   로그에서 마지막 +slave 두 줄은 슬레이브 정보를 갱신하였다는 내용이다.   현재 다운된 7122 서버도 슬레이브로 등록된다.   7122 서버가 다시 시작하면 슬레이브로 전환된다.   이때 "convert-to-slave" 로그를 남긴다.
    define SENTINEL_FAILOVER_STATE_UPDATE_CONFIG   6
    이 상태에서 센티널 로그에 남는 내용
    18:00:26.020 # +failover-end master mymaster01 127.0.0.1 7122
    18:00:26.020 # +switch-master mymaster01 127.0.0.1 7122 127.0.0.1 7121
    18:00:26.020 * +slave slave 127.0.0.1:7123 127.0.0.1 7123 @ mymaster01 127.0.0.1 7121
    18:00:26.020 * +slave slave 127.0.0.1:7122 127.0.0.1 7122 @ mymaster01 127.0.0.1 7121

명령문

SENTINEL MASTERS

  • 이 명령은 version 2.8.0 부터 사용할 수 있다.
  • 이 문서는 버전 3.2.2을 기준으로 만들었다.

Clients for Java Jedis, Lettuce
Clients for C Hiredis


<< SENTINEL REMOVE SENTINEL MASTERS SENTINEL MASTER >>

질문하거나 댓글을 보려면 클릭하세요.  댓글수 :    조회수 :

Email 답글이 올라오면 이메일로 알려드리겠습니다.