hbstudy#41 × IDCF クラウドハンズオン   Fabric と Monit を使ってオートスケーリングを自作してみよう           2013 年 2 月 2 日             @tafujish
hbstudy#41×IDCF クラウドハンズオン目次0. この文書について .................................................................. 31. IDCF クラウド上に仮...
hbstudy#41×IDCF クラウドハンズオン0. この文書についてこの文書は、hbstudy#41 のハンズオンにて、 フロンティアのクラウドサービス セルフタイプ                          IDC        ...
hbstudy#41×IDCF クラウドハンズオン1. IDCF クラウド上に仮想マシンを作成してみる ※IDCF クラウドの操作方法については、エントリーガイド(pp.21-27)を参照してください1) ポータルサイトから作業用の仮想マシンを...
hbstudy#41×IDCF クラウドハンズオン2. Fabric をインストールして触ってみる1) 作業用 VM(CentOS 6.3)に SSH ログイン  ローカルの環境から、作成した仮想マシンに SSH 接続します。2) Fabric...
hbstudy#41×IDCF クラウドハンズオン【~/fabfile.py】from fabric.api import *def host_type():    run(uname -s)  Fabric は次のように実行します。  # f...
hbstudy#41×IDCF クラウドハンズオン3. Fabric から Redis をインストールしてみる1) EPEL リポジトリを追加し、Redis をインストールオートスケール用のデータ格納先として Redis を使います。Redis...
hbstudy#41×IDCF クラウドハンズオン[localhost] out:Done.Disconnecting from localhost... done.4. Fabric から API 経由で仮想マシンを作成してみる1) リポジト...
hbstudy#41×IDCF クラウドハンズオン2) API キーとシークレットキーを設置API アクセスのための情報を、~/idcfrc に記述します。【~/.idcfrc】[account]host=https://api.noahclo...
hbstudy#41×IDCF クラウドハンズオン3) 仮想マシン作成API ツールを使ってスケールさせる WEB サーバー用仮想マシンを作成します。仮想マシン作成のジョブ投入後、作成完了まで確認し続けます。ID は下記のものを利用し、keyp...
hbstudy#41×IDCF クラウドハンズオン        print "__vmid__,%d" %vm_iddef wait_job(jobid):        while True:            resp = local...
hbstudy#41×IDCF クラウドハンズオンDone.4) /etc/hosts に名前登録作業用 VM の hosts に今作成した仮想マシンの名前を「monitor」として登録します。※以降の手順では、IP アドレスではなく「moni...
hbstudy#41×IDCF クラウドハンズオン5. 作成した仮想マシンを Fabric からセットアップしてみる1) ユーザー追加作成した仮想マシンに、ユーザー:devops を作成し、sudo の実行権限設定をします。【~/fabfile...
hbstudy#41×IDCF クラウドハンズオン【~/fabfile.py】def sshd_config(user=SUDOERS):    comment("/etc/ssh/sshd_config",r"^PermitRootLogin...
hbstudy#41×IDCF クラウドハンズオン4) Redis のクライアントをインストールRedis のパッケージをインストールするのみです。【~/fabfile.py】def setup_redis_cli():       setup...
hbstudy#41×IDCF クラウドハンズオン</HTML>import socketname = socket.gethostname()print html % name今作成したコンテンツを、サーバーにアップロードします。【~/fab...
hbstudy#41×IDCF クラウドハンズオン6) Monit インストールWEB サーバの負荷状況は monit から監視します。まず、Monit の監視設定を作成します。1 分のロードアベレージが 2 を超えたら、Redis にプッシュ...
hbstudy#41×IDCF クラウドハンズオンDone.Disconnecting from monitor... done.7) Web 公開  ポータルサイトで HTTP をロードバランシング設定し公開します。「リソース」>「ネットワー...
hbstudy#41×IDCF クラウドハンズオン6. 自動でスケールアウトしてみる1) cron スクリプト設置Redis の状態を見て、スケールアウトさせるスクリプトを設置します。まず、スクリプトの中で実行する、稼働中の VM の数える F...
hbstudy#41×IDCF クラウドハンズオン}log "-------------------------"queue_count=$(redis-cli llen $queue | awk {print $1})log "queue_c...
hbstudy#41×IDCF クラウドハンズオン2) 負荷をかけますstress コマンドで負荷をかけます。【~/fabfile.py】def setup_stress():    sudo("yum -y install stress")d...
hbstudy#41×IDCF クラウドハンズオン7. [Appendix]ロードバランサーに自動追加時間が余ればこちらもお試しください。自動で作成された仮想マシンが、自動でロードバランサーに組み込まれるところを作ります。ポータルから設定したロ...
hbstudy#41×IDCF クラウドハンズオンスケールスクリプトを修正します。(赤字のところを追記)【~/scale.sh】※http://repo.cloud.idc.jp/Tmp/scale2.sh に置いてます#!/bin/bashq...
hbstudy#41×IDCF クラウドハンズオン            vm_id=$(fab -f ~/fabfile.py -H localhost setup_idcf_vm:displayname=scale_$incrd |grep...
Upcoming SlideShare
Loading in …5
×

