次の方法で共有


Always On 可用性グループでレプリケーションを構成する

適用対象:SQL Server - Windows のみ

SQL Server でのレプリケーションおよび AlwaysOn 可用性グループの構成には、7 つのステップが必要です。 各ステップの詳細については、以下のセクションで説明します。

1. データベース パブリケーションとサブスクリプションを構成する

ディストリビューターを構成する

ディストリビューション データベースは、SQL Server 2012 および SQL Server 2014 の可用性グループに配置できません。 ディストリビューション データベースを可用性グループに配置することは、SQL 2016 以降でサポートされています。ただし、マージ、双方向、またはピア ツー ピアのレプリケーション トポロジで使用されるディストリビューション データベースは除きます。 詳細については、「Always On 可用性グループでレプリケーションディストリビューションデータベースを設定する を参照してください。

  1. ディストリビューター側のディストリビューションを構成します。 ストアド プロシージャが構成に使用されている場合は、sp_adddistributor@password パラメーターを使用して、リモート パブリッシャーがディストリビューターに接続するときに使用されるパスワードを識別します。 このパスワードは、各リモート パブリッシャーでリモート ディストリビューターを設定するときにも必要になります。

    USE master;
    GO
    
    EXECUTE sys.sp_adddistributor
        @distributor = 'MyDistributor',
        @password = '**Strong password for distributor**';
    
  2. ディストリビューター側のディストリビューション データベースを作成します。 ストアド プロシージャが構成に使用されている場合は、sp_adddistributiondbを実行してください。

    USE master;
    GO
    
    EXECUTE sys.sp_adddistributiondb
        @database = 'distribution',
        @security_mode = 1;
    
  3. リモート パブリッシャーを構成します。 ストアド プロシージャを使用してディストリビューターを構成する場合は、sp_adddistpublisher@security_mode パラメーターを使用して、レプリケーション エージェントから実行されるパブリッシャー検証ストアド プロシージャが現在のプライマリに接続する方法を決定します。 1 に設定すると、現在のプライマリへの接続に Windows 認証が使用されます。 0 に設定すると、指定した @login@password の値を使用して SQL Server 認証が使用されます。 検証ストアド プロシージャをセカンダリ レプリカに正常に接続するには、各レプリカで有効なログインとパスワードを指定する必要があります。

    注意

    変更されたレプリケーション エージェントをディストリビューター以外のコンピューターで実行する場合、プライマリへの接続に Windows 認証を使用するには、レプリカのホスト コンピューター間の通信に使用する Kerberos 認証を構成する必要があります。 現在のプライマリへの接続に SQL Server ログインを使用する場合は、Kerberos 認証は必要ありません。

    USE master;
    GO
    
    EXECUTE sys.sp_adddistpublisher
        @publisher = 'AGPrimaryReplicaHost',
        @distribution_db = 'distribution',
        @working_directory = '\\MyReplShare\WorkingDir',
        @login = 'MyPubLogin',
        @password = '**Strong password for publisher**';
    

詳細については、sp_adddistpublisherを参照してください。

元の発行元でパブリッシャーを構成する

  1. リモート ディストリビューションを構成します。 ストアド プロシージャを使用してパブリッシャーを構成する場合は、ディストリビューターでディストリビューションを設定するために sp_adddistrbutor を実行したときに使用したものと同じ値を、sp_adddistributor 実行時に @password に指定します。

    EXECUTE sys.sp_adddistributor
        @distributor = 'MyDistributor',
        @password = 'MyDistPass';
    
  2. データベースでレプリケーションを有効にします。 ストアド プロシージャを使用してパブリッシャーを構成する場合は、sp_replicationdboption トランザクション レプリケーションとマージ レプリケーションの両方をデータベースに対して構成する場合は、それぞれを有効にする必要があります。

    USE master;
    GO
    
    EXECUTE sys.sp_replicationdboption
        @dbname = 'MyDBName',
        @optname = 'publish',
        @value = 'true';
    
    EXECUTE sys.sp_replicationdboption
        @dbname = 'MyDBName',
        @optname = 'merge publish',
        @value = 'true';
    
  3. レプリケーションのパブリケーション、アーティクル、およびサブスクリプションを作成します。 レプリケーションを構成する方法の詳細については、「データとデータベース オブジェクトのパブリッシュ」を参照してください。

2.可用性グループを構成する

目的のプライマリで、メンバー データベースとしてパブリッシュされている (またはパブリッシュする) データベースを含む可用性グループを作成します。 可用性グループ ウィザードを使用する場合は、ウィザードで最初にセカンダリ レプリカ データベースを同期するか、バックアップと復元を使用して手動で初期化を実行するかを選択することができます。

現在のプライマリへの接続にレプリケーション エージェントで使用される可用性グループの DNS リスナーを作成します。 指定したリスナー名は、元のパブリッシャーとパブリッシュされたデータベースのペアに対してリダイレクトの対象として使用されます。 たとえば、DDL を使用して可用性グループを構成する場合、次のコード例を使用して、MyAGという名前の既存の可用性グループの可用性グループ リスナーを指定できます。

ALTER AVAILABILITY GROUP 'MyAG'
    ADD LISTENER 'MyAGListenerName' (WITH IP (('10.120.19.155', '255.255.254.0')));

詳細については、「可用性グループの作成と構成 (SQL Server)」を参照してください。

3. すべてのセカンダリ レプリカ ホストがレプリケーション用に構成されていることを確認する

セカンダリ レプリカの各ホストで、レプリケーションをサポートするように SQL Server が構成されていることを確認します。 レプリケーションがインストールされているかどうかを確認するには、セカンダリ レプリカの各ホストで次のクエリを実行します。

