Azure Hybrid and Multicloud Digital Event で Azure Arc Enabled SQL Managed Instance (MI) の一般提供開始 (General Availability : GA) が、 2021/7/30 と発表がありました。
Arc に関連するサービスとしては、
- Azure Arc Enabled Windows / Linux
- Azure Arc Enabled Kubernetes
- Azure Stack HCI
- AKS on Azure Stack HCI
が既に GA しており、今回 MI が GA となったことで、Arc 上で動作させることができる SQL Server ベースの RDBMS についても SLA がある状態で利用することができるようになりました。
AKS on Azure Stack HCI と組み合わせることで、Windows 環境をホスト OS として使用した Kubernetes を構築することもできますので、Windows ベースで MI を使用することもできます。(と言っても、Hyper-V 上のゲスト OS として Linux を動かして Kubernetes を構築していますので、実際には Linux 上で構築されているのですが)
料金についても、Azure Arc pricing はまだ更新されていないようですが、イベント内で発表がありました。
今回 GA として提供されるのは、汎用目的 (General Purpose : GP) となりますが、vCore 単位の課金となるようですね。
7 月に GA となりますが、現在、プレビューとして公開されているすべての機能が GA となるわけではないようで、いくつかの機能については、段階的に GA となるようです。
Azure Arc Enabled SQL Managed Instance では、現時点のロードマップでは、7 月に Preview / 10 月に GA となる、AlwaysOn 可用性グループで、高可用性構成をとることができるのですが、今まであまり真面目に調べていませんでしたので、今回 GA するということで、関連情報のキャッチアップを含め調べてみました。
今回発表のあった内容は Bring cloud experiences to data workloads anywhere with Azure SQL enabled by Azure Arc から確認できます。
Contained Availability Group (包含可用性グループ)
Azure Arc Enabled SQL Managed Instance をデプロイするときには、高可用性構成として、レプリカの数を指定することができ、「3 個のレプリカ」として作成した際には、AlwaysOn 可用性グループを使用した高可用性環境としてデプロイがされます。
実際の可用性グループとしては次のような環境が自動的に構成されます。(DB01~03 は私が作成した DB です)
Azure Arc Enabled SQL Managed Instance の高可用性環境で構成される AlwaysOn 可用性グループは通常の AlwaysOn 可用性グループではなく「包含可用性グループ」という構成となります。
この構成では、master / msdb も可用性グループによる保護対象となり「ログイン」「SQL Server エージェントジョブ」についても可用性グループのアーキテクチャで自動的にセカンダリに同期が行われます。
高可用性の構成については、Always On 可用性グループを使用してデプロイする で解説が行われています。
本投稿を書いている時点のドキュメントの内容が、最新のイメージで展開される構成とは一致していないようなのですが、包含可用性グループにより、master / msdb のデータベースが可用性グループの保護対象となっていることが記載されています。
包含可用性グループについては、SQL Server 2019 時点では、オンプレミスの SQL Server (Box の SQL Server) については、ビッグデータクラスター (Big Data Cluster : BDC) でのみ使用することができる可用性グループとなっており、高可用性を使用して SQL Server ビッグ データ クラスターを展開する でも解説が行われています。
このドキュメント内の次の画像が構成としてはわかりやすいかと。
BDC も Arc MI も Linux コンテナーとして実装が行われていますので、可用性グループのクラスタータイプについては EXTERNAL で実装が行われており、外部クラスターテクノロジーが Operator / Controller の Pod により実装が行われているようです。
可用性グループ内に
- master が含まれていることで、ログイン / リンクサーバー等の情報が可用性グループ内で同期され
- msdb が含まれていることで、SQL Server エージェントジョブが同期される
ようになり、通常の AlwaysOn 可用性グループと異なり、システムデータベース内のオブジェクトを個別に作成する必要がありません。
ログインが同期されるのは、かなり便利ですね。
ジョブについても、軽く試してみた感じでは、プライマリでのみ実行されるようで、スケジューリングジョブを、セカンダリだった場合にジョブの実行をスキップというような処理を明示的に組む必要は無いようです。
ユーザーデータベースが作成されると、Controller の Pod で情報が取得できたタイミングで、自動的に可用性グループへの追加が行われますので、作成したデータベースの可用性グループの追加を手動で実施する必要も無いようです。(バックアップをリストアしたときも自動的に可用性グループに組み込むようです)
システムデータベースが可用性グループに組み込まれていますので、master / model についても「完全復旧モデル」が設定されており、定期的なトランザクションログのバックアップについては考慮する必要があります。
Azure Arc Enabled SQL Managed Instance の最新の情報については、Release notes – Azure Arc enabled data services (Preview) にのみ記載されていることがあり、現時点では英語版のドキュメントにのみ次の記載があります。(5 月のリリースノートの情報が英語版のドキュメントにしか記載されていないため)
Manually trigger a failover of using Transact-SQL. Do the following commands in order:
On the primary replica endpoint connection:
ALTER AVAILABILITY GROUP current SET (ROLE = SECONDARY);
On the secondary replica endpoint connection:
ALTER AVAILABILITY GROUP current SET (ROLE = PRIMARY);
Transact-SQLBACKUP
command is blocked unless usingCOPY_ONLY
setting. This supports point in time restore capability.
可用性グループのフェールオーバーについては、T-SQL で実施し、BACKUP DATABASE については COPY_ONLY オプションが必須となっています。(BACKUP LOG については、COPY_ONLY オプションなしで取得できます)
従来の AlwaysOn 可用性グループから、システムデータベースの同期は課題となっており、対応を検討しているというステータスだったのですが、BDC / Arc MI ではこの課題が解決されるアプローチがついに導入されました。
Azure SQL Managed Instance が、既に似たような仕組みになっているかと思いますので、そちらのフィードバックも反映されているかもしれませんね。
一般的な利用方法 SQL Server では、まだ包含可用性グループを使用できるバージョンはありませんが、オンプレミスの SQL Server にも加わってくれると、システムオブジェクトの管理の容易性が向上するのでうれしいですね