SQLサーバのトランザクション レプリケーションを設定する方法について


説明

この記事では、CD環境向けのSQLサーバのトランザクション レプリケーションを利用する際の設定、利点、既知の問題、制限および考えられるリスクについて説明します。

トランザクション レプリケーションを選択する主なシナリオは、リモートのパブリッシュ ターゲットを持つ分散型のSitecoreの環境を実行するときです。

このような高レイテンシー環境では、標準のパブリッシュ方法を使用すると、パブリッシュが遅くなる恐れがあります。トランザクション レプリケーションは、複数のSitecoreのインスタンスの間でコンテンツの変更を転送する際のパフォーマンスを著しく向上させる可能性があります。

重要:トランザクション レプリケーションを使用する前に、本記事の制限およびリスクの節を慎重に評価してください。

本記事で記述されているソリューションのアーキテクチャ図は、以下の通りです。

replication scheme

利点

制限およびリスク

既知の問題

問題にタイムリーに対応したり、問題の発生を阻止したりするには、トランザクション レプリケーションを設定する際に、次の問題が発生する可能性があることを把握する必要があります:

  1. サーバ構成オプション「max text repl size」(65536バイト)のデフォルト値は、十分ではありません。解決策として、これを「無制限」に設定することを検討してください。詳細情報については、この記事を参照してください:max text repl size サーバー構成オプションの構成 - SQL Server | Microsoft Docs

  2. 配布エージェントを実行する際、「配布エージェントが一時ファイルの作成に失敗しました」エラーが発生する恐れがあります。この問題を回避するには、SQL Server エージェントを実行するアカウントに必要な権限を付与してください。

  3. Subsrciberが読み取り専用として扱われていない場合、パブリッシャーとサブスクライバー間のデータ不整合に関連するレプリケーションのエラーが発生する恐れがあります。
    エラーの例:「the row does not exist on subscriber (この行はサブスクライバーには存在しません)」。
    このような状況では、レプリケーションが停止し、コンテンツの変更がサブスクライバーに配信されない恐れがあります。

    従って、SitecoreはSubscriberのウェブ データベースに読み取り専用アクセス権を持つSQLログインを使用することを強く推奨します。この構成の下では、Sitecoreユーザー、ジョブまたはAPIにより、CDサーバから何らかの書き込み操作が実施された際、Sitecoreのログ ファイルにエラー メッセージのみが表示されるようになります。一方、その操作は実施されず、トランザクション レプリケーションは通常通り動作し続けます。

    ログ ファイルでのエラー数を削減するには、Sitecoreのクリーンアップ エージェント、およびサブスクライバーのウェブ データベースに書き込む可能性があるカスタム エージェントを無効にすることを推奨します。書き込み操作は、パブリッシャー側で実行する必要があります。変更は、トランザクション レプリケーションでサブスクライバーに自動的に配信されます。

  4. Sitecoreは最後に処理されたイベント スタンプ値をある間隔(デフォルトでは10秒)でPropertiesテーブルに書き込みます。スタンプ値をデータベースに保存しないようにするために、「EventQueue.PersistStampInterval」設定値を非常に大きい値に変更することを推奨します。そうしないと、ログ ファイルに大量のエラーが継続的に出力される恐れがあります。

    <setting name="EventQueue.PersistStampInterval" value="999:00:00" />

    この構成では、関連の値がインメモリ キャッシュに保持されるため、Sitecoreはこの構成で継続して正常に動作します。

    また、Sitecoreには起動時に再生されるリモート イベントの最大期間を制御するための特定の設定があります。この値はSitecoreの初期化の時間よりも大きな値にしてカバーすることを検討してください。

    <setting name="EventQueue.PersistStampMaxAge" value="00:10:00" />

構成

「SQL Server 構成マネージャー」を使用して、「SQL Server」と「SQL Server Agent」を自動的に開始できるよう、それらのサービスの「開始モード」が「自動」になっていることと、それらのログオン アカウントに必要な権限が付与されていることを確認します。

初期テストおよび構成については、QA環境で実施することを推奨します。以下の各構成手順では、「構成手順を含むスクリプト ファイルを作成する」オプションにチェックを記入することができます。データベース名などの軽微な変更で、これらのスクリプトを使用してT-SQLクエリを実行することで、本番環境でのレプリケーションを設定することができます。

分散の構成

MS SQL Server Management Studioのオブジェクト エクスプローラーで「レプリケーション」ノードを右クリックし、ディストリビューションの構成をクリックします。

ウィザードの手順および指示に従って、ディストリビューション サーバ、スナップショット フォルダ、ディストリビューション データベース、データベース ファイルおよびデータベースのログ ファイルの格納場所、許可されたパブリッシャーの設定を実施します。

選択した内容を確認し、完了をクリックすると、構成がエラーなく実行されるはずです。

パブリケーションの構成

主キーのないすべてのテーブルに主キーを作成するよう、PublisherデータベースでReplColumnsAndKeys.sqlスクリプトの実行を検討します。これは、主キーがトランザクション レプリケーションに必要であるためです。

「/Replication/Local Publications」ノードに右クリックし、「新しいパブリケーション」を選択します。

ウィザードの手順および指示に従って、パブリケーション データベースおよびパブリケーションの種類(トランザクション レプリケーション)を構成します。

アーティクルとしてパブリッシュするすべてのテーブルおよびビューを選択し、以下のアーティクルのプロパティを適用します:

ウィザードの手順および指示に従って、スナップショット エージェント スケジュール、セキュリティ設定およびパブリケーション名を設定します。

選択した内容を選択し、完了をクリックします。構成は、エラーなしで実行されるはずです。新しいパブリケーションは「/Replication/Local Publications」ノード配下に表示されます。

サブスクリプションの構成

新しく作成されたパブリケーションを右クリックし、「新しいサブスクリプション」を選択し、サブスクリプションの構成を実施します。

ウィザードの手順および指示に従って、サブスクリプションの構成を実施します:

選択した内容を確認し、完了をクリックします。構成はエラーなしで実行されるはずです。新しいサブスクリプションは新しく作成されたパブリケーション配下に表示されます。

直ちに初期化する場合、ディストリビューション スキーマはスキーマの変更を適用し、データを一括でサブスクライバーにコピーします。これ以上、パブリッシャーでの変更がサブスクライバーに反映されるようになります。

備考

スナップショット エージェントの状態、ログ リーダー エージェントまたはレプリケーション モニターを表示するには、目的のパブリケーションを右クリックし、適切なコンテキスト メニュー オプションを選択します。

サブスクリプションの履歴、プロパティおよび状態を表示するには、ログ リーダー エージェントのジョブのプロパティまたはディストリビューション エージェントのプロファイルを設定し、レプリケーション モニターで目的のサブスクリプションをダブル クリックします。

レプリケーションに関するジョブおよびエラー ログについては、適切なSQL Server Agent JobsおよびError Logsノード配下で見つけることができます。

レプリケーション エージェントのシャットダウン、エラー、検証などの通知が送信されるよう、SQL Serverのアラートを設定することができます。

レプリケーション機能の詳細については、Microsoft公式のドキュメントを参照してください。