fbpx

Scalr.jpでApache CloudStackを管理する #ScalrJP

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

Scalrとは

Scalrとは米国Scalr, Inc. が提供するマルチクラウド管理ソリューションです。
日本にもScalr.jpとして拠点を構えています。
詳しくはOSSクラウド連携ツール(Cloud Federation Tool)『Scalr』も参照してください。

Scalrの登録

SaaS版Scalrには30日間の無料試用期間があります。
Scalr.jpの右上の「Start Free Trial」ボタンから、氏名、メールアドレスなど必要事項を入力し、登録を行ってください。
なお、Scalr.comとは情報が共有されていないことに留意してください。

Apache CloudStackとの連携

登録を行うとScalr.jpの管理画面へ遷移します。

001-cs-create-environment-1

既にCloudStackを構築し、アカウントを所持しているとします。
Scalrで管理する対象のCloudStackのAPI URL、API key、Secret Keyを入力し、「Save keys」ボタンを押してください。
キーに間違いがなければ、Scalrの管理単位の1つであるEnvironmentが作成されます。
デフォルト名はEnvironment 1です。

なお、ここではオープンクラウド実証実験タスクフォースOpenIaaS研究会によるApache CloudStackテスト環境を利用しています。

Farmの作成

Farmとは、Scalrの管理単位の1つで、システム全体を表す管理単位です。
例えば、「ブログサイト」はFarmです。

画面上部のナビゲーションバーの左上の「Farms」ボタンを押すと、現在のFarm一覧が表示されます。
現時点では1つもFarmがありません。

002-farms

「Add farm」ボタンを押し、Farmビルダーを呼び出します。

003-farm-builder

「Name」にはFarmの名前を入力します。
ここではtest-farmとし、「Save」ボタンを押してFarmを保存します。

004-farm-configure

Farmが追加されました。
右の「Actions」プルダウンから「Configure」を選ぶと、対象のFarmビルダーに戻ります。

Roleの追加

Roleとは、Scalrの管理単位の1つで、システムの構成要素を表す管理単位です。
例えば、「ブログサイト」はFarmで、それを構成するウェブサーバ、ブログアプリケーション、バックエンドデータベースの1つ1つがRoleです。

さて、ScalrでAmazon EC2を管理する場合には、Scalr, Inc.が準備しているさまざまなRoleのAMIを利用することができました。
しかし、プライベートクラウドであるApache CloudStackには当然ながらRoleが1つもありません。
そのため、あらかじめRoleを作成しておく必要があります。

Roleの作成

Apache CloudStack上でRoleの基礎となるインスタンスを作成します。
ここではscalr-tmpl-centos64というCentOS 6.4 (x86_64)を基本インストールしたインスタンスを対象としています。

そのインスタンスに対して、8010/tcp、8013/tcp、8014/tcpポートに対してmy.scalr.jp (202.144.229.29/32) からの接続をファイアウォールで許可します。

002-cs-firewall

必要に応じてそれらのポート転送を設定します。

003-cs-portforward

そのインスタンスにログインして作業を行います。

例として、Apache HTTP ServerのRoleとするので、httpdパッケージをインストールします。

[root@scalr-tmpl-centos64 ~]# yum install httpd
	:
	:
	:
================================================================================
 Package             Arch         Version                      Repository  Size
================================================================================
Installing:
 httpd               x86_64       2.2.15-29.el6.centos         base       821 k
Installing for dependencies:
 apr                 x86_64       1.3.9-5.el6_2                base       123 k
 apr-util            x86_64       1.3.9-3.el6_0.1              base        87 k
 apr-util-ldap       x86_64       1.3.9-3.el6_0.1              base        15 k
 httpd-tools         x86_64       2.2.15-29.el6.centos         base        73 k
 mailcap             noarch       2.1.31-2.el6                 base        27 k

Transaction Summary
================================================================================
Install       6 Package(s)

