Scale Out のトラブルシューティング

適用対象: SQL Server Azure Data Factory の SSIS Integration Runtime

SSIS Scale Out には、SSIS カタログ データベース SSISDB、Scale Out Master サービス、Scale Out Worker サービス間の通信が含まれます。 この通信は、構成の誤り、アクセス許可がない、およびその他の理由により中断する場合があります。 この記事は、Scale Out 構成に関する問題のトラブルシューティングに役立ちます。

発生した現象を調査するため、問題が解決されるまで、以下の手順を 1 つずつ実行してください。

Scale Out Master が失敗する

現象

  • Scale Out Master が SSISDB に接続できない。

  • Scale Out Manager にマスター プロパティが表示できない。

  • マスター プロパティがビュー [catalog].[master_properties] に入力されない。

解決策

  1. Scale Out が有効になっているかどうかを確認します。

    SSMS のオブジェクト エクスプローラーで [SSISDB] を右クリックして、 [Scale Out 機能が有効です] を確認します。

    Scale Out が有効になっているか

    プロパティ値が False の場合は、ストアド プロシージャ [catalog].[enable_scaleout] を呼び出して、Scale Out を有効にします。

  2. Scale Out Master 構成ファイルで指定された SQL Server 名が正しいかどうかを確認し、Scale Out Master サービスを再起動します。

Scale Out Worker が失敗する

現象

  • Scale Out Worker が Scale Out Master に接続できない。

  • Scale Out Worker が、Scale Out Manager に追加した後に表示されなくなる。

  • Scale Out Worker がビュー [catalog].[worker_agents] に表示されない。

  • Scale Out Worker サービスは実行されているが、Scale Out Worker がオフラインである。

解決策

\<drive\>:\Users\\*[account running worker service]*\AppData\Local\SSIS\Cluster\Agent にある Scale Out Worker サービス ログのエラー メッセージを確認します。

リッスンしているエンドポイントがない

現象

"System.ServiceModel.EndpointNotFoundException: メッセージを受信できる https:// [MachineName]:[Port] /ClusterManagement/ でリッスンしているエンドポイントがありませんでした。"

解決策

  1. Scale Out Master のサービス構成ファイルで指定されたポート番号が正しいかどうかを確認し、Scale Out Master サービスを再起動します。

  2. Scale Out Worker サービスの構成で指定されたマスター エンドポイントが正しいかどうかを確認し、Scale Out Worker サービスを再起動します。

  3. Scale Out Master ノードでファイアウォール ポートが開いているかどうかを確認します。

  4. Scale Out Master ノードと Scale Out Worker ノード間のその他の接続の問題を解決します。

信頼関係を確立できませんでした

現象

""System.ServiceModel.Security.SecurityNegotiationException: 機関 '[Machine Name]:[Port]' との SSL/TLS のセキュリティで保護されているチャネルに対する信頼関係を確立できませんでした。"

"System.Net.WebException: 基になる接続が閉じられました。SSL/TLS のセキュリティで保護されているチャネルに対する信頼関係を確立できませんでした。"

"System.Security.Authentication.AuthenticationException: 検証プロシージャによると、リモート証明書は無効です。"

解決策

  1. Scale Out Master 証明書を Scale Out Worker ノードのローカル コンピューターのルート証明書ストアにインストールして (証明書がまだインストールされていない場合)、Scale Out Worker サービスを再起動します。

  2. マスター エンドポイント内のホスト名が Scale Out Master 証明書の CN に含まれているかどうかを確認します。 含まれていない場合は、Scale Out Worker の構成ファイル内のマスター エンドポイントをリセットし、Scale Out Worker サービスを再起動します。

    Note

    DNS の設定が原因でマスター エンドポイントのホスト名を変更できない場合は、Scale Out Master 証明書を変更する必要があります。 「Scale Out の証明書の管理」を参照してください。

  3. Scale Out Worker の構成で指定されたマスター サムプリントが Scale Out Worker 証明書のサムプリントと一致するかどうかを確認します。

セキュリティで保護されたチャネルを確立できませんでした

現象

"System.ServiceModel.Security.SecurityNegotiationException: オーソリティ '[Machine Name]:[Port]' と、セキュリティで保護された SSL/TLS のチャネルを確立できませんでした。"

"System.Net.WebException: 要求が中止されました:SSL/TLS のセキュリティで保護されているチャネルを作成できませんでした。"

解決策

次のコマンドを実行して、Scale Out Worker サービスを実行するアカウントに、Scale Out Worker 証明書へのアクセス権があるかどうかを確認します。

winhttpcertcfg.exe -l -c LOCAL_MACHINE\MY -s {CN of the worker certificate}

アカウントにアクセス権がない場合は、次のコマンドを実行してアクセス権を付与し、Scale Out Worker サービスを再起動します。

winhttpcertcfg.exe -g -c LOCAL_MACHINE\My -s {CN of the worker certificate} -a {the account running Scale Out Worker service}

HTTP 要求が禁止されている

現象

