hbstudy#41 × IDCF クラウドハンズオン



   Fabric と Monit を使って
オートスケーリングを自作してみよう




           2013 年 2 月 2 日




             @tafujish
hbstudy#41×IDCF クラウドハンズオン

目次
0. この文書について .................................................................. 3
1. IDCF クラウド上に仮想マシンを作成してみる.......................................... 4
 1)   ポータルサイトから作業用の仮想マシンを作成 .................................... 4
 2)   SSH 接続するためのネットワーク設定 ............................................. 4
2. Fabric をインストールして触ってみる................................................ 5
 1)   作業用 VM(CentOS 6.3)に SSH ログイン ............................................ 5
 2)   Fabric をインストール .......................................................... 5
 3)   秘密鍵を設置 .................................................................. 5
 4)   fabfile を作成し実行 ........................................................... 5
3. Fabric から Redis をインストールしてみる............................................ 7
 1)   EPEL リポジトリを追加し、Redis をインストール .................................. 7
4. Fabric から API 経由で仮想マシンを作成してみる ...................................... 8
 1)   リポジトリを追加し、API ツールインストール ..................................... 8
 2)   API キーとシークレットキーを設置 ............................................... 9
 3)   仮想マシン作成 ............................................................... 10
 4)   /etc/hosts に名前登録 ......................................................... 12
5. 作成した仮想マシンを Fabric からセットアップしてみる .............................. 13
 1)   ユーザー追加 ................................................................. 13
 2)   sshd 設定 ..................................................................... 13
 3)   /etc/hosts に名前登録 ......................................................... 14
 4)   Redis のクライアントをインストール ............................................ 15
 5)   コンテンツを設置 ............................................................. 15
 6)   Monit インストール ............................................................ 17
 7)   Web 公開 ...................................................................... 18
6. 自動でスケールアウトしてみる ..................................................... 18
 1)   cron スクリプト設置 ........................................................... 19
 2)   負荷をかけます ............................................................... 21
7. [Appendix]ロードバランサーに自動追加 ............................................. 22




                                       2 / 24
hbstudy#41×IDCF クラウドハンズオン


0. この文書について
この文書は、hbstudy#41 のハンズオンにて、 フロンティアのクラウドサービス セルフタイプ
                          IDC                    (以
下、IDCF クラウド)を用い、オートスケーリング構成を作成する手順です。
動作検証は行っておりますが、自己責任でどうぞご利用ください。




                         3 / 24
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
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 fexpect



3) 秘密鍵を設置
  Fabric は SSH で接続します。
                     仮想マシン作成時に保管した SSH 秘密鍵を、
                                           作業用 VM に設置します。


# vi ~/.ssh/id_rsa
~保存した秘密鍵の内容をコピペ~
# chmod 600 ~/.ssh/id_rsa
※SCP 等のファイル転送でもかまいません



4) fabfile を作成し実行
  fabfile.py という名前でファイルを作成し、以下の内容を記述します。
  今後は、このファイルに追記していくことになります。
  ここでの内容は、「uname –s」コマンドでホストタイプを確認する host_type 関数を作成します。




                                           5 / 24
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
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 localinstall
http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
~略~
[localhost] out: redis-server を起動中:                       [ OK ]
[localhost] out:

                                           7 / 24
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
hbstudy#41×IDCF クラウドハンズオン

2) API キーとシークレットキーを設置
API アクセスのための情報を、~/idcfrc に記述します。


【~/.idcfrc】
[account]
host=https://api.noahcloud.jp/portal/client/api
api_key=ここに API キーを入れる
secret_key=ここにシークレットキーを入れる
API キーおよび秘密鍵は、IDCF クラウドのポータル右上の「マイプロファイル」をクリックすると
表示されます。(最新のエンドポイントの情報は FAQ を参照します)




                                         9 / 24
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 json
import os,sys,time
SCALE_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
hbstudy#41×IDCF クラウドハンズオン

        print "__vmid__,%d" %vm_id


