큐 관리자가 다른 클러스터 노드로 장애 조치(failover)할 때 MQSeries 어댑터는 더 이상 클러스터된 MQSeries 큐 관리자에서 메시지를 검색하지 않습니다.

이 문서는 큐 관리자가 다른 클러스터 노드로 장애 조치(failover)할 때 MQSeries 어댑터가 클러스터된 MQSeries 큐 관리자에서 메시지를 더 이상 검색하지 않는 문제를 해결하는 데 도움이 됩니다.

원래 제품 버전: 2020년 BizTalk Server, 2016년 BizTalk Server, 2013년 BizTalk Server, BizTalk Server 2010년, BizTalk Server 2009
원래 KB 번호: 893059

증상

클러스터된 MQSeries 큐 관리자로부터 메시지를 받도록 MQSeries용 Microsoft BizTalk Server 어댑터를 구성합니다. 큐 관리자가 다른 클러스터 노드로 장애 조치(failover)하는 경우 MQSeries 어댑터는 더 이상 클러스터된 큐에서 메시지를 검색하지 않습니다. 이 동작이 발생하면 애플리케이션 로그에 다음 이벤트가 기록됩니다.

이벤트 유형: 경고
이벤트 원본: BizTalk Server 20xx
이벤트 범주: BizTalk Server 20xx
이벤트 ID: 5740
날짜: 2006년 12월 31일 시간: 오전 11:12:13
사용자: 해당/A
컴퓨터:
설명: 어댑터 "MQSeries"에서 오류 메시지가 발생했습니다. 세부 정보 "큐 관리자 이름 = MYQMNAME 이유 코드 = 2059를 열 때 오류가 발생했습니다.".

참고

이 로그 항목에서 는 <20xx> 실제 버전 번호를 나타내고 <MYQMNAME> 실제 큐 관리자 이름을 나타냅니다.

해결 방법

이 문제를 해결하려면 두 노드에서 예약된 작업을 만듭니다. 이렇게 하려면 다음과 같이 하십시오.

  1. 활성 노드에서 Services.msc를 엽니다. 두 개의 MSDTC 서비스가 나열되어야 합니다. 하나는 로컬이고 GUID는 없고 하나는 클러스터형이고 GUID가 있는 서비스입니다.

  2. 관리자 권한 명령 프롬프트에서 다음 명령을 실행합니다.

    sc queryex | find /I "Transaction"
    

    명령 출력에는 이 절차의 스크립트에 사용해야 하는 GUID가 포함되어 있습니다. The GUID: Distributed Transaction Coordinator (01234567-89ab-cdef-0123-456789abcdef)

  3. 다음 코드를 파일에 저장하고 파일 이름을 로Shutdownmqadapter.vbs. 쿼럼 디스크 이외의 디스크에 파일을 저장할 수 있습니다.

    참고

    이 코드에서 표시된 GUID(01234567-89ab-cdef-0123-456789abcdef)는 자리 표시자입니다. 이 GUID를 2단계에서 기록한 실제 클러스터형 MSDTC GUID로 바꿉 있습니다.

    Option Explicit
    On Error Resume Next
    Dim sComputerName, oWMIService, colRunningServices, oService, colProcessList, objProcess 
    If Wscript.Arguments.Count = 0 Then  
      sComputerName = "."  
      Call ServStat  
      Wscript.Quit
    End If
    Sub ServStat
    Set oWMIService  = GetObject("winmgmts:" _  
      & "{impersonationLevel=impersonate}!\\" & sComputerName& "\root\cimv2")
    Set colRunningServices = oWMIService.ExecQuery _  
      ("Select * from Win32_Service where DisplayName='Distributed Transaction Coordinator (01234567-89ab-cdef-0123-456789abcdef)'")
    For Each oService in colRunningServices  
       'Wscript.Echo oService.DisplayName  & VbTab & oService.State  
       If (oService.State="Stopped") Then
          'Wscript.Echo "Stopped"
          'find the dllhost
           Set colProcessList = oWMIService.ExecQuery ("SELECT * FROM Win32_Process WHERE Name = 'DLLHOST.EXE'")
           For Each objProcess in colProcessList
             If inStr(objProcess.CommandLine, "C691D827-19A0-42E2-B5E8-2892401481F5")>0 Then
                'Wscript.Echo objProcess.ProcessId
                Dim objShell
                Set objShell = CreateObject("WScript.Shell")
                objShell.Run "cmd /k taskkill /F /PID " & objProcess.ProcessId & "& exit"
                WScript.Quit
             End If
           Next  
        End If
    Next
    End Sub
    
  4. 시작을 선택하고 작업을 입력한 다음 결과 목록에서 작업 스케줄러를 선택합니다.

  5. 작업 스케줄러에서 작업>Create 기본 작업을 선택합니다.

  6. 마법사 화면을 실행하여 매일 Shutdownmqagent.vbs 파일을 실행하는 예약된 작업을 만듭니다.

참고

6단계의 경우 자정에 시작하도록 일정을 설정하고 24시간 동안 1분마다 반복합니다.

이전 BizTalk 버전에는 다른 MQSAgent COM+ GUID가 있을 수 있습니다. 대신 C691D827-19A0-42E2-B5E8-2892401481F5이 있을 6D06157A-730B-4CB3-BD11-D48AC6B8A4BB 수 있습니다. 따라서 제품을 업그레이드한 후 기존 스크립트를 변경해야 할 수 있습니다.

추가 정보

IBM MQ 큐 관리자가 장애 조치(failover) 클러스터 역할에서 클러스터형 리소스로 실행되는 경우에도 MQSAgent COM+ 애플리케이션을 클러스터화해서는 안 됩니다. COM+ 애플리케이션을 실행하는 DLLHost.exe 클러스터를 인식하지 못하기 때문입니다. MQSAgent COM+ 애플리케이션을 설치하고 두 노드에 개별적으로 구성해야 합니다.
고가용성을 보장하려면 해결 방법 섹션 의 모니터링 스크립트와 함께 동일한 클러스터 역할의 클러스터형 IBM MQ 큐 관리자 리소스와 클러스터된 MSDTC 리소스를 모두 사용해야 합니다.

적용 대상

  • BizTalk Server 2020 Enterprise
  • BizTalk Server 2016 Enterprise
  • BizTalk Server 2013 R2 Enterprise
  • BizTalk Server 2013 Enterprise
  • BizTalk Server Enterprise 2010년
  • BizTalk Server 2009 Enterprise