VM Role で SQL Server を実行するための方法を少しまとめてみたいと思います。
MSDN フォーラムでもこの辺は話題になるみたいですね。
VMロール上でSQL Server
SQL Server installation using Azure VM role
実行することはできますが非サポートになるようですのでご利用は計画的に。
今回は Microsoft SQL Server2008 R2 RTM – Express with Advanced Services を使用しています。
Contents
■SQL Server の構成
VM Role で SQL Server のデータベースを永続化する構成を考えると以下のようになるかと思います。
共有機能はクライアントコンポーネントになりますので、非永続領域に保存していても問題ないと思っています。
# Azure Drive 上に共有機能を保持することも可能ですが。
SQL Server のコアとなるインスタンスに必要なプログラムやデータベースを Azure Drive 上に配置することでログやデータベースを永続化した状態で保持することが可能となります。
この構成に対応させるために、Hyper-V のゲスト OS の VHD は以下のように構成しておきます。
Azure Storage の Page Blob には VHD をダイレクトにアップロードすることができますので、あらかじめ E ドライブ用の VHD を作成しておきます。
今回は固定で 2 GB の VHD として作成をしておきます。
# インスタンスルートディレクトリとしては、1,297 MB 以上が必要になります。
あとは、この環境で SQL Server Express をインストールします。
■SQL Server Express のインストール
E ドライブをインスタンスルートディレクトリとして指定します。
今回は既定のインスタンスとして SQL Server Express をインストールしています。
データベースのディレクトリに関しては、インスタンスルートディレクトリが起点となりますので、E ドライブが設定された状態となります。
SQL Server Express はデフォルトの設定では TCP/IP が有効になっていませんので、TCP/IP を有効にしておきます。
TCP 1433 (SQL Server) / TCP 1434 (SQL Server:DAC) / TCP 80 (SSRS) のファイアウォールを許可しておきます。
netsh advfirewall firewall add rule name="SQL Server" dir=in protocol=tcp localport=1433 action=allow |
SQL Server Express Edition はデフォルトでは、[Windows 認証モード] となっていますので、必要に応じて [SQL Server 認証モード] を有効にします。
SSRS に関してはデフォルトでは Administraotrs グループが管理者となっていますので、必要に応じて変更をしておきます。
サービスに関しては Azure Drive でドライブをマウントした後にサービスを開始する必要がありますので、SQL Server のサービスに関しては [手動起動] としておきます。
SSRS も手動にするか、SQL Server と依存関係を設定しておいた方が良いかと思います。
■SQL Server のサービス起動のタイミング
SQL Server のサービスを起動するためには、Azure Drive でドライブがマウントされた後に起動する必要があります。
本来なら VM Role Adapter を作って、サービスレベルで Azure Storage をマウントするのが良いのですが、私はコーディングが苦手なので、今までの投稿で使用していた PowerShell にマウント → サービスの起動を組み込んでしまいます。
# 必要となるアセンブリの参照 # サービスの起動が完了するまで待機 while((Get-Service -Name "Windows Azure Integration Components").Status -ne "Running"){ while((Get-Service -Name "Windows Azure Remote Forwader Service").Status -ne "Running"){ # Azure Storag に接続するための接続文字列をサービスモデルで定義した設定から取得 # Azure Storage に接続 # ローカルストレージに Azure Drive 用のキャッシュディレクトリを作成 # Azure Drive として、VHD をマウント # サービスを起動 # プロセスを維持するためキー入力要求を発生 |
VHD をアップロードする前に、Sysprep を [一般化しない状態] でアップロードしておきます。
SQL Server はコンピューター名が変わると、[sp_dropserver] [sp_addserver] を使用して、SQL Server として保持しているサーバー名を変更しないと正常に動作しないことがあります。
また、一般化することにより SID が変化し、セキュリティに影響が出てきますので、一般化はしない状態の Sysprep を実行します。
■VHD のアップロード
今回は以下の 2 種類の VHD を作成しています。
この VHD を用途に合わせて適切な場所に配置をします。
Page Blob としてのアップロードは CloudXplorer を使用しました。
VM Role の VHD Images に OS 用の VHD / Azure Storage の Page Blob としてデータベース用の VHD が格納された状態となります。
■VM Role のインスタンスを起動して動作確認
それでは、VM Role のインスタンスを起動して動作確認をしてみます。
C ドライブに VHD、E ドライブにデータベースのファイルが格納された Azure Drive がマウントされています。
マウントされたドライブが確実に E ドライブにマウントされるとは限らないので、本当は PowerShell でドライブレターの制御もしないといけないのですよね…。
VM Role のインスタンスは下図の状態となっています。
SQL Server 関連のサービスも正常に起動しています。
インスタンスルートディレクトリを E ドライブにしていますので、新規のデータベースも Azure Drive 上に作成がされます。
Azure Drive 上に作成されていますのでこのデータベースは Reimage をしても永続化がされた状態となります。
一般化していない状態の VM Role のインスタンスですので SID も変更されず、セキュリティの設定も維持されますのでインスタンスが再作成されてもデータベースは継続して接続することが可能です。
VM Role で何かしらのソフトを入れるときは Azure Drive と組み合わせて今回のような構成をとる必要がありますので Azure Drive と VM Role Adapter を勉強しなくてはと思いました…。。
[…] This post was mentioned on Twitter by よち, 小澤真之(Masayuki Ozawa). 小澤真之(Masayuki Ozawa) said: VM Role で Azure Drive を使って SQL Server を実行してみるを投稿しました。非サポートかと思いますが、構成の一例として。 http://tinyurl.com/47kfvrg #AzureJP #jazug […]
Tweets that mention VM Role で Azure Drive を使って SQL Server を実行してみる ≪ SE の雑記 -- Topsy.com
13 2月 11 at 20:06