def 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
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
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
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_hosts'
10.1.2.23
redis-server
[monitor] sudo: echo '10.1.2.23 redis-server' >> /etc/hosts


Done.
Disconnecting from monitor... done.

                                          14 / 24
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
hbstudy#41×IDCF クラウドハンズオン

</HTML>
'''
import socket
name = 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
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 rpush
scale:%(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
hbstudy#41×IDCF クラウドハンズオン



Done.
Disconnecting from monitor... done.



7) Web 公開
  ポータルサイトで HTTP をロードバランシング設定し公開します。
「リソース」>「ネットワーク」>「ロードバランサー」にて、80 番のルールを作成し、作成した
サーバを分散先として登録します。
※ロードバランサー設定については、エントリーガイド(pp.32)を参照してください




http://【公開 IP アドレス】/cgi-bin/hello_py.cgi
へ接続し動作確認。




                                      18 / 24
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_vms'
2


Done.


スケールを制御するスクリプトを設置します。


【~/scale.sh】※http://repo.cloud.idc.jp/Tmp/scale.sh に置いてます
#!/bin/bash
queue="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
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"
     fi
fi


# cd ~
# chmod +x scale.sh
# crontab –e
*/3 * * * * /root/scale.sh


                                             20 / 24
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-cli


redis-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
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
hbstudy#41×IDCF クラウドハンズオン

スケールスクリプトを修正します。(赤字のところを追記)


【~/scale.sh】※http://repo.cloud.idc.jp/Tmp/scale2.sh に置いてます
#!/bin/bash
queue="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
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"
     fi
fi


この後、負荷をかけて自動で作成された仮想マシンはロードバランサーに追加されます。
ポータルからロードバランサーの設定を確認してみてください。


この状態では、追加された仮想マシンでは httpd が動おらず、ヘルスチェックに失敗するので HTTP
の通信は分散されません。


httpd のインストール、コンテンツのアップロードが必要です。
まだ時間が余っている人は考えてみてはいかがでしょうか。。。。




ここまでの fabfile は以下の URL に置いています。
http://repo.cloud.idc.jp/Tmp/fabfile.py




                                             24 / 24

Hbstudy41 auto scaling

  • 1.
    hbstudy#41 × IDCFクラウドハンズオン Fabric と Monit を使って オートスケーリングを自作してみよう 2013 年 2 月 2 日 @tafujish
  • 2.
    hbstudy#41×IDCF クラウドハンズオン 目次 0. この文書について.................................................................. 3 1. IDCF クラウド上に仮想マシンを作成してみる.......................................... 4 1) ポータルサイトから作業用の仮想マシンを作成 .................................... 4 2) SSH 接続するためのネットワーク設定 ............................................. 4 2. Fabric をインストールして触ってみる................................................ 5 1) 作業用 VM(CentOS 6.3)に SSH ログイン ............................................ 5 2) Fabric をインストール .......................................................... 5 3) 秘密鍵を設置 .................................................................. 5 4) fabfile を作成し実行 ........................................................... 5 3. Fabric から Redis をインストールしてみる............................................ 7 1) EPEL リポジトリを追加し、Redis をインストール .................................. 7 4. Fabric から API 経由で仮想マシンを作成してみる ...................................... 8 1) リポジトリを追加し、API ツールインストール ..................................... 8 2) API キーとシークレットキーを設置 ............................................... 9 3) 仮想マシン作成 ............................................................... 10 4) /etc/hosts に名前登録 ......................................................... 12 5. 作成した仮想マシンを Fabric からセットアップしてみる .............................. 13 1) ユーザー追加 ................................................................. 13 2) sshd 設定 ..................................................................... 13 3) /etc/hosts に名前登録 ......................................................... 14 4) Redis のクライアントをインストール ............................................ 15 5) コンテンツを設置 ............................................................. 15 6) Monit インストール ............................................................ 17 7) Web 公開 ...................................................................... 18 6. 自動でスケールアウトしてみる ..................................................... 18 1) cron スクリプト設置 ........................................................... 19 2) 負荷をかけます ............................................................... 21 7. [Appendix]ロードバランサーに自動追加 ............................................. 22 2 / 24
  • 3.
    hbstudy#41×IDCF クラウドハンズオン 0. この文書について この文書は、hbstudy#41のハンズオンにて、 フロンティアのクラウドサービス セルフタイプ IDC (以 下、IDCF クラウド)を用い、オートスケーリング構成を作成する手順です。 動作検証は行っておりますが、自己責任でどうぞご利用ください。 3 / 24
  • 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.
    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 fexpect 3) 秘密鍵を設置 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.
    hbstudy#41×IDCF クラウドハンズオン 【~/fabfile.py】 from fabric.apiimport * 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.
    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 localinstall http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm ~略~ [localhost] out: redis-server を起動中: [ OK ] [localhost] out: 7 / 24
  • 8.
    hbstudy#41×IDCF クラウドハンズオン [localhost] out: Done. Disconnectingfrom 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.
    hbstudy#41×IDCF クラウドハンズオン 2) APIキーとシークレットキーを設置 API アクセスのための情報を、~/idcfrc に記述します。 【~/.idcfrc】 [account] host=https://api.noahcloud.jp/portal/client/api api_key=ここに API キーを入れる secret_key=ここにシークレットキーを入れる API キーおよび秘密鍵は、IDCF クラウドのポータル右上の「マイプロファイル」をクリックすると 表示されます。(最新のエンドポイントの情報は FAQ を参照します) 9 / 24
  • 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 json import os,sys,time SCALE_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.
    hbstudy#41×IDCF クラウドハンズオン print "__vmid__,%d" %vm_id def 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.
    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.
    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.
    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_hosts' 10.1.2.23 redis-server [monitor] sudo: echo '10.1.2.23 redis-server' >> /etc/hosts Done. Disconnecting from monitor... done. 14 / 24
  • 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.
    hbstudy#41×IDCF クラウドハンズオン </HTML> ''' import socket name= 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.
    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 rpush scale:%(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.
    hbstudy#41×IDCF クラウドハンズオン Done. Disconnecting frommonitor... done. 7) Web 公開 ポータルサイトで HTTP をロードバランシング設定し公開します。 「リソース」>「ネットワーク」>「ロードバランサー」にて、80 番のルールを作成し、作成した サーバを分散先として登録します。 ※ロードバランサー設定については、エントリーガイド(pp.32)を参照してください http://【公開 IP アドレス】/cgi-bin/hello_py.cgi へ接続し動作確認。 18 / 24
  • 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_vms' 2 Done. スケールを制御するスクリプトを設置します。 【~/scale.sh】※http://repo.cloud.idc.jp/Tmp/scale.sh に置いてます #!/bin/bash queue="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.
    hbstudy#41×IDCF クラウドハンズオン } log "-------------------------" queue_count=$(redis-clillen $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" fi fi # cd ~ # chmod +x scale.sh # crontab –e */3 * * * * /root/scale.sh 20 / 24
  • 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-cli redis-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.
    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.
    hbstudy#41×IDCF クラウドハンズオン スケールスクリプトを修正します。(赤字のところを追記) 【~/scale.sh】※http://repo.cloud.idc.jp/Tmp/scale2.sh に置いてます #!/bin/bash queue="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.
    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" fi fi この後、負荷をかけて自動で作成された仮想マシンはロードバランサーに追加されます。 ポータルからロードバランサーの設定を確認してみてください。 この状態では、追加された仮想マシンでは httpd が動おらず、ヘルスチェックに失敗するので HTTP の通信は分散されません。 httpd のインストール、コンテンツのアップロードが必要です。 まだ時間が余っている人は考えてみてはいかがでしょうか。。。。 ここまでの fabfile は以下の URL に置いています。 http://repo.cloud.idc.jp/Tmp/fabfile.py 24 / 24