SharePoint 2013 形式ワークフローの障害復旧について

こんにちは SharePoint サポートの森 健吾 (kenmori) です。今回の投稿では、オンプレミス版の SharePoint Server 2013  以降における SharePoint 2013 形式ワークフローの障害復旧手順を記載します。

本投稿の内容は SharePoint 2010 形式ワークフローでは考慮の必要はありません。
SharePoint 2010 形式ワークフローは、SharePoint 内にワークフローのランタイムが組み込まれています。そのため、コンテンツ データベース内にワークフローのインスタンスなども存在し、コンテンツ データベース単位のバックアップ・復元だけで障害復旧できるため、運用時の負担が少ないというメリットがあります。

これに対し、SharePoint 2013 形式では、SharePoint 外部に .NET Framework 4.x における Windows Workflow Foundation のフレームワークとなる製品である Workflow Manager がランタイムを担っています。そのため、バックアップ・復元作業は SharePoint だけの作業にとどまりません。
運用環境に SharePoint 2013 形式ワークフローを展開する場合には、障害復旧についても想定しておく必要があります。

タイトル : Workflow Manager 1.0 での障害復旧とスコープ復元
アドレス : https://msdn.microsoft.com/ja-jp/library/jj730570(v=azure.10).aspx

 

SharePoint Server 2013 と Workflow Manager が障害復旧を想定しているシナリオ

今回の投稿で、想定しているのは、下図緑色でマークした Workflow Manager の復旧手順と、SharePoint Server への再接続までとなります。

Workflow Managerは 1 台か、3 台構成にすることができます。もちろん、サーバー台数を増やせない方は、SharePoint Server と同居させることもできます。セオリー通りに分散して構築すれば、以下のような構成になります。

wfm1

 

なお、逆に SharePoint Server が欠損した場合、ファームを再構成して、既存データを接続する形で復旧した場合、ファーム ID やアプリ IDなどが変わってしまい、Workflow Manager への再接続が難しい状況になることも報告されております。

 

補足 : 障害復旧できない場合の影響

万が一、障害復旧を実施できなかった、あるいは実施しなかった場合、新規ファームを構築して SharePoint Server に再登録する操作となります。この場合、これまで動いていたワークフローのインスタンス情報はすべて失われます。

ただし、これまで作成したワークフロー定義 (XAML) については SharePoint のワークフロー ライブラリに保存されていますので再作成する必要はありません。SharePoint Designer で各ワークフロー テンプレートを開いて再発行することで、これまで通りワークフローを起動できるようになります。

障害復旧には迅速性が求められますため、これまでのワークフロー インスタンスを破棄するという方針も 1 つと考えます。

 

目次

1. バックアップの採取

1-1. 証明書のバックアップ
1-2. データベースのバックアップ
1-3. データベース バックアップの日時を控えます。

2. リストア作業

2-1. 事前準備
2-2. アプリケーションの再インストール
2-3. 復旧コマンドの実行 (1 台目)
2-4. 復旧コマンドの実行 (2 台目以降)
2-5. 疎通確認

3. SharePoint Server からの再接続

 

 

1. バックアップの採取

復旧作業にはミス オペレーションなどが発生されることも想定されるべきです。万が一問題が生じた際に切り戻しできるよう、以下のバックアップは事前に採取し別の場所に退避しておきましょう。

1-1. 証明書のバックアップ

ディスク障害など、障害はいつどのような形で降りかかってくるかわかりません。手順 1-1. は構築直後でも採取できるので、正常稼働している間に必ず採取してください。

1-1-1. ワークフロー マネージャーの 1 台目のサーバーにログオンします。
1-1-2. 以下のレジストリ値を控えておきます。この値は復旧作業時に必要となります。

キー : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Service Bus
名前 : ServerMgmtDBEncryptionCert

 

1-1-3. mmc を起動します。
1-1-4. [ファイル] – [スナップ インの追加と削除] をクリックします。
1-1-5. [証明書] を選択して [追加] をクリックします。
1-1-6. "コンピューター アカウント" を選択し、[次へ] をクリックします。
1-1-7. "ローカル コンピューター" が選択されていることを確認し [完了] をクリックします。
1-1-8. 以下の証明書を探します。

発行先 : (該当サーバー)
発行者 : AppServerGeneratedSBCA
目的 : サーバー認証

(注意) 証明書をダブルクリックで開き [詳細] タブにて "拇印" の値が、スペースで区切られた部分を除き、手順 1-1-2 で採取した値と同じであることを確認ください。

 

1-1-9. 上記証明書を右クリック – [すべてのタスク] - [エクスポート] をクリックします。
1-1-10. [次へ] をクリックします。
1-1-11. "はい、秘密キーをエクスポートします" を選択し、[次へ] をクリックします。
1-1-12. 以下の値が選択されていることを確認し、[次へ] をクリックします。

Personal Information Exchange – PKCS #12 (.PFX)

証明書のパスにある証明書を可能であればすべて含む

