2014-09-26 7 views
2

2 개의 Tibco-Ems 서버가 실행 중이며 내결함성 설정이 있습니다. 하나의 서버를 사용할 수없는 경우 활성 서버는 으로 예상대로 장애 조치 서버로 전환합니다.Tibco-Ems 장애 복구 문제

그러나 지금은 이상한 오류가 발생합니다. 그런 다음 새 활성 서버라고 표시됩니다. "재 연결 실패 : ID가 XY 인 연결을 알 수 없음"

이는 클라이언트에 열린 연결이있는 경우에만 발생합니다. 하지만 그게 내가 기대하는 것입니다, 연결도 새로운 활성 서버로 전환해야합니다. 그리고 내가 말했듯이 때로는 효과가 있고 때로는 그렇지 않습니다.

클라이언트에서 EMS 예외를 등록 할 때 다음 오류가 발생합니다. "전송 연결에서 데이터를 읽을 수 없습니다 : 원격 호스트에서 강제로 기존 연결을 닫았습니다."

스택 트레이스 : System.Net.Sockets.NetworkStream.Read에서 (바이트 [] 버퍼 오프셋 INT32, INT32 사이즈) TIBCO.EMS.LinkTcp._readEx에서 (바이트 [] 버퍼 오프셋 INT32, INT32 사이즈) TIBCO.EMS.LinkTcp.LinkReader.Work에서 TIBCO.EMS.LinkTcp._ReadWireMsg() ()

이 지금 내가 할 수있는 것을 더 이상 생각이 없다에서 . 어쩌면 누군가가 내가 정확한 문제가 무엇인지 이해하는 것을 도울 수 있습니다. 사전에 감사

UPDATE : 여기 늦은 업데이트 : 예상대로 내가 오류 "재 연결 실패"얻을 수 있지만 그것은 작동합니다. 두 번째 서버가 인계받습니다.

답변

3

EMS 서버는 보유하고있는 활성 클라이언트 연결을 추적하고 이러한 연결에 대한 정보를 meta.db 저장소 파일에 보관합니다. 내결함성 장애 조치시 새 기본 EMS 인스턴스는 클라이언트가 제공 한 정보를 meta.db 저장소 파일에 저장된 정보와 일치시켜 클라이언트가 다시 연결할 때 클라이언트 연결을 복구 할 수 있습니다.

EMS에서 다시 연결하지 않은 클라이언트 연결을 정리하는 시점이 있습니다. 그 시간은 tibemsd.conf 구성 파일의 ft_reconnect_timeout 매개 변수에 의해 결정됩니다. 이 구성 매개 변수의 기본 설정은 60 초입니다. EMS에서 "만료 된"연결을 정리할 때 로깅 설정에 따라 EMS 로그에서 클라이언트 연결이 "제거"되었음을 나타내는 메시지가 나타날 수 있습니다.

EMS 서버가 이미 만료 된 연결을 제거한 후에 클라이언트가 결국 다시 연결을 시도하는 경우가 있습니다. 이 문제는 네트워크 파티션에서 EMS 서버가 연결을 정리할 때까지 클라이언트가 EMS 서버에 성공적으로 다시 연결할 수없는 경우 발생할 수 있습니다. 이 경우 "재 연결 실패 : 연결을 알 수 없음 ..."메시지가 표시됩니다.

클라이언트가이 오류로 인해 "다시 연결"할 수없는 경우 단순히 "새"연결로 연결을 시도합니다. 이것은 작동하며 계속 처리 할 수 ​​있습니다.

+0

은 이론 상으로는 좋은 것처럼 들리지만 내 경우에는 작동하지 않습니다. 나는 항상 "재 연결 실패"메시지를 받는다. 너 내가 뭘 잘못하고 있는지 알기나 해? – DanielG

+0

"재 연결 실패"메시지를 얻는 유일한 방법은 클라이언트가 서버가 이미 정리 한 재 연결 통과 재 연결 매개 변수를 시도 할 때입니다. 거의 항상 즉시 성공적인 연결이 이어지며 일반적으로 성공적인 연결을 기록 할 때까지 로그되지 않습니다. 이것이 문제가되는 경우 ft_reconnect_timeout 매개 변수를 기본값 인 60 초 (값은 초 단위로 지정)보다 큰 값으로 설정할 수 있습니다. log_trace 매개 변수에 + CONNECT를 추가하면 일어나는 일에 대해 자세히 알 수 있습니다. – nochum

+0

다시 한번 고마워. 하지만 성공적으로 다시 연결하면 어떻게해야합니까? 클라이언트 측에서해야 할 일없이 이전과 마찬가지로 연결해야합니까? 아마도 내가 실수하고있는 부분이 그럴 것입니다. 장애 조치 서버가 인계받은 후, 나의 연결은 더 이상 유효하지 않습니다! 그렇다면 새로운 연결을 만들어야합니까? 나는 그것에 대해 신경 쓸 필요가 없습니까? – DanielG

0

이는 클라이언트 측 FT가 아닌 서버 수준 FT를 사용하는 경우에 발생합니다. 적어도 우리가 근본 원인 인이 문제에 직면했을 때입니다.

FT URL server1 : port, server2 : port와 함께 ems 서버를 사용하고 있지만 서버가 실제로 FT 모드가 아니었던 경우이 두 서버 간의 연결이 전환되면이 문제가 연결로 표시됩니다 다른 서버로 이동하지만 일관성없는 FT 설정으로 인해 새 활성 서버가 실패한 서버의 기존 연결을 파괴하거나 획득 할 수 없습니다.

서버 측의 실제 FT 설정에서 활성 서버는 자동으로 이러한 연결이 활성화 된 것으로 간주하고 계속 연결합니다. 서버 수준 구성을 확인하십시오.

우리에게 서버 수준 FT를 제공하면이 문제를 해결하는 데 도움이됩니다.

+0

어떻게하면됩니까? 서버 수준의 FT를 제공합니까? – DanielG

+0

방금 ​​사용자 안내서를 확인한 결과, "결함 허용 서버 구성"에서 설명한 내용을 정확하게 수행했습니다. 서버가 시작되면 서버 A는 '활성'상태이고 서버 B는 서버 A의 대기 상태임을 알립니다. 그래서 서버 레벨 FT로 설정 한 것 같습니다! 사용자 안내서에 설명 된대로 tibemsd.conf 파일에 server 및 ft_active 매개 변수를 설정합니다. 내가 뭘 놓치고 있니? – DanielG

+0

사용자 가이드에 설명 된대로 설정 한 것입니다. - server =이 매개 변수를 주 서버와 보조 서버의 파일 의 구성에있는 동일한 서버 이름으로 설정합니다. - ft_active 1 차 서버의 구성 파일에서 보조 서버의 URL에 매개 변수를 설정하십시오. 보조 서버 의 구성 파일에서 매개 변수를 활성 서버의 URL로 설정하십시오. – DanielG