[MIP-300] System Failover 이후 PreActive노드에서 MCCS Agent 서비스 자동시작 실패

Subject
System Failover 이후 PreActive노드에서 MCCS Agent 서비스 자동시작 실패

APPLIES TO:
MCCS version: 3.3.2
OS:Windows 2008 R2 std
APPs:
Disk Type: Shared or mirror,none 




SYMPTOMS
System Failover 이후 rebooting이 완료된 서버에서 MCCS Agent 서비스가 올라오지 못하고
계속 죽는 문제가 발생했습니다
확인 및 실시사항은 다음과 같습니다
상황 : LCBCARDDBS01서버(운영) 재부팅시 LCBCARDDBS02서버(대기)로 정상 Failover완료, 재부팅 이후 MCCS정상 합류
이후 LCBCARDDBS02서버(운영) 재부팅하여 LCBCARDDBS01서버(대기)로 정상 Failover여부 확인 간, Failover 는 잘 완료되었으나
LCBCARDDBS02서버의 O/S가 정상적으로 올라온 이후 해당 서버에서 MCCS Agent Service가 자동으로 시작되었으나 알 수 없는 원인으로 종료됨 



CAUSE
"원인은 Exception 로그에서 확인할 수 있습니다.
빌드 중에 발생했으며 이 때에는 엔진 재 시작을 하도록 되어 있어서 엔진은 계속 재 시작 했던 것이고, 이전에 어떤 이유였던간에 정상적으로 Connection 이 Close 되지 않은 것 같습니다.
12/05/22-21:17:59,339 | DBS02:SysM | SysMonitor.java : 645 | INFO | 8284
java.sql.SQLException: Connection is broken: java.io.EOFException
java.sql.SQLException: Connection is broken: java.io.EOFException
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source)
at org.hsqldb.jdbcDriver.getConnection(Unknown Source)
at org.hsqldb.jdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:75)
at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1181)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
at com.mantech.mccs.engine.db.PoolDataSource.getConnection(PoolDataSource.java:37)
at com.mantech.mccs.engine.db.DBConfigurator.getConnection(DBConfigurator.java:201)
at com.mantech.mccs.engine.hb.SysMonitor.build(SysMonitor.java:639)
at com.mantech.mccs.engine.hb.SysMonitor.run(SysMonitor.java:436)
at java.lang.Thread.run(Unknown Source)"



SOLUTION
MCCS log 확인 : ""FATAL | RUNNING중인 노드가 있으나 링크를 연결할 수 없습니다"" 출력
원인 :
LCBCARDDBS01 서버와 LCBCARDDBS02 서버의 TCP 연결(Linker 로 연결된 원격 노드로의 DB 접속시도)이 정상적으로 종료되지 않음.
현상 :
LCBCARDDBS01 서버의 특정포트가 ""SYN 보냄"" 으로 고정되어 있음.
해결 방안 :
LCBCARDDBS01 서버의 엔진 재 시작.
추가 :
""SYN 보냄"" 상태로 고정되어 있는 것은 TCP 의 Flow 로써 해당 포트가 특정시간(OS 설정시간)동안 대기하는 것이 당연함.
이 상태를 해제하기 위해서는 포트를 닫고 다시 열어야 하는데 2가지 방법이 있음.
첫 번째 방법은 대기를 ��� 시간동안(OS 설정시간) 기다리는 것이고, 두 번째 방법은 포트를 제어하는 프로그램을 종료 후 재 시작 하는 것임.

Fix version : 3.4