[MCCS] DB/APP 정상종료 안될 시, 특정시간 대기 후 강제중지 명령 스크립트

Symptoms

  • MCCS 에선 OfflineTimeout 발생하게 되면 flush 처리되어 페일오버 되지 않음
    -> clean program 등록하여 강제중지 가능하지만, flush 처리되어 페일오버는 결국 되지 않음
  • 1차 종료 명령 후 설정시간 만큼 대기한 후 2차 강제종료 명령 수행 스크립트

Environment

  • LINUX SHELL
    Tibero DBMS / process Application 으로 예를 듬

Cause

  • MCCS에서는 1차명령 실패 후 2차명령을 수행하는 기능 없어서 스크립트로 구현

Solution

  • Tibero DBMS 
    1차명령 : tbdown immediate;
    1차명령으로 600초간 STOP 안되었을 경우 2차명령 수행 : tbdown abort;
    #!/bin/bash
    su – tibero -c “tbdown immediate;” &>/dev/null &
    sleep 20 ##immediate로 죽는 충분한 시간을 입력한다.
    count=”0″
    while [ $count -lt 58 ]
    do
    sleep 10 ## count 문의 58과 sleep 10초로 총 580초 대기한다. 원하는 시간만큼 58을 수정하거나 sleep 10을 수정한다. (58×10)
    num=`ps -ef | grep -E “WT001|WT002|SEQW|LOGW|LOGA|CKPT|BLKW000” | grep -v grep | wc -l` > /dev/null ##떠있는지 감지. mccs monitor script 참조한다.
    if [ $num -ne “0” ] ##위 프로세스 중 하나라도 떠있으면 tbdown abort를 날린다.
    then
    count=$[$count+1]else
    exit 0fi
    done
    su – tibero -c “tbdown abort;” &>/dev/null & ##3번째 줄의 sleep 20 + count 문 58×10 = 총 600초 대기한다.
    exit 0
  • Application
    1차명령 : process stop
    1차명령으로 600초간 STOP 안되었을 경우 2차명령 수행 : process kill
    #!/bin/bash
    su – appuser -c “application stop” &>/dev/null &
    sleep 20 ##applicaion 죽는 충분한 시간을 입력한다.
    count=”0″
    while [ $count -lt 58 ]
    do
    sleep 10 ## count 문의 60과 sleep 10초로 총 580초 대기한다. 원하는 시간만큼 58을 수정하거나 sleep 10을 수정한다. (58×10)
    ps -ef | grep “process” | grep -v grep > /dev/null ##떠있는지 감지. mccs monitor script 참조한다.
    if [ $? -ne “0” ] ##위 프로세스가 떠있으면 pid kill을 날린다.
    then
    count=$[$count+1]else
    exit 0fi
    done
    kill -9 `ps -ef|grep “process”|grep -v grep|awk ‘{print $2}’` ##3번째 줄의 sleep 20 + count 문 58×10 = 총 600초 대기한다.
    exit 0
  • 위 두가지 설정 이후 반드시 MCCS 리소스의 OfflineTimeout은 600 초과값으로 등록 해 주어야 함.