Azure Elastic Scale の Split-Merge ツールを試してみる - 環境構築編 -

今日も元気に水平分散です。

今回は Azure SQL Database Elastic Scale (Preview) の Split-Merge ツールを試してみます。
相変わらず知識関連は置いてけぼりです。触ってたらそのうち頭の中で整理されるでしょ?くらいのひどいノリ。だって、英語、読めない。

あ、Elastic Scale って何?って方は 本家こちらのブログポスト を見ていただければ。

それと、今日はツールを実行するための環境構築のみです。
動作検証自体は既に出来ているんですが、ブログに書くためにきちんと文字起こししたら思いのほか長くなってしまってもうこんな時間なので、どう使うかはまた明日。

Split-Merge ツール

ってのは何かというと、その名の通り Shard を分割したり統合したり、shardlet(次回説明します)の移動ができる、Azure Cloud Service 上で動く Web ロールと Worker ロールです。

shard の統合、分割についての詳細は

Splitting and Merging with Elastic Scale

に整理されて書いてあるので、興味がある方はご覧ください。

ざっと読んだ感じ結構大事なことも書いてあるんできちんとまとめたいんですが、全部説明してると長くなるのでまた後日。今日は動かすだけです。

Split-Merge ツールチュートリアルの実行

では実際に使っていきます。
内容は基本的に Elastic Scale Split and Merge Service Tutorial に書かれていることに則ります。

Split-Merge ツールのダウンロード

Split-Merge ツールは、NuGet にてバイナリで配布されています。
実行に特にソリューションファイルなどは必要ないので、適当に自分の環境の NuGet.exe があるディレクトリに行くか、exe だけ落としてきて 以下のコマンドを叩きます。

D:\AzureElasticScale_Split-Merge> nuget.exe install Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge

Installing 'Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge 0.7.1'.
Successfully installed 'Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge 0.7.1'.

カレントディレクトリに新たにパッケージがあると思います。今回はここをワーキングディレクトリにしましょう。

環境の準備

Split-Merge ツールを動かすための準備をします。
結構やること多いので最初にざっくり流れをまとめると

  1. Split-Merge ツール(と分割、統合用の DB を配置する) SQL Database Server を作成
  2. ツール用の SQL Database を作成
  3. ツール用の Azure Storage を作成
  4. ツール用の Azure Cloud Service を作成
  5. オレオレ証明書の作成と登録
  6. ツールの構成
  7. ツールを Cloud Service にデプロイ
  8. チュートリアル用 DB の作成
  9. (必要なら) 環境のテスト

です。多すぎるよ!

チュートリアルとちょっと順番変えてます。

Split-Merge ツール(と分割、統合用の DB を配置する) SQL Database Server を作成

まずは、Azure ポータルから SQL Database Server を作りましょう。
あ、作るときに「Windows Azure サービスにサーバーへのアクセスを許可します。」のチェックをしておく必要があります。また、自分の IP アドレスで接続できるように [構成] の [使用できる IP アドレス] からファイアウォールも構成しましょう。

f:id:kendik:20141014030604j:plain

ツール用の SQL Database, Storage, Cloud Service を作成

SQL Database は普通に作るだけなので割愛します。サーバーは先ほど作ったやつを選択しておいて下さい。

Storage は、ポータル左下の「新規」ボタンから [データサービス] > [ストレージ] > [簡易作成] で OK です。

f:id:kendik:20141014030658j:plain

Cloud Service も同様に [新規] > [コンピューティング] > [クラウドサービス] > [簡易作成] で。

f:id:kendik:20141014030708j:plain

オレオレ証明書の作成と登録

チュートリアルでは、DB への接続は暗号化されているようなので、あくまでテスト用として証明書の作成と登録が必要です。

Visual Studio の開発者用コマンドプロンプトを開き、以下のコマンドで証明書を作成できます。

