SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

GPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたGPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたRyo Sakamoto
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
Doom3 commentary
Doom3 commentaryDoom3 commentary
Doom3 commentaryDADA246
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなしMITSUNARI Shigeo
 
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題Masahiro Nagano
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch dbEiji Kuroda
 
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題Makoto Setoh
 
社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)Iwana Chan
 
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~CubedKachi
 
1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法NVIDIA Japan
 
○○大学の本当にあった怖い話
○○大学の本当にあった怖い話○○大学の本当にあった怖い話
○○大学の本当にあった怖い話idkqh7 Nishino
 
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」fukuoka.ex
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?ogawatti
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 

Tendances (20)

GPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたGPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみた
 
SystemV IPC
SystemV IPCSystemV IPC
SystemV IPC
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
Doom3 commentary
Doom3 commentaryDoom3 commentary
Doom3 commentary
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
 
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
 
Slub data structure
Slub data structureSlub data structure
Slub data structure
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
 
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)
 
Kernel fcache-bug
Kernel fcache-bugKernel fcache-bug
Kernel fcache-bug
 
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法
 
Slide
SlideSlide
Slide
 
○○大学の本当にあった怖い話
○○大学の本当にあった怖い話○○大学の本当にあった怖い話
○○大学の本当にあった怖い話
 
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 

En vedette

SCALR アカウント登録手順
SCALR アカウント登録手順SCALR アカウント登録手順
SCALR アカウント登録手順mnarita
 
サーバー初心者のためのWordPressサイト構築手順〜付録〜 MacターミナルやTera Termを使用したSSH接続方法など
サーバー初心者のためのWordPressサイト構築手順〜付録〜 MacターミナルやTera Termを使用したSSH接続方法などサーバー初心者のためのWordPressサイト構築手順〜付録〜 MacターミナルやTera Termを使用したSSH接続方法など
サーバー初心者のためのWordPressサイト構築手順〜付録〜 MacターミナルやTera Termを使用したSSH接続方法などIDC Frontier
 
SCALR OSS版のインストール手順のご紹介 20131204 01
SCALR OSS版のインストール手順のご紹介 20131204 01SCALR OSS版のインストール手順のご紹介 20131204 01
SCALR OSS版のインストール手順のご紹介 20131204 01Haruhiko KAJIKAWA
 
Idcfクラウドクイズ
IdcfクラウドクイズIdcfクラウドクイズ
IdcfクラウドクイズSanae Taniguchi
 
僕はまだ10%しかIDCFクラウドを理解していなかった
僕はまだ10%しかIDCFクラウドを理解していなかった僕はまだ10%しかIDCFクラウドを理解していなかった
僕はまだ10%しかIDCFクラウドを理解していなかったFujishiro Takuya
 
(Vulsで)脆弱性対策をもっと楽に!
(Vulsで)脆弱性対策をもっと楽に!(Vulsで)脆弱性対策をもっと楽に!
(Vulsで)脆弱性対策をもっと楽に!hogehuga
 
サーバー初心者のためのWordPressサイト構築手順
サーバー初心者のためのWordPressサイト構築手順サーバー初心者のためのWordPressサイト構築手順
サーバー初心者のためのWordPressサイト構築手順IDC Frontier
 
Aerospike on IDCF Cloud
Aerospike on IDCF CloudAerospike on IDCF Cloud
Aerospike on IDCF CloudIDC Frontier
 

En vedette (12)

SCALR アカウント登録手順
SCALR アカウント登録手順SCALR アカウント登録手順
SCALR アカウント登録手順
 
Scalr hands on
Scalr hands onScalr hands on
Scalr hands on
 
サーバー初心者のためのWordPressサイト構築手順〜付録〜 MacターミナルやTera Termを使用したSSH接続方法など
サーバー初心者のためのWordPressサイト構築手順〜付録〜 MacターミナルやTera Termを使用したSSH接続方法などサーバー初心者のためのWordPressサイト構築手順〜付録〜 MacターミナルやTera Termを使用したSSH接続方法など
サーバー初心者のためのWordPressサイト構築手順〜付録〜 MacターミナルやTera Termを使用したSSH接続方法など
 
hbstudy37 doc
hbstudy37 dochbstudy37 doc
hbstudy37 doc
 
SCALR OSS版のインストール手順のご紹介 20131204 01
SCALR OSS版のインストール手順のご紹介 20131204 01SCALR OSS版のインストール手順のご紹介 20131204 01
SCALR OSS版のインストール手順のご紹介 20131204 01
 
hbstudy37 slide
hbstudy37 slidehbstudy37 slide
hbstudy37 slide
 
Idcfクラウドクイズ
IdcfクラウドクイズIdcfクラウドクイズ
Idcfクラウドクイズ
 
僕はまだ10%しかIDCFクラウドを理解していなかった
僕はまだ10%しかIDCFクラウドを理解していなかった僕はまだ10%しかIDCFクラウドを理解していなかった
僕はまだ10%しかIDCFクラウドを理解していなかった
 
脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる
 
(Vulsで)脆弱性対策をもっと楽に!
(Vulsで)脆弱性対策をもっと楽に!(Vulsで)脆弱性対策をもっと楽に!
(Vulsで)脆弱性対策をもっと楽に!
 
サーバー初心者のためのWordPressサイト構築手順
サーバー初心者のためのWordPressサイト構築手順サーバー初心者のためのWordPressサイト構築手順
サーバー初心者のためのWordPressサイト構築手順
 
