SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server on Linux の可用性グループのリスナーの作成方法

leave a comment

Linux 上の SQL Server の Always On 可用性グループを構成します。 に基本的な作業は記載されていますが、一度まとめておきたいと思います。

SQL Server on Linux では、可用性グループの各種機能がサポートされており、「可用性グループのリスナーを経由した透過的な接続」についても使用することが可能となっています。

可用性グループの設定は通常、次の 2 種類の情報によって管理が行われています。

  • SQL Server での可用性グループの設定
  • クラスターマネージャー (WSFC / Pacemaker) での可用性グループの設定

クラスタータイプが「WSFC」の場合は、SQL Server とクラスターマネージャーの設定は同時に行われますが、「EXTERNAL」に設定した場合には、SQL Server とクラスターマネージャーの設定が独立して動作することになるため、個々に設定を行う必要があります。

SQL Server on Linux で構築する場合、クラスターマネージャー側の設定については、Linux 上の SQL Server の Always On 可用性グループを構成します。 の各ディストリビューション毎の手順に記載されています。

Pacemaker を使用した場合、次のような仮想 IP のリソースがクラスターマネージャー側の設定となります。

image

この状態であれば、プライマリに仮想 IP が割り当てられている状態になりますので、透過的にプライマリに接続することはできているのですが、可用性グループのリスナーとして、期待している動作は行われていない状態となります。

次のようなクエリで、可用性グループに対して、読み取り専用ルーティングの設定を行ってみます。

ALTER AVAILABILITY GROUP [ag1]
MODIFY REPLICA ON N'SoL01' 
WITH ( 
SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N'TCP://SoL01.domain.local:1433') 
)
GO

ALTER AVAILABILITY GROUP [ag1]
MODIFY REPLICA ON N'SoL02' 
WITH ( 
SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N'TCP://SoL02.domain.local:1433') 
)
GO

ALTER AVAILABILITY GROUP [ag1] 
MODIFY REPLICA ON N'SoL01'
WITH ( 
PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=(N'SoL02', N'SoL01') 
))
GO
  
ALTER AVAILABILITY GROUP [ag1] 
MODIFY REPLICA ON N'SoL02'
WITH ( 
PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=(N'SoL01', N'SoL02') 
))
GO

 

このクエリで、SoL01 がプライマリの場合、SoL02 が読み取りセカンダリとして認識された状態となりますので、「ApplicationIntent=ReadOnly」の設定を行った場合には、SoL02 に接続されるのが、期待する動作になるかと思います。

sqlcmd -S 192.168.0.10 -U sa -d db1 -K ReadOnly -Q "SELECT @@SERVERNAME"

しかし、上記のコマンドを実行しても、SoL01 (プライマリ) に接続が行われる動作となります。

image

これは、クラスターマネージャーに仮想 IP は設定されていますが、その設定については、SQL Server とは連携が行われていないため、SQL Server としてはリスナー経由でのアクセスと認識されていないためです。

それでは、SQL Server にリスナーを作成して、再度試してみます。

image

SQL Server にリスナーが存在していれば、期待していた動作 (リスナーを介した透過的なプライマリへの接続) となっていることが確認できますね。

image

SQL Server on Linux でもこのように、リスナーを介した透過的なプライマリ / セカンダリへの接続が可能となっています。

現時点では、Windows 版については、EXTERNAL タイプのクラスターマネージャーは存在していませんが、今後 3rd パーティー製品が出てくる可能性もありますので、その時は、Windows でも同様の設定をすることになるのでしょうね。

Written by masayuki.ozawa

8月 26th, 2017 at 6:25 pm

Leave a Reply

*