1-1-13. パスワードにチェックを入れ、任意のパスワードを指定します。
1-1-14. 出力先のパスを指定して、[次へ] をクリックします。
1-1-15. [完了] をクリックします。
1-1-16. mmc から上記証明書を再度ダブルクリックし、[証明のパス] を選択し、ツリーの親 (発行元証明書) を選択し、[証明書の表示] - [詳細] – [ファイルにコピー] をクリックして、念のため同様にバックアップしておきます。

 

1-2. データベースのバックアップ

SQL Server にて、以下のデータベースのバックアップを採取します。

・SbGatewayDatabase
・SBMessageContainer01 - n
・WFResourceManagementDB
・WFInstanceManagementDB
1-3. データベース バックアップの日時を控えます。

PowerShell を起動し、以下のコマンドを実行してバックアップの完了日時を控えます。

 Get-Date

 

2. リストア作業

2-1. 事前準備

2-1-1. 以下のデータベースをバックアップからリストアします。

・SbGatewayDatabase
・SBMessageContainer01 - n
・WFResourceManagementDB
・WFInstanceManagementDB

 

注意

SbManagementDB および WFManagementDB は復旧コマンドで再作成されますのでリストアは不要です。

もし、これらの DB が存在している場合は復旧コマンドが失敗しますので、事前に削除してください。

 

2-2. アプリケーションの再インストール

以下の手順にてそれぞれのアプリケーションを再インストールします。

 

2-2-1. 各アプリケーションのホストをファームから切り離します。

2-2-1-1. Workflow Manager PowerShell を起動して、以下のコマンドを実行します。

 Stop-WFHost
 Remove-WFHost

 

2-2-1-2. Service Bus PowerShell を起動して、以下のコマンドを実行します。

 Stop-SBHost
 Remove-SBHost

 

2-2-2. コントロール パネルから [プログラムのアンインストールまたは変更] を起動します。
2-2-3. 以下のアプリケーションをアンインストールします。

 

・Service Bus 1.0
・Windows Fabric
・Workflow Manager 1.0

 

万が一、アンインストールが失敗する場合は以下のレジストリをエクスポートしたうえ削除し、もう一度アンインストールをお試しください。

 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Service Bus

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Workflow Manager

 

2-2-4. マシンを再起動します。
2-2-5. 再起動後に、以下のフォルダが残っている場合は削除します。

 

C:\Program Files\Workflow Manager\1.0

C:\Program Files\Service Bus\1.0

 

2-2-6. Workflow Manager 1.0 を再インストールします。

Service Bus / Windows Fabric がアンインストール済みであれば、これらのアプリケーションも再インストールされます。

インストール完了後に構成ウィザードが起動しますが、構成せずすぐに閉じてください。

2-2-7. コントロール パネルから [プログラムのアンインストールまたは変更] を起動します。
2-2-8. 以下のアプリケーションがインストール済みであることを確認します。

 

・Service Bus 1.0
・Windows Fabric
・Workflow Manager 1.0

 

 

2-3. 復旧コマンドの実行 (1 台目)

ユーザー名、パスワード、データベース サーバー名などは環境に応じて変更してください。

2-3-1. Service Bus PowerShell を起動します。
2-3-2. Restore-SBFarm コマンドを実行します。

実行例)

 Restore-SBFarm -RunAsAccount 'contoso\administrator' -FarmCertificateThumbprint 649248e8acb9cda9a1f1a277f3f9a947c182a834 -GatewayDBConnectionString 'Data Source=DBServer;Initial Catalog=SbGatewayDatabase;Integrated Security=True;Encrypt=False' -SBFarmDBConnectionString 'Data Source=DBServer;Initial Catalog=SbManagementDB;Integrated Security=True;Encrypt=False' -AdminGroup 'BUILTIN\Administrators' -EncryptionCertificateThumbprint 649248e8acb9cda9a1f1a277f3f9a947c182a834

RunAsAccount              : ファーム アカウント
FarmCertificateThumbprint : 証明書の拇印
EncryptionCertificateThumbprint : 証明書の拇印

タイトル : Restore-SBFarm
アドレス : https://msdn.microsoft.com/ja-jp/library/azure/jj248747(v=azure.10).aspx

2-3-3. Restore-SBGateway コマンドを実行します。

実行例)

 Restore-SBGateway -GatewayDBConnectionString 'Data Source=DBServer;Initial Catalog=SbGatewayDatabase;Integrated Security=True;Encrypt=False' -SBFarmDBConnectionString 'Data Source=DBServer;Initial Catalog=SbManagementDB;Integrated Security=True;Encrypt=False'

タイトル : Restore-SBGateway
アドレス : https://msdn.microsoft.com/ja-jp/library/azure/jj248770(v=azure.10).aspx

2-3-4. Restore-SBMessageContainer コマンドを実行します。

実行例)

 Restore-SBMessageContainer -ContainerDBConnectionString "Data Source=DBServer;Initial Catalog=SBMessageContainer01;Integrated Security=SSPI;Asynchronous Processing=True" -SBFarmDBConnectionString "Data Source=DBServer;Initial Catalog=SBManagementDB;Integrated Security=SSPI;Asynchronous Processing=True" -id 1

タイトル : Restore-SBMessageContainer
ドレス : https://msdn.microsoft.com/en-us/library/jj248767(v=azure.10).aspx