Total download size: 1.1 M
Installed size: 3.6 M
Is this ok [y/N]: y
	:
	:
	:
Installed:
  httpd.x86_64 0:2.2.15-29.el6.centos                                           

Dependency Installed:
  apr.x86_64 0:1.3.9-5.el6_2                                                    
  apr-util.x86_64 0:1.3.9-3.el6_0.1                                             
  apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1                                        
  httpd-tools.x86_64 0:2.2.15-29.el6.centos                                     
  mailcap.noarch 0:2.1.31-2.el6                                                 

Complete!
[root@scalr-tmpl-centos64 ~]#

Scalr, Inc.のyumレポジトリを追加するためのパッケージをhttp://rpm.scalr.net/rpm/からインストールします。

[root@scalr-tmpl-centos64 ~]# rpm -Uvh http://rpm.scalr.net/rpm/scalr-release-2-1.noarch.rpm
http://rpm.scalr.net/rpm/scalr-release-2-1.noarch.rpm を取得中
準備中...                ########################################### [100%]
   1:scalr-release          ########################################### [100%]
[root@scalr-tmpl-centos64 ~]#

yumコマンドでscalarizr-cloudstackをインストールします。

[root@scalr-tmpl-centos64 ~]# yum install scalarizr-cloudstack
	:
	:
	:
================================================================================
 Package                   Arch        Version                 Repository  Size
================================================================================
Installing:
 scalarizr-cloudstack      noarch      2.5.1-1.el6             scalr      5.6 k
Installing for dependencies:
 PyYAML                    x86_64      3.09-5.el6              scalr      158 k
 libyaml                   x86_64      0.1.3-1.el6             scalr       52 k
 lsscsi                    x86_64      0.23-2.el6              base        38 k
 m2crypto                  x86_64      0.20.2-9.el6            base       471 k
 pexpect                   noarch      2.3-6.el6               base       147 k
 pysnmp                    noarch      4.2.4-1.el6             scalr      446 k
 python-cloudstack         noarch      0.2.3-1.el6             scalr       35 k
 python-prettytable        noarch      0.5-1.el6               scalr       14 k
 python-pyasn1             noarch      0.1.7-1.el6             scalr       70 k
 python-pychef             noarch      0.2.2-1                 scalr       54 k
 python-pymysql            noarch      0.5-1.el6               scalr       90 k
 python-pysnmp-mibs        noarch      0.0.8a-1.el6            scalr      3.4 M
 python-setuptools         noarch      0.6.10-3.el6            base       336 k
 rsync                     x86_64      3.0.6-9.el6_4.1         base       334 k
 scalarizr-base            noarch      2.5.1-1.el6             scalr      1.5 M
 scalr-upd-client          noarch      0.4.10-1.el6            scalr       53 k

Transaction Summary
================================================================================
Install      17 Package(s)

Total download size: 7.2 M
Installed size: 32 M
Is this ok [y/N]: y
	:
	:
	:
Installed:
  scalarizr-cloudstack.noarch 0:2.5.1-1.el6                                     

Dependency Installed:
  PyYAML.x86_64 0:3.09-5.el6                                                    
  libyaml.x86_64 0:0.1.3-1.el6                                                  
  lsscsi.x86_64 0:0.23-2.el6                                                    
  m2crypto.x86_64 0:0.20.2-9.el6                                                
  pexpect.noarch 0:2.3-6.el6                                                    
  pysnmp.noarch 0:4.2.4-1.el6                                                   
  python-cloudstack.noarch 0:0.2.3-1.el6                                        
  python-prettytable.noarch 0:0.5-1.el6                                         
  python-pyasn1.noarch 0:0.1.7-1.el6                                            
  python-pychef.noarch 0:0.2.2-1                                                
  python-pymysql.noarch 0:0.5-1.el6                                             
  python-pysnmp-mibs.noarch 0:0.0.8a-1.el6                                      
  python-setuptools.noarch 0:0.6.10-3.el6                                       
  rsync.x86_64 0:3.0.6-9.el6_4.1                                                
  scalarizr-base.noarch 0:2.5.1-1.el6                                           
  scalr-upd-client.noarch 0:0.4.10-1.el6                                        

