SE の雑記

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

SQL Server IaaS Agent 拡張機能の構成に変更があります

leave a comment

Benefit from Resource Provider registration when self-installing SQL Server on Azure Virtual Machine でアナウンスがされていますが、Azure VM 上で SQL Server を実行する際に、運用の利便性を向上させることが可能な SQL Server IaaS Agent 拡張機能の構成に変更がありました。
これも 拡張セキュリティアップデート (ESU : Extended Security Updates) の対応の一環なのかなと。
(今回のアップデートにより、ライセンス切り替えの方法が柔軟に行えるようになります)
詳細は Automate management tasks on Azure Virtual Machines with the SQL Server IaaS Agent Extension / Register SQL Server virtual machine in Azure with the SQL VM resource provider から確認できます。
Azure VM で実行している SQL Server のライセンスモデルの変更については、2019/1 から、Azure での SQL Server 仮想マシンのライセンス モデルを変更する方法 に記載されている方法 で変更ができるようになりました。
本ブログでも Azure の SQL Server VM のライセンスモデルの変更でできるようになったことをまとめてみる で確認をしてみました。
ライセンスモデルの変更ですが、次の 3 種類の機能を使用していました。
SQL VM リソースプロバイダーがイメージの情報を Azure から取得し、SQL Server の情報を IaaS Agent 拡張機能から取得することで機能が実現されています。
そのため、SQL IaaS Agent を導入するためには、Azure VM エージェントが必要となります。

ライセンスモデルの変更を行うために必要となる、SQL Server のバージョンやエディションの情報を、SQL Server IaaS Agent 拡張機能から取得していたのですが、従来までの SQL Server IaaS Agent 拡張機能では、

  • Windows Server 2008 にはインストールすることができない
    • Azure 仮想マシンエージェントが、Windows Server 2008 をサポートしていないため
  • SQL Server IaaS Agent 拡張期が、SQL Server 2008 / R2 はサポートしていない
  • SQL Server IaaS Agent 拡張機能のインストール時に SQL Server の再起動が発生
    • インストールを行うためにはシステムの停止を伴う

というような課題があり、ESU でサポートされる古いバージョンに対して適用することができませんでした。
(過去には、SQL Server IaaS Agent 拡張機能は、再インストールした環境や日本語環境ではサポートしていないという課題がありましたが、2019/1 以降は日本語環境でもサポートされるようになっていますので、現在は日本語版 SQL Server でも利用することができます)
今回新しくなった SQL Server IaaS Agent 拡張機能ではサポートする環境とインストールの構成に大きな改善が行われています。
対象としては、Windows Server 2008 R2 ~ SQL Server 2017 まで幅広くサポートされています。
(この辺は今回のタイミングというよりは 5 月ぐらいから小出しに改善されているようですが)
image
また、以前は、SqlVirtualMachine リソースプロバイダーを使用したライセンスモデルの変更 は Marketplace のイメージで構築した VM でないと、変更ができないようになっていました。
自分で構築したイメージに対してもライセンスモデルの変更ができるようになっているようですので、ライセンスモデル変更の柔軟性も増しているようです。
「技術的に変更できる」と「使用しているライセンスとして変更しても問題ない」は異なりますので、適切なライセンスを所有しているかは必ず確認してください。
以前の IaaS Agent でも、カスタム SQL Server イメージでライセンスの変更はサポートされており、その他の機能はカスタムイメージではサポートしないというようになっていたはずですが、これが新しいバージョンの提供によりどのようになったかは、きちんと情報を確認しておく必要があると思いますので。
 

リソースプロバイダーの登録

以前からライセンスモデルの変更は、「SQL Server IaaS Agent 拡張機能」と「SQL VM Resource Provider」を組み合わせて実現していました。
これは新しくなったものも同様です。
サブスクリプション内でSQL VM Resource Provider を一度も登録していない場合は、SQL Server on Azure Virtual Machines resource provider に書かれている次のコマンドを実行して、リソースプロバイダーの登録を行う必要があります。

Register-AzureRmResourceProvider -ProviderNamespace Microsoft.SqlVirtualMachine

 
ポータルの「サブスクリプション」のブレード内のリソースプロバイダーからも設定できますので、コマンドまたは、ポータルからリソースプロバイダーを事前に有効化してください。
image
 

新しくなったインストールモード

今回から、Azure VM の SQL Server の管理を行うためのエージェント は 3 種類のモードでインストールができるようになりました。

  • Full Mode
  • Lightweight Mode
  • NoAgent Mode

それでは、各モードの特徴を見ていきたいと思います。
今回は Windows Server 2008 R2 + SQL Server 2008 R2 の環境を使用しています。
 

Full Mode

この構成については、従来からの機能をすべて使用することができる構成となります。

  • SQL Server IaaS Agent 拡張機能のインストール時に SQL Server の再起動が行われる
  • 従来までのフル機能を使用することが可能
  • シングルインスタンスの SQL Server を管理するために利用 (インストールされているインスタンスがシングルインスタンスであれば、既定 / 名前付きインスタンスともに対応)
  • ライセンスモデルの変更が可能

