Tech Sketch Bucket of Technical Chips by TIS Inc.

Scalrを利用してみた

Pocket

今回は複数のIaaSを同じ画面で管理できるツールScalrを利用して、マルチクラウド環境でのアプリケーションを管理してみます。


Scalrの概要

Amazon Web Serviceを筆頭に数多くのパブリッククラウドが登場し、広く利用されるようになってきました。またCloudStackやOpenStackなどを使って企業内に構築したプライベートクラウドも利用されるようになっています。

パブリッククラウドには必要なリソースをすぐに調達できるメリットがあり、プライベートクラウドにはアプリケーション間のリソース共有と企業のセキュリティポリシーを実現し易いというメリットがあります。そのため通常時はプライベートクラウドのみを利用し、アクセス増加が見込まれる場合はパブリッククラウドにスケールアウトするといった利用が取られることも増えてきました。

しかしクラウドごとに特徴や機能、管理画面/APIが違うためアプリケーション管理者にとっては大きな負担になります。この問題を解決するためマルチクラウド管理ツール/サービスが登場しました。

マルチクラウド管理ツール/サービスの1つに米国Scalr社によって開発されているScalrがあります。Scalrの利用形態はScalr社によるSaaS版、プライベートクラウド向けのオンプレミス版、そしてOSS版があります。

同様なツール/サービスには、一番早くにクラウド管理を開始したRightScale、物理サーバの管理に強いScaleXtreme、セキュリティ・ガバナンスに強みがありDellに買収されたEnStratusがあります。

Scalrのアーキテクチャ