2-3-5. Add-SBHost コマンドを実行します。

実行例)

 $myPassword=convertto-securestring 'password' -asplaintext –force
 Add-SBHost -EnableFirewallRules $TRUE -RunAsPassword $myPassword -SBFarmDBConnectionString 'Data Source=DBServer;Initial Catalog=SbManagementDB;Integrated Security=True;Encrypt=False'

タイトル : Add-SBHost
アドレス : https://msdn.microsoft.com/en-us/library/jj248751(v=azure.10).aspx

2-3-6. Workflow Manager PowerShell を起動します。
2-3-7. Restore-WFFarm コマンドを実行します。

実行例)

 $mykey=convertto-securestring 'passw0rd' -asplaintext –force
 Restore-WFFarm -RunAsAccount 'contoso\administrator' -InstanceDBConnectionString 'Data Source=DBServer;Initial Catalog=WFInstanceManagementDB;Integrated Security=True;Asynchronous Processing=True;Encrypt=False' -ResourceDBConnectionString 'Data Source=DBServer;Initial Catalog=WFResourceManagementDB;Integrated Security=True;Asynchronous Processing=True;Encrypt=False' -WFFarmDBConnectionString 'Data Source=DBServer;Initial Catalog=WFManagementDB;Integrated Security=True;Encrypt=False' -InstanceStateSyncTime 'Wednesday, Apr 6, 2016 10:30:00 AM' -ConsistencyVerifierLogPath 'c:\Temp\log.txt' -CertificateAutoGenerationKey $myKey

 

InstanceStateSyncTime にはデータベースが最後にバックアップされた日時 (手順 1-3) をご指定ください。
指定された時間以降のデータを削除し、バックアップ時のデータを保つよう動作しますので、過去の日付を指定しないようお願いいたします。
特に控えてなかった場合や、あまり厳密な時間を気にしない場合はInstanceStateSyncTime に (Get-Date) を指定すれば、現在のデータベースのまま復旧が進みます。

また、事前にログ ファイルを出力するフォルダ (下記の例では C:\Temp フォルダ) が作成されている必要があります。

タイトル : Restore-WFFarm
アドレス : https://msdn.microsoft.com/ja-jp/library/jj193272(v=azure.10).aspx

2-3-8. Add-WFHost コマンドを実行します。

$mykey は手順 2-3-7. で設定したものです。

 実行例)
$myPassword=convertto-securestring 'passw0rd' -asplaintext –force  
 Add-WFHost -WFFarmDBConnectionString 'Data Source=DBServer;Initial Catalog=WFManagementDB;Integrated Security=True;Asynchronous Processing=True;Encrypt=False' -RunAsPassword $myPassword -EnableFirewallRules $TRUE -CertificateAutoGenerationKey $myKey -EnableHttpPort

タイトル : Add-WFHost
アドレス : https://msdn.microsoft.com/ja-jp/library/jj193261(v=azure.10).aspx

 

2-4. 復旧コマンドの実行 (2 台目以降)

2-4-1. 手順 2-2. を参考にアプリケーションを再インストールします。
2-4-2. 手順 2-3. のコマンドのうち、Add-SBHost および Add-WFHost コマンドのみ実行します。

 

2-5. 疎通確認

2-5-1. SharePoint サーバーにファーム アカウントでログインします。
2-5-2. IE を起動し、Workflow Manager サーバーのエンドポイントへアクセスします。

エンド ポイントの URL (例) :

https://wfm.contoso.com:12291
https://wfmnlb.contoso.com:12291 など

2-5-3. 正しくアクセスできることを確認します。(正しくアクセスできた場合は XML 形式のデータが返ります。)

 

3. SharePoint Server からの再接続

復旧したワークフロー マネージャー ファームに対して、SharePoint Server から再接続します。

3-1. Workflow Managerがインストールされている SharePoint Server 2013 ファーム内のコンピューターにログオンします。

3-2. SharePoint 管理シェルを管理者として開きます。このためには、[SharePoint 2013 管理シェル] を右クリックし、[管理者として実行] を選択します。

3-3. Register-SPWorkflowService コマンドレットを実行します。

 Register-SPWorkflowService -SPSite "https://myserver/mysitecollection" -WorkflowHostUri "https://wfm.contoso.com:12291" -AllowOAuthHttp -Force

もし、HTTP を使用する場合は -AllowOAuthHttp を指定します。

 

3-4. SharePoint 内にストアされた WorkflowOutbound 証明書を更新するため、"Trusted Security Token Services メタデータ フィードを更新します。" という名前のジョブを実行します。

PowerShell で実行する場合は、以下のコマンドを実行します。

 (Get-SPTimerJob RefreshMetadataFeed).RunNow()

 

上記コマンドを実行しなくとも復旧プロセスは問題ありませんが、直後にワークフローを起動した際に Invalid JWT Token. The token is expired. などといったエラーが発生し、テスト作業に影響してしまうので、ここで対処しておきましょう。

 

上記手順を実施後、ワークフローの状態ページへの遷移や、新規ワークフローの開始などが正常に動作することを確認ください。