Complete!
[root@scalr-tmpl-centos64 ~]# 

ここで、Scalrの管理画面に戻ります。

Farmビルダーの左の「Add new role」ボタンを押すと、Roleが1つもないので、「Build from server」というアイコンが現れます。

004-cs-build-from-server

「Build from server」を選択すると「Create role from non-Scalr running instance」という、既存のサーバからRoleを作成するための画面が表示されます。

005-cs-create-role-from-non-scalr-running-instance

Role nameには、これから作成するRoleの名前を入力します。
ここではapache-httpdとします。

006-cs-please-select-server

Cloud locationには、Roleを作成する対象の既存のサーバのゾーンを指定します。
ここではCloudStack / Zone1となっています。

Serverには、Roleを作成する対象の既存のサーバを指定します。
プルダウンメニューにはゾーンから自動的にインスタンスが取得されているので、対象の既存のサーバを選択します。

必要事項を入力したら、「Start building」ボタンを押します。

007-cs-launch-scalarizr

対象の既存のサーバで実行するscalarizrコマンドが表示されるので、コピー&ペーストします。
指示があるまでコマンドおよびインスタンスを停止しないでください。

[root@scalr-tmpl-centos64 ~]# scalarizr --import -y -o server-id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX -o role-name=apache-httpd -o crypto-key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o platform=cloudstack -o queryenv-url=https://my.scalr.jp/query-env -o messaging-p2p.producer-url=https://my.scalr.jp/messaging -o env-id=43 -o region=Zone1 -o scalr-id=5bf2ebf5
2014-02-12 16:24:28,645 - INFO - scalarizr.app - [pid: 1703] Starting scalarizr 2.5.1
Starting import process...
Don't terminate Scalarizr until Scalr will create the new role
2014-02-12 16:24:28,646 - INFO - scalarizr.config - State: importing
2014-02-12 16:24:29,846 - INFO - scalarizr.app - Starting API server on http://0.0.0.0:8010
2014-02-12 16:24:29,880 - INFO - scalarizr.messaging.p2p.consumer - Building message consumer server on 0.0.0.0:8013
2014-02-12 16:24:30,068 - INFO - scalarizr.handlers.lifecycle - Server will be imported into Scalr

コマンドを実行したら「Confirm Scalarizr installation and launch」ボタンを押します。

Scalr.jpと対象の既存のサーバで実行しているscalarizrコマンド間で通信が行われます。

008-cs-role-creation-progress

自動的にCentOS 6.4でApache Roleと判断されるので、アイコンを押して選択してから「Create role」ボタンを押します。

009-cs-select-scalr-automation

Broadcast message from root@scalr-tmpl-centos64 (Wed Feb 12 16:39:30 2014):

Server is going to rebundle
2014-02-12 16:39:30,147 - INFO - scalarizr.config - State: rebundling
2014-02-12 16:39:30,531 - INFO - scalarizr.handlers.rebundle - Creating ROOT volume snapshot (volume: 01a445e0-e28a-4a02-ba70-423e23e05cf3)
2014-02-12 16:41:14,268 - INFO - scalarizr.handlers.rebundle - ROOT volume snapshot created (snapshot: 43795b36-36f9-4278-8879-76aaf6d65e1b)
2014-02-12 16:41:14,498 - INFO - scalarizr.handlers.rebundle - Creating image
2014-02-12 16:42:07,827 - INFO - scalarizr.handlers.rebundle - Image created (template: e35c8baa-2355-4ada-ada6-493ac83ad550)
2014-02-12 16:42:07,983 - INFO - scalarizr.config - State: importing
2014-02-12 16:42:08,457 - INFO - scalarizr.handlers.rebundle - Rebundle complete! If you imported this server to Scalr, you can terminate Scalarizr now.

