SE の雑記

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

Azure Stack に SQL Server on Linux の可用性グループを組み込めるかを実験してみる

leave a comment

Azure Stack の SQL Hosting Service に Windows の SQL Server の AlwaysOn 可用性グループを組み込む方法が分かったので、次は SQL Server on Linux の可用性グループが組み込めるかを実験してみました。

検証のため STONITH は無効にしてしまっているのですが、この状態では SQL Server on Linux の可用性グループを組み込むことはできました。
(azure_arm が Azure Stack で動作するかは要検証ですね)

私は検証で Ubuntu を使用しているのですが、apt でインストールされる、pacemaker / corosync に含まれているリソースエージェントだけで実現することもできなくはないですが、Azure LB 向けのリソースエージェント (RA) が GitHub のリポジトリ には含まれていますので、それを組み込んだ方がよいかと思います。
SoL の可用性グループに参加する各ノードで次のコマンドを実行すれば RA が組み込めるかと。

OCFDIR=/usr/lib/ocf/resource.d/azure-lb
mkdir $OCFDIR
curl https://raw.githubusercontent.com/ClusterLabs/resource-agents/a77aec06be2a7d1b94ca2d9128ef780aa902b427/heartbeat/azure-lb > $OCFDIR/lb
chmod 755 $OCFDIR/lb
pcs resource providers
pcs resource agents ocf:azure-lb
pcs resource describe ocf:azure-lb:lb

 
これで、Azure LB のプローブポートをリスニングすることができる RA を使用することができるようになります。

pcs resource create azure-lb ocf:azure-lb:lb nc=/bin/nc port=59999
sudo pcs constraint colocation add  azure-lb ag_cluster-master INFINITY with-rsc-role=Master

 
で、可用性グループのリソースが動いているノードでプローブポートがりスイングされる状態にすることができます。
ここまで出来れば、あとは Windows 版の AG を組み込んだ方法と同じです。
Azure LB の DNS 名でリスナーを作成しておけば、組み込むことができます。
Windows 版の AG の場合、プローブポートが IP アドレスリソースに設定されるため、リスナーの VIP をクラスターのリソースとして組み込む必要があるのですが、SoL の場合、プローブポートを独立したリソースとして作成することができますので、リスナーの VIP を Pacemaker のリソースとして登録しなくても LB 経由で接続ができたりします。

(読み取りのスケールアウトができるかまでは確認できていませんが)
SQL Server として、リスナー自体は作成しておく必要があります。
image
Pacemaker 側については、次のようなリソースの登録状況 (AG とプローブポートのみリソースが存在) で、Azure LB を経由して透過的にプライマリに接続ができたります。
image
Azure Stack の Azure LB からのリダイレクトが、プローブポートをホストしているサーバーへのリダイレクトというシンプルな動作だからですかね。
SQL Hosting Service に AlwaysOn 可用性グループのサーバーを追加する場合、次のようなクエリが実行されます。

USE [master];
REVOKE VIEW ANY DATABASE FROM PUBLIC;
SELECT [Version] = SERVERPROPERTY('productversion'),[Edition] = SERVERPROPERTY('edition')
SELECT [TotalPhysicalMemory] = CAST([total_physical_memory_kb] / 1024 AS INT) , [AvailablePhysicalMemory] = CAST([available_page_file_kb] / 1024 AS INT)  FROM [master].[sys].[dm_os_sys_memory]
USE [master];
SELECT seeding_mode FROM sys.availability_replicas
SELECT [listener_id] FROM [master].[sys].[availability_group_listeners] WHERE [dns_name] = @serverName

 
リスナーの名称が、SQL Hosting Service を追加する際に指定した、FQDN のホスト名かどうかのチェックを実行しているようですので、SQL Server の情報としては、リスナーは必須となります。
現状、SoL の場合、SQL IaaS Extension が使用できないため、メンテナンス用のタスクの組み込みを構築側で実施する必要があるのですが、Azure Stack に SoL の可用性グループを組み込むことはできるのかもしれないですね。

Share

Written by Masayuki.Ozawa

7月 10th, 2018 at 10:30 pm

Posted in Azure Stack

Tagged with

Leave a Reply