Hbstudy41 auto scaling

2,793 views

Published on

#hbstudy

0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,793
On SlideShare
0
From Embeds
0
Number of Embeds
238
Actions
Shares
0
Downloads
45
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Hbstudy41 auto scaling

  1. 1. hbstudy#41 × IDCF クラウドハンズオン Fabric と Monit を使ってオートスケーリングを自作してみよう 2013 年 2 月 2 日 @tafujish
  2. 2. hbstudy#41×IDCF クラウドハンズオン目次0. この文書について .................................................................. 31. IDCF クラウド上に仮想マシンを作成してみる.......................................... 4 1) ポータルサイトから作業用の仮想マシンを作成 .................................... 4 2) SSH 接続するためのネットワーク設定 ............................................. 42. Fabric をインストールして触ってみる................................................ 5 1) 作業用 VM(CentOS 6.3)に SSH ログイン ............................................ 5 2) Fabric をインストール .......................................................... 5 3) 秘密鍵を設置 .................................................................. 5 4) fabfile を作成し実行 ........................................................... 53. Fabric から Redis をインストールしてみる............................................ 7 1) EPEL リポジトリを追加し、Redis をインストール .................................. 74. Fabric から API 経由で仮想マシンを作成してみる ...................................... 8 1) リポジトリを追加し、API ツールインストール ..................................... 8 2) API キーとシークレットキーを設置 ............................................... 9 3) 仮想マシン作成 ............................................................... 10 4) /etc/hosts に名前登録 ......................................................... 125. 作成した仮想マシンを Fabric からセットアップしてみる .............................. 13 1) ユーザー追加 ................................................................. 13 2) sshd 設定 ..................................................................... 13 3) /etc/hosts に名前登録 ......................................................... 14 4) Redis のクライアントをインストール ............................................ 15 5) コンテンツを設置 ............................................................. 15 6) Monit インストール ............................................................ 17 7) Web 公開 ...................................................................... 186. 自動でスケールアウトしてみる ..................................................... 18 1) cron スクリプト設置 ........................................................... 19 2) 負荷をかけます ............................................................... 217. [Appendix]ロードバランサーに自動追加 ............................................. 22 2 / 24
  3. 3. hbstudy#41×IDCF クラウドハンズオン0. この文書についてこの文書は、hbstudy#41 のハンズオンにて、 フロンティアのクラウドサービス セルフタイプ IDC (以下、IDCF クラウド)を用い、オートスケーリング構成を作成する手順です。動作検証は行っておりますが、自己責任でどうぞご利用ください。 3 / 24
  4. 4. hbstudy#41×IDCF クラウドハンズオン1. IDCF クラウド上に仮想マシンを作成してみる ※IDCF クラウドの操作方法については、エントリーガイド(pp.21-27)を参照してください1) ポータルサイトから作業用の仮想マシンを作成 https://noahcloud.jp/ へアクセスし、配布したユーザ名/パスワードにてログインします。 以下の設定で仮想マシンを作成します。 テンプレート [LATEST] CentOS 6.3 64-bit VM タイプ M4 ( Hourly ) 2CPU, 4GB RAM ディスク選択 必要ありません 仮想マシン名 任意 グループ名 任意 SSH Keys SSH 鍵生成 ※生成後、秘密鍵をローカルにコピーしてください2) SSH 接続するためのネットワーク設定 ポータルサイトで TCP22 番を開放するようポートフォーワーディングルールとファイアウォールを設定します。 ※ここでの設定は、仮想マシン作成後(ステータスが Running)になった後に実施してください 「リソース」>「ネットワーク」>「ファイアウォール」にて、TCP22 番を開けます。 この後、HTTP も使うので、TCP80 番も開けてください。 「リソース」>「ネットワーク」>「ポートフォーワーディング」にて、TCP22 番を転送します。 ※ネットワーク設定については、エントリーガイド(pp.29-31)を参照してください 4 / 24
  5. 5. hbstudy#41×IDCF クラウドハンズオン2. Fabric をインストールして触ってみる1) 作業用 VM(CentOS 6.3)に SSH ログイン ローカルの環境から、作成した仮想マシンに SSH 接続します。2) Fabric をインストール 以下のコマンドで、Python 他必要なパッケージをインストールします。# yum install python python-devel gcc -y 次に、pip(Python パッケージ管理ツール)をインストールします。# curl http://python-distribute.org/distribute_setup.py | python# curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python Fabric のインストールは超カンタン。# pip install fabric fexpect3) 秘密鍵を設置 Fabric は SSH で接続します。 仮想マシン作成時に保管した SSH 秘密鍵を、 作業用 VM に設置します。# vi ~/.ssh/id_rsa~保存した秘密鍵の内容をコピペ~# chmod 600 ~/.ssh/id_rsa※SCP 等のファイル転送でもかまいません4) fabfile を作成し実行 fabfile.py という名前でファイルを作成し、以下の内容を記述します。 今後は、このファイルに追記していくことになります。 ここでの内容は、「uname –s」コマンドでホストタイプを確認する host_type 関数を作成します。 5 / 24
  6. 6. hbstudy#41×IDCF クラウドハンズオン【~/fabfile.py】from fabric.api import *def host_type(): run(uname -s) Fabric は次のように実行します。 # fab –H [ホスト名または IP アドレス] <コマンド># fab -H localhost host_type[localhost] Executing task host_type[localhost] run: uname -s[localhost] out: Linux[localhost] out:Done.Disconnecting from localhost... done. コマンドオプション等詳細はヘルプをどうぞ。 # fab --help 複数のサーバを指定して実行する場合は、「,」で繋げます。 # fab –H localhost,host1,host2 check_hostname 6 / 24
  7. 7. hbstudy#41×IDCF クラウドハンズオン3. Fabric から Redis をインストールしてみる1) EPEL リポジトリを追加し、Redis をインストールオートスケール用のデータ格納先として Redis を使います。Redis は EPEL リポジトリからパッケージインストールします。Fabric のコードは、fabfile.py に追記していきます。【~/fabfile.py】from fabric.contrib.files import *def setup_repo_epel(): sudo(""" yum -y localinstall http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm """)def setup_redis(): setup_repo_epel() sudo(""" yum -y install redis """) comment("/etc/redis.conf",r"bind 127.0.0.1") sudo(""" chkconfig redis on service redis restart """)※epel-release-6-8.noarch.rpm がなければ最新のバージョンに置き換えてくださいFabric を実行します。Redis サービスが起動できれば成功。# fab -H localhost setup_redis[localhost] Executing task setup_redis[localhost] sudo: yum -y localinstallhttp://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm~略~[localhost] out: redis-server を起動中: [ OK ][localhost] out: 7 / 24
  8. 8. hbstudy#41×IDCF クラウドハンズオン[localhost] out:Done.Disconnecting from localhost... done.4. Fabric から API 経由で仮想マシンを作成してみる1) リポジトリを追加し、API ツールインストールIDCF から提供している CloudStack API を実行するためのコマンドラインツールをインストールするため、IDCF のリポジトリ追加と API ツールを yum インストールします。【~/fabfile.py】def install_idcf_api(): run(""" yum -y localinstall http://repo.cloud.idc.jp/Linux/CentOS/6/idc/x86_64/idcf-release-8-0.0.idcf.el6.noarch.rpm yum -y install idcf.compute -y idcf-compute-api -v """)Fabric を実行します。idcf-compute-api コマンドを実行してバージョンがでれば成功。# fab -H localhost install_idcf_api[localhost] Executing task install_idcf_api[localhost] run: yum -y localinstall~略~[localhost] out: idcf-compute-api v0.10.0[localhost] out:Done.Disconnecting from localhost... done. 8 / 24
  9. 9. hbstudy#41×IDCF クラウドハンズオン2) API キーとシークレットキーを設置API アクセスのための情報を、~/idcfrc に記述します。【~/.idcfrc】[account]host=https://api.noahcloud.jp/portal/client/apiapi_key=ここに API キーを入れるsecret_key=ここにシークレットキーを入れるAPI キーおよび秘密鍵は、IDCF クラウドのポータル右上の「マイプロファイル」をクリックすると表示されます。(最新のエンドポイントの情報は FAQ を参照します) 9 / 24
  10. 10. hbstudy#41×IDCF クラウドハンズオン3) 仮想マシン作成API ツールを使ってスケールさせる WEB サーバー用仮想マシンを作成します。仮想マシン作成のジョブ投入後、作成完了まで確認し続けます。ID は下記のものを利用し、keypare(SSH 秘密鍵)は、作業用仮想マシン作成時に作成した鍵の名前を指定します。 テンプレート:[LATEST] CentOS 6.3 64-bit 2008 VM タイプ:S2 ( Hourly ) 1CPU, 2GB RAM 22 ゾーン:jp-east-t1v 1【~/fabfile.py】import jsonimport os,sys,timeSCALE_GROUP = "sclgrp"def setup_idcf_vm(displayname="scale"): resp = local(""" idcf-compute-api deployVirtualMachine --keypair {keypair} --displayname {displayname} --group {group} --templateid {templateid} --serviceofferingid {serviceofferingid} --zoneid {zoneid} """.format(keypair="testkey", #your ssh-key name displayname=displayname, group=SCALE_GROUP, templateid="2008", #(2008) [LATEST] CentOS 6.3 64-bit serviceofferingid="22", #(22) S2 zoneid="1"),capture=True) print resp retval = json.loads(resp, UTF-8) ret = retval["deployvirtualmachineresponse"] vm_id = ret["id"] jobid = ret["jobid"] wait_job(jobid) 10 / 24
  11. 11. hbstudy#41×IDCF クラウドハンズオン print "__vmid__,%d" %vm_iddef wait_job(jobid): while True: resp = local(""" idcf-compute-api queryAsyncJobResult --jobid {jobid} """.format(jobid=jobid),capture=True) retval = json.loads(resp, UTF-8) ret = retval["queryasyncjobresultresponse"] if ret["jobstatus"] == 1: print resp break else: time.sleep(30)Fabric を実行します。仮想マシンができあがり、IP アドレス等の設定情報が返ってくれば成功。# fab -H localhost setup_idcf_vm:displayname=scale00[localhost] Executing task setup_idcf_vm~略~[localhost] local: idcf-compute-api queryAsyncJobResult --jobid 123294{ "queryasyncjobresultresponse": { "jobid": 123294, "jobprocstatus": 0, "jobresult": { "virtualmachine": { ~略~ "jobresultcode": 0, "jobresulttype": "object", "jobstatus": 1 }} 11 / 24
  12. 12. hbstudy#41×IDCF クラウドハンズオンDone.4) /etc/hosts に名前登録作業用 VM の hosts に今作成した仮想マシンの名前を「monitor」として登録します。※以降の手順では、IP アドレスではなく「monitor」という名前を使います【~/fabfile.py】def setup_hosts(ip=None,host_name=None): print ip print host_name if ip and host_name: append("/etc/hosts", ["{0} {1}".format(ip,host_name)], use_sudo=True)Fabric を実行します。 アドレスは、 IP 今作成された仮想マシンの IP アドレスに変更してください。# fab -H localhost setup_hosts:ip=10.1.2.124,host_name=monitor 12 / 24
  13. 13. hbstudy#41×IDCF クラウドハンズオン5. 作成した仮想マシンを Fabric からセットアップしてみる1) ユーザー追加作成した仮想マシンに、ユーザー:devops を作成し、sudo の実行権限設定をします。【~/fabfile.py】SUDOERS = "devops"def setup_sudoers(user=SUDOERS): run(""" useradd {user} usermod -a -G wheel {user} mkdir -p -m 700 /home/{user}/.ssh cp /root/.ssh/authorized_keys /home/{user}/.ssh/ chown -R {user}:{user} /home/{user} chmod 600 /home/{user}/.ssh/authorized_keys """.format(user=user)) uncomment("/etc/pam.d/su",r"auths+sufficients+pam_wheel.sos+trust use_uid") uncomment("/etc/sudoers",r"%wheelsALL=(ALL)s+NOPASSWD:sALL")Fabric を実行します。devops ユーザーで SSH ログインできれば成功。# fab -H monitor setup_sudoers[monitor] Executing task setup_sudoers~略~Done.Disconnecting from monitor... done.# ssh devops@monitor~略~[devops@ホスト名 ~]$[devops@ホスト名 ~]$ exit#2) sshd 設定作成した仮想マシンに、sshd の設定をします。root ログイン禁止、空のパスワード禁止。 13 / 24
  14. 14. hbstudy#41×IDCF クラウドハンズオン【~/fabfile.py】def sshd_config(user=SUDOERS): comment("/etc/ssh/sshd_config",r"^PermitRootLogin yes") uncomment("/etc/ssh/sshd_config",r"PermitEmptyPasswords no") append("/etc/ssh/sshd_config", ["PermitRootLogin no", "AllowUsers {0}".format(user)]) run("service sshd restart")Fabric を実行します。実際にログインして確認しても OK。失敗して二度とログインできなくなったら仮想マシンを再作成!# fab -H monitor sshd_config[monitor] Executing task sshd_config~略~[monitor] out: sshd を起動中: [ OK ][monitor] out:[monitor] out:Done.Disconnecting from monitor... done.3) /etc/hosts に名前登録作成した仮想マシンの hosts にデータ格納先(Redis)サーバを「redis-server」として登録します。Fabric は先ほど作ったものを利用します。※IP アドレスは、作業用 VM の IP アドレスに変更してください。# ifconfig eth0~略~# fab -u devops -H monitor setup_hosts:ip=10.1.1.94,host_name=redis-server[monitor] Executing task setup_hosts10.1.2.23redis-server[monitor] sudo: echo 10.1.2.23 redis-server >> /etc/hostsDone.Disconnecting from monitor... done. 14 / 24
  15. 15. hbstudy#41×IDCF クラウドハンズオン4) Redis のクライアントをインストールRedis のパッケージをインストールするのみです。【~/fabfile.py】def setup_redis_cli(): setup_repo_epel() sudo(""" yum -y install redis """)# fab -u devops -H monitor setup_redis_cli[monitor] Executing task setup_hosts~略~Done.Disconnecting from monitor... done.5) コンテンツを設置Python CGI をコンテンツとして作成します。今回はホスト名を表示するだけ。【~/hello_py.cgi】※http://repo.cloud.idc.jp/Tmp/hello_py.cgi に置いてます#!/usr/bin/python# -*- coding: utf-8 -*-html = <HTML><HEAD><TITLE>test</TITLE></HEAD><BODY><HR><DIV ALIGN="center"><H1>%s</H1><HR></DIV></BODY> 15 / 24
  16. 16. hbstudy#41×IDCF クラウドハンズオン</HTML>import socketname = socket.gethostname()print html % name今作成したコンテンツを、サーバーにアップロードします。【~/fabfile.py】from fabric.operations import *def setup_cgi(): sudo(""" yum -y install httpd chkconfig httpd on service httpd start """) put("~/hello_py.cgi","/var/www/cgi-bin/hello_py.cgi",use_sudo=True) sudo("chmod 755 /var/www/cgi-bin/hello_py.cgi") run("curl -s http://localhost/cgi-bin/hello_py.cgi | sed -e s/<[^>]*>//g")# fab -u devops -H monitor setup_cgi~略~[monitor] out: i-1063-23685-VM[monitor] out:Done.Disconnecting from monitor... done. 16 / 24
  17. 17. hbstudy#41×IDCF クラウドハンズオン6) Monit インストールWEB サーバの負荷状況は monit から監視します。まず、Monit の監視設定を作成します。1 分のロードアベレージが 2 を超えたら、Redis にプッシュします。【~/loadavg.rc】check system loadavg if loadavg (1min) > 2 then exec "/usr/bin/redis-cli -h %(redis_server)s rpushscale:%(scale_group)s:up %(host_name)s"※2 行目の if からは 1 行で書いてください次に Monit をインストールする Fabfile を作成します。【~/fabfile.py】def hostname(): return run("hostname")def setup_monit(): setup_repo_epel() sudo(""" yum -y install monit """) upload_template("loadavg.rc","/etc/monit.d",use_sudo=True,backup=False, context=dict(redis_server="redis-server", host_name=hostname(), scale_group=SCALE_GROUP)) sudo(""" chkconfig monit on service monit restart """)Fabric を実行します。Monit のサービスが起動できれば成功。# fab -u devops -H monitor setup_monit~略~[monitor] out: monit を起動中: monit: generated unique Monit id ~ and stored to/root/.monit.id[monitor] out: [ OK ] 17 / 24
  18. 18. hbstudy#41×IDCF クラウドハンズオンDone.Disconnecting from monitor... done.7) Web 公開 ポータルサイトで HTTP をロードバランシング設定し公開します。「リソース」>「ネットワーク」>「ロードバランサー」にて、80 番のルールを作成し、作成したサーバを分散先として登録します。※ロードバランサー設定については、エントリーガイド(pp.32)を参照してくださいhttp://【公開 IP アドレス】/cgi-bin/hello_py.cgiへ接続し動作確認。 18 / 24
  19. 19. hbstudy#41×IDCF クラウドハンズオン6. 自動でスケールアウトしてみる1) cron スクリプト設置Redis の状態を見て、スケールアウトさせるスクリプトを設置します。まず、スクリプトの中で実行する、稼働中の VM の数える Fabric を作成します。【~/fabfile.py】def count_idcf_vms(): with hide(running, stdout, stderr): resp = local(""" idcf-compute-api listVirtualMachines --state Running """,capture=True) retval = json.loads(resp,UTF-8) ret = retval["listvirtualmachinesresponse"] count = ret["count"] print count動作を確認します。# fab -u devops -H monitor count_idcf_vms[monitor] Executing task count_idcf_vms2Done.スケールを制御するスクリプトを設置します。【~/scale.sh】※http://repo.cloud.idc.jp/Tmp/scale.sh に置いてます#!/bin/bashqueue="scale:sclgrp:up"lock_key="scale:sclgrp:lock"incrd_key="scale:sclgrp:incrd"path="`dirname $0`"log_file="scale.log"log() { echo [`date`] $1 >> ${path}/${log_file} 19 / 24
  20. 20. hbstudy#41×IDCF クラウドハンズオン}log "-------------------------"queue_count=$(redis-cli llen $queue | awk {print $1})log "queue_count: $queue_count"if [ $queue_count -gt 0 ]; then vm_name=$(redis-cli lpop $queue | awk {print $1}) log "queued by: $vm_name" locked=$(redis-cli get $lock_key | awk {print $1}) incrd=$(redis-cli get $incrd_key | awk {print $1}) if [ -z "$locked" ]; then locked=0 fi if [ -z "$incrd" ]; then incrd=0 fi log "locked: $locked" log "incrd: $incrd" vm_count=$(fab -f ~/fabfile.py -H localhost count_idcf_vms | awk NR==2 {print $0}) log "vm_count: $vm_count" if [ $locked -lt 1 ]; then redis-cli incr $lock_key redis-cli incr $incrd_key fab -f ~/fabfile.py -H localhost setup_idcf_vm:displayname=scale_$incrd redis-cli set $lock_key 0 redis-cli del $queue else log "not deploying new vm" fifi# cd ~# chmod +x scale.sh# crontab –e*/3 * * * * /root/scale.sh 20 / 24
  21. 21. hbstudy#41×IDCF クラウドハンズオン2) 負荷をかけますstress コマンドで負荷をかけます。【~/fabfile.py】def setup_stress(): sudo("yum -y install stress")def do_stress(): run("stress --cpu 8 --timeout 10m")stress コマンドをインストール後、実行します。# fab -u devops -H monitor setup_stress# fab -u devops -H monitor do_stress以上で、負荷がかかり始め、数分で VM が作成されるはずです。ポータルサイトをご覧ください。VM が作られるまでの過程を確認するには、monitor サーバーで Monit の動作を確認。SSH で別セッションを張ってみてください。[devops@ホスト名 ~]$ tail -f /var/log/monit[JST Dec 6 16:11:33] error : loadavg loadavg(1min) of 3.5 matches resource limit[loadavg(1min)>2.0][JST Dec 6 16:11:33] info : loadavg exec: /usr/bin/redis-cliredis-server でスケールスクリプトの動作を確認。# tail -f ~/scale.log[Thu Dec 6 18:34:01 JST 2012] -------------------------[Thu Dec 6 18:34:01 JST 2012] queue_count: 0[Thu Dec 6 18:35:01 JST 2012] -------------------------[Thu Dec 6 18:35:01 JST 2012] queue_count: 1[Thu Dec 6 18:35:01 JST 2012] queued by: i-1063-16861-VM[Thu Dec 6 18:35:01 JST 2012] locked: 0[Thu Dec 6 18:35:01 JST 2012] incrd: 0[Thu Dec 6 18:35:02 JST 2012] vm_count: 2ポータルから scale_0 という仮想マシンができていることを確認してください。作成されていれば成功。 21 / 24
  22. 22. hbstudy#41×IDCF クラウドハンズオン7. [Appendix]ロードバランサーに自動追加時間が余ればこちらもお試しください。自動で作成された仮想マシンが、自動でロードバランサーに組み込まれるところを作ります。ポータルから設定したロードバランサーのルール ID を確認します。# idcf-compute-api listLoadBalancerRules{ "listloadbalancerrulesresponse": { "count": 1, "loadbalancerrule": [ { "account": "hbstudy1", "algorithm": "roundrobin", "cidrlist": "", "domain": "70000001277", "domainid": 1278, "id": 42849,以下略ロードバランサーに追加する Fabric を作成します。【~/fabfile.py】def add_balancing_server(vmid): resp = local(""" idcf-compute-api assignToLoadBalancerRule --id {id} --virtualmachineids {virtualmachineids} """.format(id="42849", #your ID of the load balancer rule virtualmachineids=vmid),capture=True) print resp※ルールの ID は先に確認したものに置き換えてください。 22 / 24
  23. 23. hbstudy#41×IDCF クラウドハンズオンスケールスクリプトを修正します。(赤字のところを追記)【~/scale.sh】※http://repo.cloud.idc.jp/Tmp/scale2.sh に置いてます#!/bin/bashqueue="scale:sclgrp:up"lock_key="scale:sclgrp:lock"incrd_key="scale:sclgrp:incrd"path="`dirname $0`"log_file="scale.log"log() { echo [`date`] $1 >> ${path}/${log_file}}log "-------------------------"queue_count=$(redis-cli llen $queue | awk {print $1})log "queue_count: $queue_count"if [ $queue_count -gt 0 ]; then vm_name=$(redis-cli lpop $queue | awk {print $1}) log "queued by: $vm_name" locked=$(redis-cli get $lock_key | awk {print $1}) incrd=$(redis-cli get $incrd_key | awk {print $1}) if [ -z "$locked" ]; then locked=0 fi if [ -z "$incrd" ]; then incrd=0 fi log "locked: $locked" log "incrd: $incrd" vm_count=$(fab -f ~/fabfile.py -H localhost count_idcf_vms | awk NR==2 {print $0}) log "vm_count: $vm_count" if [ $locked -lt 1 ]; then redis-cli incr $lock_key redis-cli incr $incrd_key# fab -f ~/fabfile.py -H localhost setup_idcf_vm:displayname=scale_$incrd 23 / 24
  24. 24. hbstudy#41×IDCF クラウドハンズオン vm_id=$(fab -f ~/fabfile.py -H localhost setup_idcf_vm:displayname=scale_$incrd |grep "__vmid__" | cut -d, -f2) fab -f ~/fabfile.py -H localhost add_balancing_server:vmid=$vm_id redis-cli set $lock_key 0 redis-cli del $queue else log "not deploying new vm" fifiこの後、負荷をかけて自動で作成された仮想マシンはロードバランサーに追加されます。ポータルからロードバランサーの設定を確認してみてください。この状態では、追加された仮想マシンでは httpd が動おらず、ヘルスチェックに失敗するので HTTPの通信は分散されません。httpd のインストール、コンテンツのアップロードが必要です。まだ時間が余っている人は考えてみてはいかがでしょうか。。。。ここまでの fabfile は以下の URL に置いています。http://repo.cloud.idc.jp/Tmp/fabfile.py 24 / 24

×