010-cs-creating-image

Apache CloudStack上でスナップショットを作成し、それがRoleとなります。

011-cs-building-role

しばらく待つと、Roleが完成します。
先程のscalarizrコマンドおよびインスタンスは終了してかまいません。

012-cs-role-creation-complete

再びFarmビルダーの左の「Add new role」ボタンを押すと、「Application Servers」タブがEmptyではなくなっており、そこには今作成を完了したapache-httpd Roleが登録されています。

013-cs-add-role

Service offering、Network、Shared IPなど必要事項を選択し、「Add to farm」ボタンを押してRoleをFarmに追加します。

オートスケーリングの設定

引き続き、追加したapache-httpd Roleの設定を行います。
左にあるRoleのアイコンを押してください。

014-cs-edit-role

ここでオートスケーリングの設定を行ってみます。
負荷が高まれば同一のRoleを持つインスタンスを増やし、収まればインスタンスを終了します。
当然ながら、インスタンス間の連携を行わなければオートスケーリングとして役に立ちませんが、ここでは単純に負荷によるインスタンスの自動起動と自動終了のみに着目することにします。

中央にある「Add scaling rule」ボタンを押すと、スケーリングの方法を選択するプルダウンメニューが表示されます。

015-cs-add-scaling-rule

ここでは「LoadAverages」を選択します。

テストを簡単にするため、スケーリングに用いるロードアベレージの値は1分のものを(Use 1 minute(s) load averages for scaling)、インスタンスを解放してスケールインする閾値をロードアベレージ1以下(Scale in (release instances) when LA goes under 1)、インスタンスを追加してスケールアウトする閾値をロードアベレージ2以上(Scale out (add more instances) when LA goes over 2)とします。

また、ダウンスケール後に最も古いインスタンスを保持する(Keep oldest instance running after scaling down)にチェックを入れます。
これはテストのために操作用のインスタンスを残しておくためです。

016-cs-edit-scaling-rule

最後に「Save」ボタンを押してRoleへの変更を保存します。

Farmの起動

右の「Actions」プルダウンから「Launch」を選び、対象のFarmを起動します。

017-cs-launch-farm

FarmのStatusがRunningとなるので、ServersのViewをクリックします。

018-cs-running-farm

ServerのStatusがPendingとなり、インスタンスを準備しています。

019-cs-pending-server

しばらく待っているとStatusがRunningとなり、インスタンスの起動が完了します。

020-cs-running-server

オートスケーリングの確認

ServersのActionsの左のアイコンを押すとMindTermが起動し、対象のインスタンスにコンソール接続しての操作が可能です。

021-cs-mindterm-login

ここでインスタンスに負荷をかけるため、abコマンド(Apache Bench)を利用します。
このインスタンスはapache-httpd Roleのため、Apache HTTP Serverが起動しており、abコマンドもインストールされています。
自分自身に対し、100万リクエストを50リクエストずつ同時に発行します。

ab -n 1000000 -c 50 http://127.0.0.1/

ただちにロードアベレージが上昇し、オートスケーリング設定に基いて新しいインスタンスが準備されます。

022-cs-autoscale-up-pending

しばらく待つと、新しいインスタンスが起動しました。

023-cs-autoscale-up-running

今回はテストのため、両者のインスタンスは同じapache-httpd Roleですが特に連携しているわけではありません。
実際に活用するには別途ロードバランサーのRoleなどを準備して負荷分散の設定を行う必要があるでしょう。

一方、Apache Benchが終了して負荷をかけ終わると、徐々にロードアベレージが下がっていき、オートスケーリング設定に基いてインスタンスの停止が行われます。

024-cs-autoscale-down-pending

停止できたインスタンスは削除されます。

025-cs-autoscale-down-terminated

この記事では非常に簡単にScalrとApache CloudStackの連携とオートスケーリングについて紹介しました。
詳しくは公式ドキュメントを参考にしてください。

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA