2011년 8월 29일 월요일

[10g] vip check interval 변경 하기

vip check interval 변경 하기

vip속성중에 CHECK_INTERVAL 이 존재 합니다.
CRS가 VIP 의 UP/DOWN 을 CHECK 하는 시간(s) 간격 입니다.

이것이 DEFAULT 값 설정 값에 대한 정확히 체크는 안 해 봤지만..
약간 다들 차이가 나는것 같습니다. 30초 이거나 60초 이렇게 되면 한쪽 노드 다운 되고도 vip 가 failover 되는데
최고 CHECK_INTERVAL설정 값에 따라 걸릴 수도 있습니다.

그래서 이 값을 변경하고자 할때 절차를 넣어 봅니다.

### vip resource name 확인 하기

[DEVD1:/u01] crs_stat
NAME=ora.DEVD.DEVD1.inst
TYPE=application
TARGET=ONLINE
STATE=ONLINE on notedb1

NAME=ora.DEVD.DEVD2.inst
TYPE=application
TARGET=ONLINE
STATE=ONLINE on notedb2

NAME=ora.DEVD.db
TYPE=application
TARGET=ONLINE
STATE=ONLINE on notedb2

NAME=ora.notedb1.LISTENER_NOTEDB1.lsnr
TYPE=application
TARGET=ONLINE
STATE=ONLINE on notedb1

NAME=ora.notedb1.gsd
TYPE=application
TARGET=ONLINE
STATE=ONLINE on notedb1

NAME=ora.notedb1.ons
TYPE=application
TARGET=ONLINE
STATE=ONLINE on notedb1

NAME=ora.notedb1.vip
TYPE=application
TARGET=ONLINE
STATE=ONLINE on notedb1

NAME=ora.notedb2.LISTENER_NOTEDB2.lsnr
TYPE=application
TARGET=ONLINE
STATE=ONLINE on notedb2

NAME=ora.notedb2.gsd
TYPE=application
TARGET=ONLINE
STATE=ONLINE on notedb2

NAME=ora.notedb2.ons
TYPE=application
TARGET=ONLINE
STATE=ONLINE on notedb2

NAME=ora.notedb2.vip
TYPE=application
TARGET=ONLINE
STATE=ONLINE on notedb2

[DEVD1:/u01]


NAME=ora.xxxx.vip 확인을 한다. ( ora.notedb1.vip, ora.notedb2.vip)

### vip 의 상세정보 확인 하기
crs_stat -p 또는 crs_stat -p resource_name ( 예로 ora.xxxxx.vip )

그렇게 되면
CHECK_INTERVAL=xx 값을 확인 할수 있습니다.


[DEVD1:/u01] crs_stat -p ora.notedb1.vip
NAME=ora.notedb1.vip
TYPE=application
ACTION_SCRIPT=/u01/app/oracle/product/10.2/crs/bin/racgwrap
ACTIVE_PLACEMENT=1
AUTO_START=1
CHECK_INTERVAL=30
DESCRIPTION=CRS application for VIP on a node
FAILOVER_DELAY=0
FAILURE_INTERVAL=0
FAILURE_THRESHOLD=0
HOSTING_MEMBERS=notedb1
OPTIONAL_RESOURCES=
PLACEMENT=favored
REQUIRED_RESOURCES=
RESTART_ATTEMPTS=0
SCRIPT_TIMEOUT=60
START_TIMEOUT=0
STOP_TIMEOUT=0
UPTIME_THRESHOLD=7d
USR_ORA_ALERT_NAME=
USR_ORA_CHECK_TIMEOUT=0
USR_ORA_CONNECT_STR=/ as sysdba
USR_ORA_DEBUG=0
USR_ORA_DISCONNECT=false
USR_ORA_FLAGS=
USR_ORA_IF=eth0
USR_ORA_INST_NOT_SHUTDOWN=
USR_ORA_LANG=
USR_ORA_NETMASK=255.255.255.0
USR_ORA_OPEN_MODE=
USR_ORA_OPI=false
USR_ORA_PFILE=
USR_ORA_PRECONNECT=none
USR_ORA_SRV=
USR_ORA_START_TIMEOUT=0
USR_ORA_STOP_MODE=immediate
USR_ORA_STOP_TIMEOUT=0
USR_ORA_VIP=192.168.10.110

[DEVD1:/u01]



[DEVD2:/u01] crs_stat -p ora.notedb2.vip
NAME=ora.notedb2.vip
TYPE=application
ACTION_SCRIPT=/u01/app/oracle/product/10.2/crs/bin/racgwrap
ACTIVE_PLACEMENT=1
AUTO_START=1
CHECK_INTERVAL=30
DESCRIPTION=CRS application for VIP on a node
FAILOVER_DELAY=0
FAILURE_INTERVAL=0
FAILURE_THRESHOLD=0
HOSTING_MEMBERS=notedb2
OPTIONAL_RESOURCES=
PLACEMENT=favored
REQUIRED_RESOURCES=
RESTART_ATTEMPTS=0
SCRIPT_TIMEOUT=60
START_TIMEOUT=0
STOP_TIMEOUT=0
UPTIME_THRESHOLD=7d
USR_ORA_ALERT_NAME=
USR_ORA_CHECK_TIMEOUT=0
USR_ORA_CONNECT_STR=/ as sysdba
USR_ORA_DEBUG=0
USR_ORA_DISCONNECT=false
USR_ORA_FLAGS=
USR_ORA_IF=eth0
USR_ORA_INST_NOT_SHUTDOWN=
USR_ORA_LANG=
USR_ORA_NETMASK=255.255.255.0
USR_ORA_OPEN_MODE=
USR_ORA_OPI=false
USR_ORA_PFILE=
USR_ORA_PRECONNECT=none
USR_ORA_SRV=
USR_ORA_START_TIMEOUT=0
USR_ORA_STOP_MODE=immediate
USR_ORA_STOP_TIMEOUT=0
USR_ORA_VIP=192.168.10.111

[DEVD2:/u01]

### CHECK_INTERVAL 값 변경 하기

-- root 유저로 수행
crs_register ora.xxxx.vip -update -o ci=10 <-- 10초 간격으로 변경 하기. crs_register ora.notedb1.vip -update -o ci=60 crs_register ora.notedb1.vip -update -o st=60 -- 변경값 확인 crs_stat -p ora.xxxx.vip 수행 후 CHECK_INTERVAL 변경사항을 보면 됩니다. 적용 사례) [DEVD2:/u01] crs_stat -p ora.notedb1.vip | egrep 'CHECK_INTERVAL|SCRIPT_TIMEOUT' CHECK_INTERVAL=30 SCRIPT_TIMEOUT=60 [DEVD1:/u01] [DEVD1:/u01] crs_register ora.notedb1.vip -update -o ci=60
[DEVD1:/u01] crs_register ora.notedb1.vip -update -o st=60
[DEVD1:/u01] crs_stat -p ora.notedb1.vip | egrep 'CHECK_INTERVAL|SCRIPT_TIMEOUT'
CHECK_INTERVAL=60
SCRIPT_TIMEOUT=60
[DEVD1:/u01]

[DEVD2:/u01] crs_stat -p ora.notedb2.vip | egrep 'CHECK_INTERVAL|SCRIPT_TIMEOUT'
CHECK_INTERVAL=30
SCRIPT_TIMEOUT=60
[DEVD2:/u01]
[DEVD2:/u01] id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
[DEVD2:/u01] crs_register ora.notedb2.vip -update -o ci=60,st=60
[DEVD2:/u01] crs_stat -p ora.notedb2.vip | egrep 'CHECK_INTERVAL|SCRIPT_TIMEOUT'
CHECK_INTERVAL=60
SCRIPT_TIMEOUT=60
[DEVD2:/u01]



위의 내용중..

SCRIPT_TIMEOUT=60 설정값이 보일겁니다..

모 사이트에서 위의 설정값으로 인해 에러 로그가 생기는데..

에러 로그는 다음과 같습니다.
2011-xx-xx xx:xx:xx.xxx: [ CRSEVT][16157]32CAAMonitorHandler :: 0:Action Script /u01/app/oracle/product/10.2/crs/bin/racgwrap(check) timed
out for ora.notedb2.vip! (timeout=60)
2011-xx-xx xx:xx:xx.xx: [ CRSAPP][16157]32CheckResource error for ora.notedb2.vip error code = -2

위에서 설정정 timeout=60 은 SCRIPT_TIMEOUT 설정값에 의해 수행 되는것으로..
왜 이렇게 에러가 발생 하는것에 대해 아래와 같이 조치 및 답변 내용.

보통 I/O waiting이 발생할 경우 VIP timeout이 발생할 수 있습니다.
IBM (GPFS+Replica) 환경에서는 Begin Backup 수행시 Instance Level
Checkpoint가 발생하면서 대량의 I/O로 인해 일시적으로 I/O waiting이 발생합니다.

이때, VIP timeout이 발생하여 30 -> 60으로 증가시킨 사례가 있었다고 합니다.

timeout이 일어난다고 해서 failover 가 일어날수 있는지 여부 및 몇번 이상 되면
failover 가 나는지 여부는 관계가 없을 듯 합니다.

따라서 timeout 및 timeout 횟수에 따른 failover 가 일어난다는것은 기본적으로 배제한다.
(failover가 timeout 발생시 마다 이루어 지지 않았다면 timeout은 failover 와 관계가 없는것이 맞을 듯 함.)

그러나 timeout과 failover가 완전히 상관관계가 없지는 않을것 같은것을 고려 하여.
즉, VIP 등에 문제가 있어 timeout이 날경우 정상적인 failover도 발생할수 있으니 ...


VIP 의 안정화을 위해

cd $ORA_CRS_HOME/bin

vi racgvip 안의 파일 내용을 보시면..

# hard code default gateway here if needed
DEFAULTGW=

위의 파일 내용처럼 default gateway 설정값이 없으므로
설정을 해 주는 과정이 필요 합니다.

(설정값은 아래 참조 )
# hard code default gateway here if needed
DEFAULTGW=192.168.10.2


위의 설정을 통해 default gateway를 못찾아 timeout이 발생하는 현상을 막을수 있을듯 합니다.

그리고 각각의 노드별 CHECK_INTERVAL 값 과 SCRIPT_TIMEOUT 값을 확인 후 동일하게 맞추는 작업이 필요 합니다.

vip check interval 변경 하기


vip속성중에 CHECK_INTERVAL 이 존재 합니다.
CRS가 VIP 의 UP/DOWN 을 CHECK 하는 시간(s) 간격 입니다.

이것이 default 60 인데 이렇게 되면 한쪽 노드 다운 되고도 vip 가 failover 되는데 최고 60 sec 가까이 걸릴 수도 있습니다.

그래서 이 값을 변경하고자 할때 절차를 넣어 봅니다.

### vip resource name 확인 하기

crs_stat



NAME=ora.xxxx.vip 확인을 한다.


### vip 의 상세정보 확인 하기
crs_stat -p 또는 crs_stat -p resource_name ( 예로 ora.xxxxx.vip )

그렇게 되면

CHECK_INTERVAL=60


### CHECK_INTERVAL 값 변경 하기

-- root 유저로 수행
crs_register ora.xxxx.vip -update -o ci=10 <-- 10초 간격으로 변경 하기.

-- 변경값 확인
crs_stat -p ora.xxxx.vip 수행 후 CHECK_INTERVAL 변경사항을 보면 됩니다.


## 그리고 나머지 노드 모두 동일하게 수행 하시면 됩니다.

팔로어