ニュース&ブログ
【Azure SQL Managed Instance】Managed Instanceリンクを使ってオンライン移行の検証をしてみた①
投稿日:2025/01/31
はじめに
前回のブログではSQL ServerとAzure SQL Managed Instance間の差分移行の手段の一つとして、LRSの概要と検証結果を紹介しました。
今回は、上記2つのデータベースをほぼリアルタイムでレプリケーションすることができるManaged Instanceリンクについて紹介します。
Managed Instance リンク機能の概要
上述の通り、SQL ServerとAzure SQL Managed Instance間のデータレプリケーションを可能にする機能です。
本機能を利用することで、オンプレミスのSQL Serverの分析とレポートをAzureで行ったり、Azureへの移行を容易にしたり、ディザスタリカバリ環境としても使用することができます。
この機能はさまざまな手段で利用されますが、最小限のダウンタイムでのオンライン移行が可能になることが大きな利点です。
SQL Serverのバージョンに関するサポート状況
注意が必要なのは、現在利用しているSQL ServerのバージョンがManaged Instanceリンク機能を使用できるかどうかです。
公式ドキュメントで一覧表が示されていますが、SQL Server 2016以前のバージョンはサポートされていません。※1
SQL Server 2016以降においても、サービス更新プログラムの要件を満たさなければ本機能は利用できません。
※1 SQL Server 2017では現在サポートされていません。
Managed Instance リンク機能を使用する前の準備
今回は実際にManaged Instanceリンクを作成する準備まで進めたいと思います。
準備としては「SQL Serverの準備」と「ネットワーク接続の準備」の2つになります。
SQL Serverの準備
1. masterデータベースにデータベースマスターキーを作成する
2. 可用性グループを有効にする
3. トレースフラグを有効にする
4. ネットワークエンドポイントの作成
ネットワーク接続の準備
1. SQL ServerとAzure SQL Managed Instanceの通信の確保
2. ネットワークポートの設定
上記2つの設定が終了した後に、SQL ServerとAzure SQL Managed Instance間の接続テストを行います。
なお、前提条件についてはこちらの公式ドキュメントをご確認ください。
検証環境
Azure内で完結する環境を用意しました。
お客様がAzure SQL Managed Instanceに移行する際、旧バージョンを利用していることがほとんどなのでSQL Server 2016を使用します。
SQL ServerとAzure SQL Managed InstanceのVNetはピアリングし、SQL Server側のサーバーからSSMS経由でAzure SQL Managed Instanceに接続できることも確認済みです。
SQL Serverでの作業
まずはじめにマスターキーを作成します。
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<任意のパスワード>';
-- 作成後に確認
SELECT * FROM sys.symmetric_keys WHERE name LIKE '%DatabaseMasterKey%';
次に可用性グループの有効化を行います。
可用性グループが有効化されているかは、以下のクエリでも確認可能です。
DECLARE @IsHadrEnabled sql_variant = (SELECT SERVERPROPERTY('IsHadrEnabled'));
SELECT
@IsHadrEnabled AS 'Is HADR enabled',
CASE @IsHadrEnabled
WHEN 0 THEN 'Availability groups DISABLED.'
WHEN 1 THEN 'Availability groups ENABLED.'
ELSE 'Unknown status.'
END AS 'HADR status';
公式ドキュメントにも記載がありますが、SQL Server 2016で可用性グループを有効化するためにはWindows Serverフェールオーバークラスター (WSFC) を使用する必要があるので、WSFCを作成してから可用性グループを有効化します。
Install-WindowsFeature -Name Failover-Clustering ?IncludeManagementTools
New-Cluster -Name "<任意のクラスター名>" -AdministrativeAccessPoint None -Verbose -Force
可用性グループを有効化しましょう。
WSFCを使用してSQL Serverで可用性グループを作成できるように、SQL Server側で権限設定を行います。
GRANT ALTER ANY AVAILABILITY GROUP TO [NT AUTHORITY\SYSTEM];
GRANT CONNECT SQL TO [NT AUTHORITY\SYSTEM];
GRANT VIEW SERVER STATE TO [NT AUTHORITY\SYSTEM];
トレースフラグ(1800, 9567)の設定を行います。
これらの有効化は必須項目ではなく、パフォーマンス向上のための推奨レベルのものです。
DBCC TRACEON(1800,-1);
DBCC TRACEON(9567,-1);
DBCC TRACESTATUS;
最後に接続テストで使用するエンドポイントを作成します。
-- エンドポイント作成に利用するテスト用の資格情報
USE MASTER;
CREATE CERTIFICATE TEST_CERT
WITH SUBJECT = N'Certificate for SQL Server',
EXPIRY_DATE = N'3/30/2051';
-- テスト用のエンドポイント
CREATE ENDPOINT TEST_ENDPOINT
STATE=STARTED
AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (
ROLE=ALL,
AUTHENTICATION = CERTIFICATE TEST_CERT,
ENCRYPTION = REQUIRED ALGORITHM AES
);
ネットワーク接続の準備
SQL ServerとAzure SQL Managed Instanceの通信を確保するために、前提条件として既に仮想ネットワークピアリングを構築済みですので詳細は省略します。
ネットワークポートの設定では、SQL Server側ではファイアウォールの設定変更、Azure SQL Managed Instance側ではNSGの設定変更を行います。
なお、Azure SQL Managed InstanceのNSGは、機能を利用するためのポート5022のIN/OUTの通信許可設定がされています。
SQL Serverでは、以下のスクリプトを実行することで新たにルールが設定されます。
New-NetFirewallRule -DisplayName "Allow TCP port 5022 inbound" -Direction Inbound -Profile Any -Action Allow -LocalPort 5022 -Protocol TCP
New-NetFirewallRule -DisplayName "Allow TCP port 5022 outbound" -Direction Outbound -Profile Any -Action Allow -LocalPort 5022 -Protocol TCP
接続テスト
準備が整ったので、SQL Server側のSSMSから接続テストを行います。
機能を利用したいデータベースを右クリックし、[Azure SQL Managed Instance link] > [Test connection]を選択します。
まずはじめに前提条件のチェックが行われます。
今回の準備では触れていませんが、SQL Server Agentの有効化も条件の一つのようです。
次にAzureにサインインし、対象となるAzure SQL Managed Instanceを選択します。
最後に今回の接続テストで利用するエンドポイントを選択します。
なお、Azure SQL Managed InstanceのIPアドレスはデフォルトで入力されていますので、適宜確認してください。
サマリが表示された後に接続テストが実施されます。
正常に終了した場合、以下の画面が表示されるはずです。
万が一[Connectivity test results summary]に赤い×の表示が出た場合はネットワーク接続に何らかの問題があるため、再度設定を見直しましょう。
接続テストが無事に終わった後は、テスト用に作成した資格情報とエンドポイントを削除しましょう。
DROP ENDPOINT TEST_ENDPOINT;
DROP CERTIFICATE TEST_CERT;
まとめ
今回の記事では、SQL ServerとAzure SQL Managed Instance間のほぼリアルタイムなデータレプリケーションを実現するManaged Instanceリンク機能についての概要と環境準備の紹介をしました。
次回は実際にManaged Instanceリンク機能を作成し、使用していきます。
中川 智文(2022年入社)
株式会社システムサポート フューチャーイノベーション事業本部 ソリューションサービス事業部所属
Oracle Database, SQL Serverを中心とした案件に従事