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の管理画面へ遷移します。
既に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がありません。
「Add farm」ボタンを押し、Farmビルダーを呼び出します。
「Name」にはFarmの名前を入力します。
ここではtest-farmとし、「Save」ボタンを押してFarmを保存します。
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) からの接続をファイアウォールで許可します。
必要に応じてそれらのポート転送を設定します。
そのインスタンスにログインして作業を行います。
例として、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」というアイコンが現れます。
「Build from server」を選択すると「Create role from non-Scalr running instance」という、既存のサーバからRoleを作成するための画面が表示されます。
Role nameには、これから作成するRoleの名前を入力します。
ここではapache-httpdとします。
Cloud locationには、Roleを作成する対象の既存のサーバのゾーンを指定します。
ここではCloudStack / Zone1となっています。
Serverには、Roleを作成する対象の既存のサーバを指定します。
プルダウンメニューにはゾーンから自動的にインスタンスが取得されているので、対象の既存のサーバを選択します。
必要事項を入力したら、「Start building」ボタンを押します。
対象の既存のサーバで実行する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コマンド間で通信が行われます。
自動的にCentOS 6.4でApache Roleと判断されるので、アイコンを押して選択してから「Create role」ボタンを押します。
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.
Apache CloudStack上でスナップショットを作成し、それがRoleとなります。
しばらく待つと、Roleが完成します。
先程のscalarizrコマンドおよびインスタンスは終了してかまいません。
再びFarmビルダーの左の「Add new role」ボタンを押すと、「Application Servers」タブがEmptyではなくなっており、そこには今作成を完了したapache-httpd Roleが登録されています。
Service offering、Network、Shared IPなど必要事項を選択し、「Add to farm」ボタンを押してRoleをFarmに追加します。
オートスケーリングの設定
引き続き、追加したapache-httpd Roleの設定を行います。
左にあるRoleのアイコンを押してください。
ここでオートスケーリングの設定を行ってみます。
負荷が高まれば同一のRoleを持つインスタンスを増やし、収まればインスタンスを終了します。
当然ながら、インスタンス間の連携を行わなければオートスケーリングとして役に立ちませんが、ここでは単純に負荷によるインスタンスの自動起動と自動終了のみに着目することにします。
中央にある「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)にチェックを入れます。
これはテストのために操作用のインスタンスを残しておくためです。
最後に「Save」ボタンを押してRoleへの変更を保存します。
Farmの起動
右の「Actions」プルダウンから「Launch」を選び、対象のFarmを起動します。
FarmのStatusがRunningとなるので、ServersのViewをクリックします。
ServerのStatusがPendingとなり、インスタンスを準備しています。
しばらく待っているとStatusがRunningとなり、インスタンスの起動が完了します。
オートスケーリングの確認
ServersのActionsの左のアイコンを押すとMindTermが起動し、対象のインスタンスにコンソール接続しての操作が可能です。
ここでインスタンスに負荷をかけるため、abコマンド(Apache Bench)を利用します。
このインスタンスはapache-httpd Roleのため、Apache HTTP Serverが起動しており、abコマンドもインストールされています。
自分自身に対し、100万リクエストを50リクエストずつ同時に発行します。
ab -n 1000000 -c 50 http://127.0.0.1/
ただちにロードアベレージが上昇し、オートスケーリング設定に基いて新しいインスタンスが準備されます。
しばらく待つと、新しいインスタンスが起動しました。
今回はテストのため、両者のインスタンスは同じapache-httpd Roleですが特に連携しているわけではありません。
実際に活用するには別途ロードバランサーのRoleなどを準備して負荷分散の設定を行う必要があるでしょう。
一方、Apache Benchが終了して負荷をかけ終わると、徐々にロードアベレージが下がっていき、オートスケーリング設定に基いてインスタンスの停止が行われます。
停止できたインスタンスは削除されます。
この記事では非常に簡単にScalrとApache CloudStackの連携とオートスケーリングについて紹介しました。
詳しくは公式ドキュメントを参考にしてください。