sentinel_pending-scripts
Redis SENTINEL PENDING-SCRIPTS
Redis Sentinel Course | Redis Technical Support | Redis Enterprise Server |
---|
Redis SENTINEL PENDING-SCRIPTS
센티널은 경고(warning) 이벤트가 발생하면 notification_script에 지정된 파일을 실행해서 관리자에게 알린다. 발생한 이벤트를 스크립트 잡 큐(Script job queue)에 넣고 실행하는데, 실행 시간이 좀 걸린다면 현재 실행중이거나 대기 중인 스크립트가 남아있다. 이 명령은 현재 실행중이거나 대기 중인 스크립트와 이벤트 정보를 보여준다.
사용법
명령: SENTINEL PENDING-SCRIPTS
일반적으로 스크립트는 매우 빠르게 실행되기 때문에 조회가 되지 않는 경우가 대부분이다.
여기서는 데스트 목적으로 쉘 스크립트 안에 5초 대기(sleep 5)를 넣고 실행한 것이다.
명령 실행 예)
1) 1) "argv"
2) 1) "/root/redis-3.2.2/notify/redis-notify.sh"
2) "+promoted-slave"
3) "slave 127.0.0.1:7121 127.0.0.1 7121 @ Xmaster 127.0.0.1 7124"
3) "flags"
4) "running"
5) "pid"
6) "23783"
7) "run-time"
8) "4189"
9) "retry-num"
10) "1"
2) 1) "argv"
2) 1) "/root/redis-3.2.2/notify/redis-notify.sh"
2) "+failover-state-reconf-slaves"
3) "master Xmaster 127.0.0.1 7124"
3) "flags"
4) "running"
5) "pid"
6) "23784"
7) "run-time"
8) "4189"
9) "retry-num"
10) "1"
현재 실행중이거나 대기 중인 스크립트는 info sentinel 명령으로 개수를 확인할 수 있다. sentinel_running_scripts는 현재 실행중인 스크립트 수이고, sentinel_scripts_queue_length는 큐에 남아있는 스크립트 수이다.
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:2
sentinel_scripts_queue_length:2
sentinel_simulate_failure_flags:0
master0:name=Xmaster,status=ok,address=127.0.0.1:7124,slaves=4,sentinels=5,quorum=3
센티널은 큐에 있는 스크립트를 비동기로 실행한다.
그러므로 스크립트 실행후 끝나기를 기다리지 않고 바로 다음 스크립트를 실행한다.
스크립트 실행은 자식 프로세스(child process)을 fork하고 그 자식 프로세스가 execve()로 스크립트를 실행한다.
execve()는 다른 프로그램을 실행하고 자신은 종료하는 함수이다.
일반적인 상황에서는 큐(sentinel_scripts_queue_length) 개수와
실행중인(sentinel_running_scripts) 개수가 같다.
센티널이 스크립트를 비동기로 실행하기는 하지만 동시에 16개까지만 실행할 수 있다.
스크립트 1개의 최대 실행 시간은 60초이다.
시간초과가 발생하면 "-script-timeout" 이벤트가 발생하고 스크립트를 종료(kill) 시킨다.
만약 자식 프로세스 fork 할때 실패하면 "-script-error" 이벤트를 발생하고 로그에 남긴다.
성공하지 못한 스크립트는 10번까지 재 시도하는데,
공백 시간을 둔 다음 재 시도한다.
공백 시간은 처음 실패하면 30초 후에 재 시도하고,
두 번째 실행하면 60초, 세 번째는 2분,
4분, 8분, 16분, 32분, 64분, 마지막에 열 번째는 128분 후에 시도한다.
열번째까지 실패하면 더 이상 시도하지 않는다.
여기 언급한 숫자(동시 실행 16, 스크립트 최대 실행 시간 60초, 재 시도 횟수 10번, 공백 시간)는
모두 소스에 정의되어 있어 파라미터나 SET 명령으로 변경할 수 없다.
항목
조회되는 항목
- argv 1 : script file
- argv 2 : 이벤트 타입
- argv 3 : 이벤트 내용
- flags : 스크립트가 실행중일 경우는 "running", 대기 중일 경우는 "scheduled"로 표시된다. 실행중일 경우 "ps -ef|grep redis" 명령으로 해당 프로세스 ID를 볼 수 있다.
- pid : 23784, 실행중일 경우 자식 프로세스 ID가 표시된다. 대기 중일 경우는 "0"이다.
- run-time : 4189, 실행중일 경우 "run-time"이 표시되고, 대기 중일 경우 "run-delay"가 표시된다.
run-time은 실행 시작 부터 현재까지 시간이다.
이 시간이 60초가 넘으면 시간초과가 되어 센티널은 자식 프로세스를 종료시킨다.
시간초과가 된 스크립트는 flags가 "scheduled"로 바뀐다. 재 시도할 경우 공백시간을 더해서 다음 시작 시각(start_time) 세팅한다. 공백시간은 위에서 설명한 것처럼 30초, 60초, 이런 식으로 2배씩 늘어난다. "run-delay" 시간은 start_time에서 현재 시각을 뺀 시간이다. "run-delay"가 0이 되면 센티널은 시크립트를 실행시킨다. - retry-num : 1, 재 시도 횟수를 나타낸다.
명령문
SENTINEL PENDING-SCRIPTS
- 이 명령은 version 2.8.0 부터 사용할 수 있다.
- 이 문서는 버전 3.2.2을 기준으로 만들었다.
Clients for Java | Jedis, Lettuce | Clients for C | Hiredis |
<< INFO-CACHE | PENDING-SCRIPTS | DOWN-AFTER-MILLISECONDS >> |
---|
조회수 :