makecert ^
-n "CN=*.cloudapp.net" ^
-r -cy end -sky exchange -eku "1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2" ^
-a sha1 -len 2048 ^
-sr currentuser -ss root ^
-sv MyCert.pvk MyCert.cer

(余談ですが、^ で改行できるの知らなかったです。便利ですね。)

コマンドを実行すると、モーダルが出てきてパスワードを聞かれるので、適当に入力します。
カレントディレクトリに MyCert.pvk ファイルと MyCert.cer ファイルがあれば OK です。

次に、Azure への登録用に .pfx ファイルを作成します。コマンドは以下の通り。

pvk2pfx -pvk MyCert.pvk -spc MyCert.cer -pfx MyCert.pfx -pi <password>

<password> には証明書を作ったときに入力したパスワードを設定して下さい。
MyCert.pfx ファイルが出来てたら OK です。

続いて、この証明書を自分の証明書ストアにインストールします。
MyCert.pfx ファイルをダブルクリックするとインポートウィザードが立ち上がるので、途中パスワードを入力する以外は全部初期設定で「次へ」ってやってればいいです。

※こんなのが立ち上がる

f:id:kendik:20141014030728j:plain

さて、最後に証明書を Cloud Service に登録します。

Azure ポータル左のメニューの [クラウドサービス] から先ほど作成したサービスを選択し、[証明書] > [証明書をアップロードします。] を選択します。

f:id:kendik:20141014030737j:plain

f:id:kendik:20141014030747j:plain

先ほど作成した MyCert.pfx ファイルを選択し、パスワードを入力して作業完了です。

Split-Merge ツールの構成

次は、Split-Merge ツールの構成を変更します。具体的には config ファイルの修正です。

まずは、先ほどダウンロードした Split-Merge ツール NuGet パッケージ配下の、Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge.0.7.1\content\splitmerge\service フォルダ内に移動しましょう。

ServiceConfiguration.Template.cscfg というファイルがあると思いますので、こいつをコピーして ServiceConfiguration.cscfg という名前に変更し、適当なエディタで開きます。

今回必要な設定は

  • SQL Database の接続文字列
  • Storage Account の接続文字列
  • 証明書のサムプリント

です

まずは SQL Database の接続文字列から。

接続文字列そのものは SQL Database のダッシュボードに [接続文字列の表示] というのがあるのでそこから持ってきてください。

接続文字列を、ServiceConfiguration.cscfg の [ServiceConfiguration] > [Role] > [ConfigurationSettings] > [Setting] に設定します。

Setting 要素は、name 属性が "ElasticScaleMetadata" になっている箇所に指定して下さい。
また、Role 要素は、name 属性が "SplitMergeWorker" のものと、"SplitMergeWeb" になっているものがあるので、それぞれの要素配下の Setting に接続文字列を指定してあげて下さい。既存の値はまるまる上書いちゃって大丈夫です。

分かりにくいと思うので画像で。

f:id:kendik:20141014030802j:plain

続いて、Storege Account の接続文字列の設定です。

Storage Account の接続文字列を作るために必要なのは、ストレージアカウント名とアクセスキーです。
ダッシュボードを開くと画面下に「アクセスキーの管理」というボタンがあるのでそこから見れます。
キーはプライマリアクセスキーにしましょう。(なんでかは分かってない)

f:id:kendik:20141014030816j:plain

アカウント名とアクセスキーの設定は、SQL Database の接続文字列と同じく、ServiceConfiguration.cscfg の [ServiceConfiguration] > [Role] > [ConfigurationSettings] > [Setting] に設定します

設定すべき Setting 要素の name 属性は "Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" です。また、先ほどと同様に name 属性が "SplitMergeWorker" と "SplitMergeWeb" になっている、それぞれの Role 要素配下で設定が必要です。

f:id:kendik:20141014030826j:plain

最後に証明書のサムプリントを設定します。クラウドサービスの [証明書] から見れます。