従来までの機能がフルセットで含まれているものですね。
Full Mode のインストールは次のようになります。

$vmName = "SQLVM"
$RG = "SQLMigration"
$sqlServerLicenseType = "PAYG" # PAYG or AHUB
$sqlManagement = "Full" # Full or LightWeight
$vm = Get-AzVM -Name $vmName -ResourceGroupName $RG
New-AzResource -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Location $vm.Location `
-ResourceType Microsoft.SqlVirtualMachine/SqlVirtualMachines `
-Properties @{virtualMachineResourceId=$vm.Id;sqlServerLicenseType=$sqlServerLicenseType;sqlManagement=$sqlManagement}

Full Mode の場合、SQL Server IaaS Agent 拡張機能が事前にインストールされている必要があり、インストールされていない状態でインストールをしようとすると、次のようなメッセージが出力されることがあります。

New-AzResource : SqlExtNotInstalled :
Creating the SqlVirtualMachine with ‘SqlManagement’ property as ‘Full’ will restart the SQL Server on Virtual Machine: ‘/subscriptions/xxxxxxxx/resourceGroups/MI/providers/Microsoft.Compute/virtualMachines/MSSQL2017’. You can specify the ‘SqlManagement’ property as ‘LightWeight’ instead, which will avoid the restart on Create,
See ‘https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-server-agent-extension#install-in-lightweight-mode’.

この場合は、一度 Lightweight でインストールしてから Full に切り替えるか、手動で SQL Server IaaS Agent 拡張機能をインストールします。

$vmName = "<VM Name>"
$RG = "<Resource Group Name>"
$vm = Get-AzVM -Name $vmName -ResourceGroupName $RG
Set-AzVMSqlServerExtension -VMName $vm.Name -ResourceGroupName $vm.ResourceGroupName -Version "2.0"

次のコマンドで情報を取得してみると、OS / SQL Server のバージョンと SQL Server のエディションが自動的に取得されていることが確認できますね。
(SQL Server 周りの情報は、SQL Server IaaS Agent 拡張機能経由で照会して、設定されているかと思います)

$sqlvm = Get-AzResource -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -ResourceType Microsoft.SqlVirtualMachine/SqlVirtualMachines
$sqlvm.Properties

image
Full Mode の場合は、SQL Server IaaS Agent 拡張機能のフルセットが使用でき、SQLVM リソースプロバイダーが必要とする情報についても自動的に取得 / 設定が行われています。
 

Lightweight? Mode

それでは、次に軽量モードである Lightweight を試してみます。
(上述の PowerShell で Lightweight を指定します)

  • インストール時に SQL Server の再起動は不要
  • SQL Server のライセンスタイプとエディションの設定をサポート
  • 複数インスタンス / クラスターインスタンスに対しても使用することができる
    • SQL Server IaaS Agent 拡張機能は既定のインスタンスのシングルインスタンス構成のみをサポート

このような特徴があるモードとなっています。
再起動が不要ですので、稼働中の環境にインストールをする場合の停止調整が不要となるというのも特徴ではないでしょうか。
SQL Server IaaS Agent 拡張機能の豊富な機能は使用できないのですが、ライセンスタイプの変更や、SQL Virtual Machines という新しいブレードによる管理については、この軽量モードでも実施することができます。
(VM としては、SqlIaasExtension が追加されている状態となりますが、サービスとして「Microsoft SQL Server IaaS Query Service」「Microsoft SQL Server IaaS Agent」は起動していない状態となっています)
拡張機能に「SqlIaasExtension」が登録されるのは同じなのですが、「SQL Server の構成」を表示した際には、ライセンスの設定以外は編集のアイコンが設定されておらず無効となっており、制限されたモードで動作していることが確認できるかと。
image
軽量モードでも最小限の機能で、SQL Server IaaS Agent 拡張機能は最小限動作していますので、OS / SQL Server の情報は自動的に取得され設定されていますね。
image
Lightweight から Full へは変更 (アップグレード) できますが 、Full から Lightweight への変更 (ダウングレード) はできないようです。
Fulll を Lightweight に変更したい場合は、一度、SQL VM リソースプロバイダーの登録解除と、SQL Server IaaS Agent 拡張機能をアンインストールして再度インストールする必要があるようです。
 

Full と LightWeight はどのようにエディションを判断しているか?

Full と LightWeight ですが、どちらのモードでも、インストール操作を行うと、Azure 仮想マシンゲストエージェント経由で、SQL Server IaaS Agent 拡張機能を「C:\Packages\Plugins\Microsoft.SqlServer.Management.SqlIaaSAgent」にインストールします。
これら 2 種類のモードでインストールをされた、SQL Server IaaS Agent 拡張機能では、「SQL Server のデータベースエンジンのバージョンとエディションの情報を取得」しようとします。
(レジストリ等を見ながら情報の取得を行っているようです)
データベースエンジンから情報を取得できないと、次のようなエラーが発生します。

PreReq failure: ErrorCode: SqlInstanceNotFound, Message: Could not find any SQL Server instance in the Virtual Machine

 
 

NoAgent Mode

