2012.09.07 22:35
클러스터 노드들은 Heartbeat 신호를 이용해서 각 노드의 OS레벨과 SQL 서버 레벨에서 살아있는지 확인한다.
SQL 서버 리소스를 호스팅하는 노드는 Service Control Manager를 이용해서 5초마다 SQL 서버 서비스가 실행중인지 확인한다. 이 "LooksAlive"확인은 성능에 영향을 주지 않는다. Running이면 성공이고 아니여도 운영상 문제는 없다. 보다 정확한 확인은 매 60초마다 수행되는 "IsAlive"다.
IsAlive:
IsAlive 확인 실패:
5번 재 시도하고 SQL 서버 인스턴스에 다시 연결 시도흘 한다.
5번 재 시도가 실패하면 서버 리소스는 fail이 된다.
Failover threshold 설정 값에 따라 다르지만 failover Cluster는 같은 노드에 있는 리소스를 모두 재 시작하거나 다른 가능한 노드로 failover 할것이다.
IsAlive 쿼리는 몇 개의 에러는 무시하지만 threshold 값을 초과하여 실패하면 fail이다.
SQL 서버 인스턴스가 failover되는 동안에 새로운 노드에서 SQL 서버 리소스가 시작되고 SQL 서버는 데이타베이스를 재 시작하기위해서 복구 프로세스를 진행한다. 서비스가 시작 된 후에는 master 데이타베이스가 살고, SQL 서버 리소스는 실행될 지 고려된다. 사용자 데이타베이스는 일반복구 프로세스가 진행된다. 트렌젝션 로그에 있는 완료된 트렌젝션은 롤퍼워드(rolled forward 또는 redo phase) 된다. 완료되지 않은 트렌젝션은 롤벡(rolled back 또는 undo phase)된다.
http://blogs.technet.com/b/rob/archive/2008/05/07/failover-clustering.aspx
SQL server enterprise에서는 각각의 사용자 데이타베이스는 사용 가능하다. 다른 에디션에서는(모든 SQL 2000 에디션 포함) 각각의 사용자 데이타베이스에 대해서 Undo Phase가 완료 될 때까지 사용할 수 없다. 복구 프로세스의 처리 시간은 얼마나 많은 롤백이나 롤퍼워드같은 액티빅티가 필요하냐에 따라 다르다.
sp_configure 옵션의 "Recovery interval"은 복구 프로세스를 빠르게 하고 Redo recovery 시간이 길어지는 걸 방지하기 위해 낮은 값으로 설정된다. Undo recovery 시간은 트랜잭션을 짧게 처리함으로써 시간을 단축할 수 있다. 그래서 롤백되는데 커밋되지 않은 트랜잭션은 많지않다.