Scalrのアーキテクチャは以下の図の通りです(http://wiki.scalr.com/display/docs/Architectureより引用)。
Scalr12.png

インスタンスの作成やボリュームの管理はクラウドに用意されたAPIをScalr Serverが実行します。Scalrの管理下にあるインスタンスにはScalarizrと呼ばれるエージェントが組み込まれ、Scriptの実行やSNMPを利用したリソース監視などを行います。

SaaS版のScalrはDNSサーバを持ち、サーバに付与するドメイン名の管理も行うことが可能です。SaaS版のScalrでロードバランサーに対するDNSラウンドロビンなど機能をフル活用するにScalrのDNSサーバを利用する必要があります。サーバに付与するドメイン名はScalr社管理ドメインのサブドメインを払い出すことも,ユーザの所有しているドメイン名を登録することもできます。ユーザの所有しているドメイン名を登録する場合、上位ドメインからユーザ所有ドメイン名の権限移譲の手続きが必要となります。

Scalrを使うメリット

1つめは複数のクラウドを同じUIで管理できることです。これは実際の操作を行う管理者への負担を下げることにつながります。

2つめはクラウドごとに請求される金額をリアルタイムにひとまとめに確認できることです。ひとつのシステムで複数のクラウドを利用している場合に重宝するでしょう。

3つめはクラウドの機能差を埋めることです。AWSのELBに相当する機能は他のクラウドでは必ずしも存在するとは限りません。Scalrの利用によってロードバランシングや自動スケールアウトなどをどのクラウドでも実現することができます。

以下にScalrの利用で埋めることができる主な機能をリストアップします。

  • ロードバランシング
  • 自動スケールアウト
  • リソース監視
  • メッセージキューイング
  • ロギング(一部のみ)
  • キャッシング
  • データベースのレプリケーション
  • 自動フェイルオーバ
  • バックアップ
  • バッチスケジューリング
  • DNS管理
  • SSH鍵管理

RoleとFarm

ScalrにはRoleFarmという2つの重要な概念があります。

Roleはデータベース、アプリケーションサーバなどの役割を表すものです。Roleの実態はクラウドごとに用意されたインスタンスのテンプレートです。1つのRoleに対して複数のインスタンスを展開することも可能です。

Scalrが標準で用意しているRoleが多数ありますが、Scalrで管理していないインスタンスをRoleとして取り込むことも可能です。またOSのみのインスタンスへ複数のミドルウェアを組み合わたり、Chefを利用して好きなミドルウェアをインストールするなどで独自のRoleを作成することもできます。

一方Farmはサービス全体を表す単位で複数のRoleで構成されます。1アカウントで複数のFarmを同時に管理することができます。

Farmに適用したRoleに対して、負荷の状況に応じた自動スケールアウトやレプリケーションや自動フェイルオーバ、バックアップなど設定を行うことができます。

Farm単位でサービスの起動停止を行ったり、Farmをコピーすることも可能です。

以下にRoleとFarmの概念をまとめた図を示します。
Scalr10.png

Script

アプリケーションのデプロイやアプリケーションの動作に必要なコンポーネントのインストールなどにはScriptを用います。Scriptの実態はインスタンス上で実行できるシェルスクリプトです。

ScalrのScriptでは"%variable%"と%で文字列を囲むと実行時に変数を渡すことができます。Scriptに外部から渡す変数が存在した場合、GUIでの実行時には下図のようにフォームから変数を入力することが可能です。
Scalr13.png

Scriptは手動での実行だけでなく、インスタンスの起動やIPアドレスの変更など様々なタイミングでScriptを実行するように設定できます。

自動ロードバランシングでのNGINXへの設定変更などいくつかのScriptはScalrの機能を実現するのに用いられています。

管理を自動化する

Scalrから様々な操作を加えることで管理者がインスタンスに直接アクセスすることなく、アプリケーションの動作を制御することが可能です。以下に一例を挙げます。

  • サーバの起動時やアプリケーションのデプロイ前後など様々なタイミングでScriptを実行して、サーバへのミドルウェアのインストールや設定変更する
  • DNSでサービスに付与するドメイン名を管理
  • ApacheへのVirtual Hostの反映
  • 自動スケールアウトするタイミングと最大サーバ数

対応するクラウド

2013/07/31現在、Scalrが対応しているクラウドは以下の通りです。

  • Google CE
  • Amazon EC2
  • Eucalyptus
  • Rackspace
  • Nimbula
  • CloudStack
  • OpenStack
  • IDC Frontier
  • Rackspace Open Cloud(US、UK)

実際に使ってみる

それでは実際にScalrを使ってみましょう。今回はSaaS版を利用します。管理対象のクラウドには事前に契約済みであることが前提です。

SaaSに登録する

Scalr社のコーポレートWebページのトップ画面にある。"Start Free Trial"から登録を行います。
Scalr2.png
名前、メールアドレスなど必要項目を入力して開始してください。

クラウドに接続する

登録したメールアドレスにサイトへのリンクがありますのでそちらから利用を開始してください。サイトにアクセスするとまず、AWSへの接続するかどうかを聞かれます。AWSへ接続する場合は利用するAWSアカウントのAccount Number、Access Key ID、Secret Access Keyを入力してください。
Scalr3.png
AWSへの接続に必要な情報はAWSのコンソールのアカウント名>Security Credentialsから取得・新規作成できます。

Scalr5.png

今回はマルチクラウドでの管理を試すため、IDC Frontierとも接続します。接続クラウドの追加はScalrの管理画面にあるEnvironment 1 > Manageを選択して追加するクラウドを選択します。下図の入力フォームが現れますので、必要項目を入力してください。
Scalr6.png
IDC Frontierとの接続に必要な情報はIDC Frontierのコンソールから取得できます。

複数のクラウドにアプリケーションをデプロイする

ここではScalrのチュートリアルのアプリケーションを利用してScalrの機能を体験してみます。構築はリンク先を参照してください。今回はAWSとIDC Frontierの両方にアプリケーションをデプロイしています。デプロイ後の全体のイメージは下図になります。
Scalr11.png

チュートリアルアプリケーションの構成を説明します。

データベースRoleにはMySQLを利用しています。複数台データベースインスタンスが存在する場合、レプリケーションを利用したマスタースレーブを自動的に構成します。データベースインスタンスのIPはScalrのDNSサーバで管理されていてGUIからは下図のように確認できます。
Scalr14.png

チュートリアルアプリケーションは更新はマスターへ、参照はスレーブへ行います。もしスレーブが複数あった場合、DNSラウンドロビンによる参照負荷分散が自動的に行われます。

アプリケーションRoleにはApacheを利用しています。チュートリアルアプリケーションはPythonで記述されているため、Apacheにモジュールを追加する必要があります。Scalrはアプリケーションをデプロイする前後にScriptを実行することができますので、デプロイ前にモジュールをインストールの実行とデプロイ後のApacheプロセスのリロードを行います。
Scalr15.png
またアプリケーション用のログ出力やPythonのプロセス制御のためにバーチャルホストを設定設定します。
Scalr16.png

ロードバランサーRoleにはNGINXを利用します。ロードバランサーRoleではアプリケーションインスタンスが増えた時に自動的にScriptを流し込み、負荷分散先の設定が変更されます。

Scalrでの自動スケールアウトの設定はロール単位で行われます。下図のようにインスタンス数の最小最大とスケールアウトのアルゴリズムを設定します。
Scalr17.png

全ての設定、アプリケーションのデプロイが終わった後には下図のように複数のクラウドのインスタンスを1つのビューで確認することができます。
Scalr9.png

まとめ

Scalrを使うことで複数のクラウドを透過的に管理できること、クラウドに足りない機能を補ってくれることを紹介しました。

Scalrのロードマップには現在も連携できるプロビジョニングツールChefとのさらなる統合やWindowsインスタンスのサポートなど様々なシーンを想定した機能拡充が進められているようです。

クラウドの利用も当たり前になってきており、そう遠くない未来に皆様のIT環境もマルチクラウド化されることでしょう。今のうちにScalrを試してみてはいかがでしょうか。

参考

Wiki
日本語サイト

エンジニア採用中!私たちと一緒に働いてみませんか?