Full / Lightweight は、Azure 仮想マシンゲストエージェントとSQL Server IaaS Agent 拡張機能をインストールすることで実現をしていました。
しかし、Windows Server 2008 上で動作させている環境では、これらをインストールすることができません。
Windows Server 2008 では、NoAgent という、エージェントを使用しないモードを使用することで、情報を登録することができます。

  • Windows Server 2008 にインストールされた、SQL Server 2008 / R2 専用の構成
    • このバージョンの OS では VM のゲストエージェントをインストールできないため)

登録の詳細は Register SQL Server 2008/R2 on Windows Server 2008 VMs に記載されていますが、次のようなコマンドにより登録ができます。

$vmName = "SQL2008VMx86"
$RG = "SQLMigration"
$sqlServerLicenseType = "PAYG" # PAYG or AHUB
$sqlManagement = "NoAgent" # Full or LightWeight
$sqlImageOffer = "SQL2008R2-WS2008" # SQL2008R2-WS2008 or SQL2008-WS2008
$sqlImageSku = "Standard" # Standard / Enterprise
$vm = Get-AzVM -Name $vmName -ResourceGroupName $RG
New-AzResource -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Location $vm.Location `
-ResourceType Microsoft.SqlVirtualMachine/SqlVirtualMachines `
-Properties @{virtualMachineResourceId=$vm.Id;SqlServerLicenseType=$sqlServerLicenseType; `
sqlManagement=$sqlManagement;sqlImageSku=$sqlImageSku;sqlImageOffer=$sqlImageOffer }

 
Full / Lightweight では、SQL Server IaaS Agent 拡張機能から情報を取得していましたが、Windows Server 2008 ではこれらがインストールできないため、手動で必要な情報を設定してあげるイメージですね。
image
sqlImageOffer は定められたものしか設定できませんので、Windows Server 2008 + SQL Server 2008 or SQL Server 2008 R2 専用となるかと。
NoAgent Mode は「Azure 仮想マシンゲストエージェントがインストールできない VM」に対して、実行するための設定となります。
そのため、Azure 仮想マシンゲストエージェント (Windows Azure Guest Agent サービス) が導入されている環境で「NoAgent」を指定してインストールを試みた場合は、次のようなエラーが発生し、インストールすることはできません。

New-AzResource : VmAgentIsRunningForNoAgent : Cannot create or update as NoAgent model while the Guest Agent is running.

 

ライセンスタイプの再設定

sqlServerLicenseType は一度設定すると変更することができないのですが、間違えて設定してしまった場合は、一度、VM のリソースプロバイダーを削除することで再設定できますので、そのような場合は次のようなコマンドを利用するとよいかと思います。

Remove-AzResource -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -ResourceType Microsoft.SqlVirtualMachine/SqlVirtualMachines

 
リソースプロバイダーを追加することで、SQL Server IaaS Agent 拡張機能もインストールされるはずですが、うまくインストールされない場合などは次のコマンドで手動でインストールできるはずです。

Set-AzVMSqlServerExtension -ResourceGroupName $RG -VMName $vmName -Name "SqlIaasExtension" -Version "2.0" -Location $vm.location

 

SQL virtual machies による管理

SQL VM Resource Provider を追加した VM については、SQL Virtual Machineから一括して管理できるようになりました。
image
image
SQL Server IaaS Agent 拡張機能の設定と、ライセンスモデルの変更についても、この画面から変更することができるようです。
imageimage
How to perform an in-place upgrade of SQL Server edition on Azure VM ではエディションの変更についても触れられていますので、このあたりの情報も一度読んでおくとよいかと。
SQL Server IaaS Agent 拡張機能がインストールされた環境については、ライセンスモデルについては、SQL Virtual Macines だけでなく、Virtual Machines の 「SQL Server の構成」の「SQL Server ライセンス」からも確認することができます。
image
Market Place の SQL Server インストール済みイメージからデプロイした場合は、ここで表示される内容は、SQL Virtual Machines で確認できる内容と同じなのですが、自分で SQL Server インストール済みの環境を作成したカスタムイメージの場合は、SQL Server の構成の SQL Server ライセンスは「Azure ハイブリッド特典」に固定されて表示が行われるという表示上の問題が、本投稿を作成した時点では発生してしまいます。
これは表示上の問題だけであり、実際の課金については、SQL Virtual Machines から確認できるライセンスモデル (指定したライセンスモデル) で行われるため、実際に指定した内容と課金が異なることはないのですが、SQL Server の構成から確認した際に表示が異なっている場合は、このような事象が発生しているということを覚えておいていただければ問題ないかと思います。
SQL Server の構成の機能は、SQL Virtual Machines に管理 UI が切り替わるようで、SQL リソースプロバイダーと SQL Server IaaS Agent 拡張機能の両方がインストールされている場合、そのような内容のメッセージが、最近になって表示されるようになりました。
この辺は現在、UI 変更の検討を行っているとのことで、今後改善されるかと。

Share

Written by Masayuki.Ozawa

7月 10th, 2019 at 12:30 am

Posted in SQL Server

Tagged with

Leave a Reply