"System.ServiceModel.Security.MessageSecurityException: この HTTP 要求は、クライアントの認証方式 'Anonymous' で許可されませんでした。"

"System.Net.WebException: リモート サーバーがエラー403 許可されていません。"

解決策

  1. Scale Out Worker 証明書を、Scale Out Master ノードのローカル コンピューターのルート証明書ストアにインストールし (証明書がまだインストールされていない場合)、Scale Out Worker サービスを再起動します。

  2. Scale Out Master ノード上のローカル コンピューターのルート証明書ストア内の不要な証明書をクリーンアップします。

  3. Scale Out Master ノードに次のレジストリ エントリを追加することで、TLS/SSL のハンドシェイク プロセス中に信頼されたルート証明機関の一覧を送信しないように、Schannel を構成します。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

    値の名前:SendTrustedIssuerList

    値の型:REG_DWORD

    値のデータ:0 (False)

  4. 手順 2 の説明のように自己署名以外の証明書をすべて消去できない場合、次のレジストリ キーの値を 2 に設定します。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL

    値の名前:ClientAuthTrustMode

    値の型:REG_DWORD

    値のデータ:2

    Note

    自己署名以外の証明書がルート証明書ストアにある場合は、クライアント証明書の認証が失敗します。 詳細については、「Internet Information Services (IIS) 8 may reject client certificate requests with HTTP 403.7 or 403.16 errors」(インターネット インフォメーション サービス (IIS) 8 で HTTP 403.7 エラーまたは 403.16 エラーが発生してクライアント証明書の要求が拒否される可能性がある) を参照してください。

HTTP 要求エラー

現象

"System.ServiceModel.CommunicationException: https://[Machine Name]:[Port]/ClusterManagement/ に対する HTTP 要求の発行中にエラーが発生しました。 これは、HTTPS ケースの HTTP.SYS でサーバー証明書が正しく構成されていないという事実が原因と考えられます。 またはクライアントとサーバーの間でセキュリティ バインドが整合していないことも原因になり得ます。"

解決策

  1. 次のコマンドを実行して、Scale Out Master 証明書がマスター ノード上のマスター エンドポイントのポートに正しくバインドされているかどうかを確認します。

    netsh http show sslcert ipport=0.0.0.0:{Master port}
    

    表示される証明書ハッシュが Scale Out Master 証明書のサムプリントと一致しているかどうかを確認します。 バインドが正しくない場合は、次のコマンドを実行してバインドをリセットし、Scale Out Worker サービスを再起動します。

    netsh http delete sslcert ipport=0.0.0.0:{Master port}
    netsh http add sslcert ipport=0.0.0.0:{Master port} certhash={Master certificate thumbprint} certstorename=Root  appid={random guid}
    

証明書ストアを開けない

現象

Scale Out Manager で Scale Out Worker を Scale Out Master に接続したときに、 "マシン上で証明書ストアを開けません" というエラー メッセージが表示され、検証が失敗する。

解決策

  1. 管理者として Scale Out Manager を実行します。 SSMS で Scale Out Manager を開く場合は、SSMS を管理者として実行する必要があります。

  2. コンピューターでリモート レジストリ サービスを起動します (実行されていない場合)。

実行が開始されない

現象

Scale Out で実行が開始されない。

解決策

ビュー [catalog].[worker_agents] でパッケージを実行するために選択したコンピューターの状態を確認します。 少なくとも 1 つのワーカーがオンラインで有効になっている必要があります。

ログがない

現象

パッケージは正常に実行されているが、メッセージがログに記録されない。

解決策

SSISDB をホストする SQL Server インスタンスにより SQL Server 認証が許可されているかどうかを確認します。

Note

Scale Out ログのアカウントを変更した場合は、「Scale Out ログのアカウントの変更」を参照し、ログ記録に使用する接続文字列を確認します。

エラー メッセージが役に立たない

現象

パッケージ実行レポート内のエラー メッセージが、トラブルシューティングには不十分である。

解決策

WorkerSettings.config で構成されている TasksRootFolder には、さらに多くの実行ログがあります。 既定では、このフォルダーは \<drive\>:\Users\\[account]\AppData\Local\SSIS\ScaleOut\Tasks です。 [account] は、既定値が SSISScaleOutWorker140 の Scale Out Worker サービスを実行しているアカウントです。

[execution ID] を持つパッケージ実行のログを見つけるには、次の Transact-SQL コマンドを実行して [task ID] を取得します。 次に、TasksRootFolder[task ID] を含むサブフォルダー名を見つけます。

SELECT [TaskId]
FROM [SSISDB].[internal].[tasks] tasks, [SSISDB].[internal].[executions] executions 
WHERE executions.execution_id = *Your Execution Id* AND tasks.JobId = executions.job_id

警告

このクエリはトラブルシューティング専用です。 クエリで参照されている内部ビューは、今後、変更される可能性があります。

次のステップ

詳細については、SSIS Scale Out のセットアップと構成に関する以下の記事を参照してください。