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 초과값으로 등록 해 주어야 함.