USE master;
GO

DECLARE @installed AS INT;

EXECUTE @installed = sys.sp_MS_replication_installed;

SELECT @installed;

@installed が 0 の場合、SQL Server インストールにレプリケーションを追加する必要があります。

4. セカンダリ レプリカ ホストをレプリケーション パブリッシャーとして構成する

セカンダリ レプリカはレプリケーション パブリッシャーまたはリパブリッシャーとして機能することはできませんが、フェールオーバー後にセカンダリが引き継ぐようにレプリケーションを構成する必要があります。 ディストリビューターで、セカンダリ レプリカの各ホストのディストリビューションを構成します。 ディストリビューション データベースと作業ディレクトリは、元のパブリッシャーをディストリビューターに追加したときと同じものを指定します。 ストアド プロシージャを使用してディストリビューションを構成する場合は、sp_adddistpublisher を使用してリモート パブリッシャーをディストリビューターに関連付けます。 元のパブリッシャーに @login@password を使用した場合は、セカンダリ レプリカのホストをパブリッシャーとして追加する際に同じ値をそれぞれ指定します。

EXECUTE sys.sp_adddistpublisher
    @publisher = 'AGSecondaryReplicaHost',
    @distribution_db = 'distribution',
    @working_directory = '\\MyReplShare\WorkingDir',
    @login = 'MyPubLogin',
    @password = '**Strong password for publisher**';

セカンダリ レプリカの各ホストで、ディストリビューションを構成します。 リモート ディストリビューターには、元のパブリッシャーのディストリビューターを指定します。 sp_adddistributor がディストリビューターで最初に実行されたときに使用したパスワードと同じパスワードを使用します。 ストアド プロシージャを使用してディストリビューションを構成する場合は、sp_adddistributor@password パラメーターを使用してパスワードを指定します。

EXECUTE sp_adddistributor
    @distributor = 'MyDistributor',
    @password = '**Strong password for distributor**';

セカンダリ レプリカの各ホストで、データベースのパブリケーションのプッシュ サブスクライバーがリンク サーバーとして表示されることを確認します。 ストアド プロシージャを使用してリモート パブリッシャーを構成する場合は、sp_addlinkedserver を使用してサブスクライバー (存在しない場合) をリンク サーバーとしてパブリッシャーに追加します。

EXECUTE sys.sp_addlinkedserver @server = 'MySubscriber';

5. 元の発行元を AG リスナー名にリダイレクトする

ディストリビューターのディストリビューション データベースで、ストアド プロシージャ sp_redirect_publisher を実行して、元のパブリッシャーとパブリッシュされたデータベースを可用性グループの可用性グループ リスナー名に関連付けます。

USE distribution;
GO

EXECUTE sys.sp_redirect_publisher
    @original_publisher = 'MyPublisher',
    @publisher_db = 'MyPublishedDB',
    @redirected_publisher = 'MyAGListenerName';

6. レプリケーション検証ストアド プロシージャを実行して構成を確認する

ディストリビューターで、ディストリビューション データベースでストアド プロシージャ sp_validate_replica_hosts_as_publishers を実行して、すべてのレプリカ ホストがパブリッシュされたデータベースのパブリッシャーとして機能するように構成されていることを確認します。

USE distribution;
GO

DECLARE @redirected_publisher AS sysname;

EXECUTE sys.sp_validate_replica_hosts_as_publishers
    @original_publisher = 'MyPublisher',
    @publisher_db = 'MyPublishedDB',
    @redirected_publisher = @redirected_publisher OUTPUT;

ストアド プロシージャ sp_validate_replica_hosts_as_publishers は、各可用性グループ レプリカ ホストで十分な承認を得てログインから実行し、可用性グループに関する情報を照会する必要があります。 sp_validate_redirected_publisherとは異なり、呼び出し元の資格情報を使用し、msdb.dbo.MSdistpublishers に保持されているログインを使用して可用性グループのレプリカに接続することはありません。

セカンダリ レプリカ ホストの検証時にエラーが発生する

読み取りアクセスを許可しないセカンダリ レプリカ ホストを検証するとき、または読み取り意図を指定する必要がある場合、sp_validate_replica_hosts_as_publishers は次のエラーで失敗します。

メッセージ 21899、レベル 11、状態 1、プロシージャ sp_hadr_verify_subscribers_at_publisher、行 109

元のパブリッシャー 'MyOriginalPublisher' のサブスクライバーの sysserver エントリがあるかどうかを判断するために、リダイレクトされたパブリッシャー 'MyReplicaHostName' で実行したクエリが、エラー '976'、エラー メッセージ 'エラー 976、レベル 14、状態 1、メッセージ: 対象になるデータベース 'MyPublishedDB' は可用性グループに参加しているため、現在クエリでアクセスできません。 データ移動が中断されているか、可用性レプリカで読み取りアクセスが有効になっていません。 このデータベースや可用性グループの他のデータベースへの読み取り専用アクセスを許可するには、グループの 1 つ以上のセカンダリ可用性レプリカへの読み取りアクセスを有効にします。 詳細については、SQL Server オンライン ブックの ALTER AVAILABILITY GROUP ステートメントを参照してください。

レプリカ ホスト 'MyReplicaHostName' について、1 つまたは複数のパブリッシャー検証エラーが発生しました。

これは正しい動作です。 これらのセカンダリ レプリカのホストでは、sysserver エントリをホストで直接クエリして、サブスクライバー サーバーのエントリがあるかどうかを確認する必要があります。

7. レプリケーション モニターに元のパブリッシャーを追加する

それぞれの可用性グループ レプリカで、元のパブリッシャーをレプリケーション モニターに追加します。

複製

可用性グループを作成して構成する