SQL Server Integration Services ( SSIS ) Scale Out

Microsoft Japan Data Platform Tech Sales Team

中川

SQL Server の ETL ツールとして提供してきました SQL Server Integration Services (以降 SSIS と称す) ですが、SQL Server 2017 にて Scale Out という機能拡張が行われました。今回はその Scale Out という機能についてご紹介します。

SQL Server 2017 の SSIS では Scale Out Master (以降 Master と称す) と Scale Out Worker (以降 Worker と称す) というサービスに分離されます。 これにより ETL ジョブの管理は Master にて、ジョブの実行は Worker にてといった役割の分離が可能となり、Worker を複数マシン構成にすることにより、ジョブを複数マシンで実行することもできるようになります。つまり処理を “Scale Out” 可能にする構成となります。

image

図1 SQL Server 2017 SSIS の構成

image image

図2 Windows サービス

 

Scale Out Master

SSIS ジョブなどの一元管理を行うためのサービスです。 HTTPS で Worker と通信し、実行可能状態のジョブを Worker に渡したり、ジョブの実行状況を Worker より受け付けて SSISDB カタログ(後述) に格納する役割などを担っています。

Scale Out Worker

ジョブを Master より pull で取得・実行し、実行状況を Master にレポートする役割を担っています。

SSISDB カタログ

どの Worker が Master の管理下にあるのかや、Worker から上がってきたジョブの実行状況といった情報を Master 経由で格納するためのデータベースです。

なお、Master, Worker はそれぞれを認証するために SSL 証明書を使用しますので、Worker をホストしているマシンの SSL 証明書を Master をホストしているマシンに、Master をホストしているマシンの SSL 証明書を Worker をホストしているマシンにインポートする必要があります。

マニュアル ”Integration Services (SSIS) Scale Out” をご参照の上、Master, Worker をインストールし SSL 証明書を Master、および Worker をホストしているマシンにインポートすると、Worker は自身の “WokerAgentId” を Master に通知します。正常に通知された場合には SSISDB の [catalog].[worker_agents]で確認することができます。

image

ただ、この状態ではまだ Master は 各マシンを Worker の一員とはみなしません。この状態では、IsEnabled 列は 0 になっています。

以下を実行して Scale Out の Worker として有効化する必要があります。

 EXEC [catalog].[enable_worker_agent] '<WorkerAgentId>'GO

すると、IsEnabled列の値が 0 –> 1 と変わります。これにより各 Worker は Master の管理下に置かれることになります。

image

 

ここで SSIS のパッケージを二つ登録し、スケールアウト実行してみます。

1. 実行するパッケージを選択。今回は登録した二つ。

image

2. 実行するマシンを選択。Worker をホストしているどのマシンで動いてもよいということであれば ”Allow any machine execute the selected packages” のチェックボックスをオン。

image

3. キューに登録された後、各ジョブがどのマシンで実行されるかが決定されます。

image

4.  各ジョブの詳細も確認できます。

image

 

[Appendix]

SSISDB のインスタンスですが、デフォルトのインスタンス名 “MYSQLSERVER” であればセットアップ後、特別な作業は必要ありませんが、名前付きインスタンスの場合には Master の設定を変更する必要があります。

具体的には “<driver>:\Program Files\Microsoft SQL Server\140\DTS\Binn\MasterSettings.config” の “InstanceName” を変更します。なお、ここは設定名の通り、”host1\instanceA” といったサーバー名ではなく、あくまでもインスタンス名を指定してください。また、設定変更を反映させるために Master サービスを再起動する必要もあります。

 

以上、今回は SQL Server 2017 の SSIS 新機能である Scale Out についてご紹介しました。 CTP 2.0 時点 (2017/5/18) の情報ですので、正式リリース時点では変更されている点もあるかもしれませんが、ご興味持っていただけたなら幸いです。