サムプリントも ServiceConfiguration.cscfg に設定するのですが、説明しにくいので画像を見て下さい。四カ所あります。

f:id:kendik:20141014030922j:plain

一応チュートリアルからも持ってきました。設定箇所が以下のように示されています。

<Setting name="AdditionalTrustedRootCertificationAuthorities" value="" />
<Setting name="AllowedClientCertificateThumbprints" value="" />
<Certificate name="SSL" thumbprint="" thumbprintAlgorithm="sha1" />
<Certificate name="CA" thumbprint="" thumbprintAlgorithm="sha1" />

ツールの構成は以上です。

ツールを Cloud Service にデプロイ

続いて、ツールを Cloud Service にデプロイします。

Azure ポータル左のメニューから

[クラウドサービス] > 先ほど作ったサービスを選択 > [ダッシュボード] > [新しい運用環境のデプロイをアップロードします。]

で開いたモーダルに、SplitMergeService.cspkg と先ほど色々設定していた ServiceConfiguration.cscfg を指定します。.cspkg は .cscfg と同じフォルダ内にあるはずです。あ、デプロイラベルは適当にどうぞ。

なお、デプロイするときには「1つ以上のロールに単一のインスタンスが含まれている場合でもデプロイします。」にチェックが必要なようです。ご注意下さい。

f:id:kendik:20141014030934j:plain

デプロイ完了までは結構掛かりますので慌てずのんびり。

また、私の環境では Worker ロールのデプロイが必ず失敗するのですが、別に普通にツールは動きます。一度ツールを動かしたら「実行中」という正常な状態になるのですが、謎です。もし設定を見直してなお、何度やっても成功しないという方がいれば、とりあえずほっておいて先に進むのも手です。

チュートリアル用 DB の作成

さて、準備も佳境です。次は、チュートリアル用の DB を作成しましょう。
最初にダウンロードしてきた NuGet パッケージ内にはセットアップスクリプトが含まれているので、それを利用します。

Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge.0.7.1\content\splitmerge\powershell フォルダで PowerShell コンソールを開き、以下のとおりスクリプトを実行します。

.\SetupSampleSplitMergeEnvironment.ps1 `
    -UserName 'SQL Database への接続ユーザー名' `
    -Password 'SQL Database への接続パスワード' `
    -ShardMapManagerServerName 'SQL Database Server の管理用 URL から "https://" を除いたもの'

エラーなど特に何も返ってこなければ成功しています。

(必要なら) 環境のテスト

さて。

ここまでくれば、きちんと構成されていれば Split-Merge ツールは動きます。
いきなり動かしてもいいのですが、NuGet パッケージには検証用のスクリプトも付いているので、時間に余裕がある方は動かしてみましょぅ。

Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge.0.7.1\content\splitmerge\powershell フォルダで、以下のスクリプトを実行します。

.\ExecuteSampleSplitMerge.ps1 `
    -UserName 'SQL Database への接続ユーザー名' `
    -Password 'SQL Database への接続パスワード' `
    -ShardMapManagerServerName 'SQL Database Server の管理用 URL から "https://" を除いたもの'
    -SplitMergeServiceEndpoint '作成したクラウドサービスの URL (https にすること!)' `
    -CertificateThumbprint 'オレオレ証明書のサムプリント'

構成が正しければ、だらだらーとログが流れます。

ちなみに、この検証スクリプトでは実際に Cloud Service にデプロイした Web ロールと Worker ロールを使って Shard の Split と Merge を実行しています。

ツールの使い方はまた後日ブログにアップしようと思っていますが、つまり、とりあえずスクリプトの中を見ればツール(Web ロールの UI)のどこに何を設定すれば動かせるのか分かりますのでご参考までに。

最後に

環境設定は以上です。

実際にツールを動かすところまで検証済みなのですが、長くなりすぎてしまったのでツールの使い方については次回やります。