キュー・マネージャーが別のクラスター・ノードにフェールオーバーしたときに、MQSeries アダプターがクラスター化 MQSeries キュー・マネージャーからメッセージを取得しなくなりました

この記事は、キュー・マネージャーが別のクラスター・ノードにフェールオーバーしたときに、MQSeries アダプターがクラスター化 MQSeries キュー・マネージャーからメッセージを取り出さなくなる問題を回避するのに役立ちます。

元の製品バージョン: BizTalk Server 2020、BizTalk Server 2016、BizTalk Server 2013、BizTalk Server 2010、BizTalk Server 2009
元の KB 番号: 893059

現象

クラスター化 MQSeries キュー・マネージャーからメッセージを受信するように、MICROSOFT BizTalk Server Adapter for MQSeries を構成します。 キュー・マネージャーが別のクラスター・ノードにフェールオーバーした場合、MQSeries アダプターはクラスター化キューからメッセージを取得しなくなります。 この動作が発生すると、次のイベントがアプリケーション ログに記録されます。

イベントの種類: 警告
イベント ソース: BizTalk Server 20xx
イベント カテゴリ: BizTalk Server 20xx
イベント ID: 5740
日付: 2006 年 12 月 31 日時刻: 午前 11:12:13
ユーザー: N/A
コンピューター:
説明: アダプター "MQSeries" でエラー・メッセージが発生しました。 詳細 "キュー マネージャー名 = MYQMNAME 理由コード = 2059 を開くときにエラーが発生しました"。

注:

このログ エントリでは、 <20xx> 実際のバージョン番号を表し <MYQMNAME> 、実際のキュー マネージャー名を表します。

回避策

この問題を回避するには、両方のノードでスケジュールされたタスクを作成します。 これを行うには、次の手順を実行します。

  1. アクティブ なノードで、 Services.msc を開きます。 2 つの MSDTC サービスが一覧表示されます。1 つはローカルで GUID がなく、もう 1 つはクラスター化され、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. [ スタート] を選択し、「 task」と入力し、結果の一覧で [タスク スケジューラ ] を選択します。

  5. タスク スケジューラで、[アクションCreate基本タスク] を選択します>。

  6. ウィザード画面を実行して、 Shutdownmqagent.vbs ファイルを毎日実行するスケジュールされたタスクを作成します。

注:

6 ステップでは、午前 0 時に開始し、1 分ごとに 24 時間繰り返すスケジュールを設定します。

以前の BizTalk バージョンでは、MQSAgent COM+ GUID が異なる場合があります。 の代わりに C691D827-19A0-42E2-B5E8-2892401481F5を持つ6D06157A-730B-4CB3-BD11-D48AC6B8A4BB場合があります。 そのため、製品をアップグレードした後に既存のスクリプトを変更する必要がある場合があります。

詳細

IBM MQ キュー・マネージャーが、フェールオーバー・クラスター・ロールでクラスター化リソースとして実行されている場合でも、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