[server] 주 서버가 실제로 오프라인 상태가되면 C #의 DB 자동 장애 조치가 작동하지 않습니다

SQL Server 2008을 사용하여 C #에서 DB 자동 장애 조치를 설정하고 감시 설정을 사용하는 ‘자동 장애 조치 미러로 높은 안전성’을 가지고 있으며 연결 문자열은 다음과 같습니다.

"Server=tcp:DC01; Failover Partner=tcp:DC02; database=dbname; uid=sewebsite;pwd=somerndpwd;Connect Timeout=10;Pooling=True;"

테스트하는 동안 주 서버에서 SQL Server 서비스를 끄면 자동 장애 조치가 매력처럼 작동하지만 주 서버를 오프라인으로 가져 가면 (서버를 종료하거나 네트워크 카드를 종료하여) 자동 장애 조치가 작동하지 않습니다. 웹 사이트가 시간 초과되었습니다.

두 번째 마지막 게시물에서 우리는 주체가 오프라인 상태가 될 때 작동하지 않는 명명 된 파이프를 사용하기 때문에이 기사를 찾았 지만 연결 문자열에서 TCP를 강제합니다.

이 DB 자동 장애 조치를 수행하기 위해 무엇을 놓치고 있습니까?



답변

MS와 일주일 동안 일한 후 왜 이런 일이 발생했는지 알아 냈습니다.

기본적으로 응용 프로그램은 데이터베이스가 페일 오버되었는지 확인해야하기 때문에 페일 오버하지 않으며 연결이 db 페일 오버를 결정하기 전에 SQL 연결이 시간 초과됩니다.

데이터베이스가 페일 오버되었는지 확인하는 프로세스 (모든 기본 tcp 레지스트리 설정 사용)는 다음과 같습니다.

  1. 교장과 의사 소통을 시도하십시오.
  2. 장애 조치 (failover)와 통신하여 장애 조치 (failover)가 이루어졌으며 이제 새 주체인지 확인합니다.

보안 주체가 다운되면이 통신은 다음과 같은 이유로 약 21 초가 걸립니다.

  1. 교장과 통신을 시도하고 3 초 동안 기다린 후 시간 초과
  2. 교장과 다시 통신을 시도하고 6 초 동안 기다린 후 시간 초과
  3. 교장과 다시 통신을 시도하고 12 초 동안 기다린 후 시간 초과
  4. 장애 조치 파트너와 통신을 시도하고 장애 조치 파트너가 장애 조치를했는지 확인한 후 응용 프로그램에서 장애 조치를 수행하십시오.

따라서 SQL 연결이 21 초 (아마도 실제로 더 많음)를 기다리지 않으면이 춤을 끝내기 전에 시간 초과가 끝나고 전혀 실패하지 않습니다.

해결책은 연결 문자열의 시간 초과를 큰 값으로 설정하는 것입니다. 안전을 위해 60 초를 사용합니다.

건배


답변

테스트 시점에 자동 장애 조치 조건이 충족되지 않는지 궁금합니다. 특히-실패시 데이터베이스가 미러와 동기화되지 않은 경우 (sys.database_mirroring에서 미러링 상태 확인) 및 / 또는 해당 시점에 감시 및 미러가 연결되어 있지 않은 경우 (참여 역할 간 핑을 통해 테스트)

파트너와 미러가 서로 연결되지 않은 상황이있을 수도 있지만 파트너와 미러 데이터베이스는 여전히 감시자에게 독립적으로 연결되어 있습니다. 이 경우 감시자는 잘못된 것을 보지 못하므로 장애 조치가 없습니다. 그러나 서버 자체를 종료한다고 언급 했으므로이 소리가 덜 들립니다.

아니면 장애 조치가 결국 발생하지만 재 연결이 실패한다고 말하고 있습니까? 이 경우 검색 및 장애 조치 시간은 주체가 실패한 방법과 미러 DB를 복구하는 총 시간에 따라 다릅니다.


답변