Aerospike on IDCF Cloud
Aerospike on IDCF CloudAerospike on IDCF Cloud
Aerospike on IDCF Cloud
 

Similaire à Hbstudy41 auto scaling

microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみようHiroaki_UKAJI
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るKiyoshi SATOH
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)Daisuke Ikeda
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpMasahito Zembutsu
 
Circle ci and docker+serverspec
Circle ci and docker+serverspecCircle ci and docker+serverspec
Circle ci and docker+serverspecTsuyoshi Yamada
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!Midori Oge
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Tech Summit 2016
 
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationOpenstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationyukihiro kawada
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例Shigeru UCHIYAMA
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践Yoshifumi Kawai
 
Docker 18.09 新機能
Docker 18.09 新機能Docker 18.09 新機能
Docker 18.09 新機能Akihiro Suda
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門Tsukasa Kato
 
仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製するjunichi anno
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストールYasuhiro Arai
 

Similaire à Hbstudy41 auto scaling (20)

microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみよう
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
 
Circle ci and docker+serverspec
Circle ci and docker+serverspecCircle ci and docker+serverspec
Circle ci and docker+serverspec
 
Hadoop on LXC
Hadoop on LXCHadoop on LXC
Hadoop on LXC
 
Lxc on cloud
Lxc on cloudLxc on cloud
Lxc on cloud
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動
 
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationOpenstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verification
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
 
Docker 18.09 新機能
Docker 18.09 新機能Docker 18.09 新機能
Docker 18.09 新機能
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
 
仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストール
 

Plus de Fujishiro Takuya

ベアメタルサーバー/オンプレミスと実現するハイブリッドクラウド
ベアメタルサーバー/オンプレミスと実現するハイブリッドクラウドベアメタルサーバー/オンプレミスと実現するハイブリッドクラウド
ベアメタルサーバー/オンプレミスと実現するハイブリッドクラウドFujishiro Takuya
 
オートスケールアップ Powered by Mackerel
オートスケールアップ Powered by Mackerelオートスケールアップ Powered by Mackerel
オートスケールアップ Powered by MackerelFujishiro Takuya
 
実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方Fujishiro Takuya
 
Rancher ではじめる マルチクラウドコンテナー
Rancher ではじめる マルチクラウドコンテナーRancher ではじめる マルチクラウドコンテナー
Rancher ではじめる マルチクラウドコンテナーFujishiro Takuya
 
●●●の知らないSBCの世界
●●●の知らないSBCの世界●●●の知らないSBCの世界
●●●の知らないSBCの世界Fujishiro Takuya
 
Loves Baremetal-servers, Loves POWER
Loves Baremetal-servers, Loves POWERLoves Baremetal-servers, Loves POWER
Loves Baremetal-servers, Loves POWERFujishiro Takuya
 
おこづかいが足りないのでIDCFクラウドで自サイトを作ってみた話
おこづかいが足りないのでIDCFクラウドで自サイトを作ってみた話おこづかいが足りないのでIDCFクラウドで自サイトを作ってみた話
おこづかいが足りないのでIDCFクラウドで自サイトを作ってみた話Fujishiro Takuya
 
IDCFクラウド MeetUp2 LT
IDCFクラウド MeetUp2 LTIDCFクラウド MeetUp2 LT
IDCFクラウド MeetUp2 LTFujishiro Takuya
 
MaxScaleを触ってみた
MaxScaleを触ってみたMaxScaleを触ってみた
MaxScaleを触ってみたFujishiro Takuya
 

Plus de Fujishiro Takuya (10)

ベアメタルサーバー/オンプレミスと実現するハイブリッドクラウド
ベアメタルサーバー/オンプレミスと実現するハイブリッドクラウドベアメタルサーバー/オンプレミスと実現するハイブリッドクラウド
ベアメタルサーバー/オンプレミスと実現するハイブリッドクラウド
 
オートスケールアップ Powered by Mackerel
オートスケールアップ Powered by Mackerelオートスケールアップ Powered by Mackerel
オートスケールアップ Powered by Mackerel
 
実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方実践!DBベンチマークツールの使い方
実践!DBベンチマークツールの使い方
 
Rancher ではじめる マルチクラウドコンテナー
Rancher ではじめる マルチクラウドコンテナーRancher ではじめる マルチクラウドコンテナー
Rancher ではじめる マルチクラウドコンテナー
 
●●●の知らないSBCの世界
●●●の知らないSBCの世界●●●の知らないSBCの世界
●●●の知らないSBCの世界
 
Loves Baremetal-servers, Loves POWER
Loves Baremetal-servers, Loves POWERLoves Baremetal-servers, Loves POWER
Loves Baremetal-servers, Loves POWER
 
おこづかいが足りないのでIDCFクラウドで自サイトを作ってみた話
おこづかいが足りないのでIDCFクラウドで自サイトを作ってみた話おこづかいが足りないのでIDCFクラウドで自サイトを作ってみた話
おこづかいが足りないのでIDCFクラウドで自サイトを作ってみた話
 
IDCFクラウド MeetUp2 LT
IDCFクラウド MeetUp2 LTIDCFクラウド MeetUp2 LT
IDCFクラウド MeetUp2 LT
 
MaxScaleを触ってみた
MaxScaleを触ってみたMaxScaleを触ってみた
MaxScaleを触ってみた
 
Hbstudy41 slide
Hbstudy41 slideHbstudy41 slide
Hbstudy41 slide
 

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.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. 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. 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. 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 from monitor... 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-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
  • 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