今回から2回に分けてWakameの基本的な使い方を説明します。前提の知識としては、
Amazon EC2へのアクセスやAWSアカウントの準備については、
システムをスケールアウトさせるための考え方
まず、
システムを起動するために必要な全てのサービスを1つのAMIに詰め込み、

単一AMIを複数起動し、設定を調整することでスケールアウトするようにしておく
Amazon EC2上でスケールアウトさせるための原則として以下の通りに運用することとしています。
- インスタンスを起動する際には、
同じ1つのAMIを元にする - Wakameは、
そのインスタンス上に必要なサービスを起動する・ しないを制御する - Wakameは、
必要であればそのサービスの設定を書き換える
そのため、
代わりに、
人手でやるのであれば、
必要なときに自らインスタンスを起動することでスケールアウトする
Wakameのマスターが必要なタイミングでAmazon Web Servicesへ通信し、

MasterからAmazon EC2のインスタンスを起動する際には、
これによって、

上図のところまで起動すると、
Webサーバの追加を手動で実現するための例
これらをWakameを使わずに、
最初のインスタンスはElasticFoxや、
Masterが起動するサーバ上から指示することを前提として記述するため、
この程度の手動手順である場合は、
コマンドラインからインスタンスを起動する
AMIを指定し、
新しいインスタンスの起動に成功したかを確認し、
% ec2-run-instances ami-xxxxxxxx RESERVATION r-xxxxxxxx 123456789 default INSTANCE i-xxxxxxxx ami-xxxxxxxx pending 0 m1.small 2009-06-17T12:27:59+0000 us-east-1c aki-xxxxxxxx ari-xxxxxxxx
新しいインスタンスを起動すると、
% ec2-describe-instances i-xxxxxxxx RESERVATION r-xxxxxxxx 123456789 default INSTANCE i-xxxxxxxx ami-xxxxxxxx pending 0 m1.small 2009-06-17T12:27:59+0000 us-east-1c aki-xxxxxxxx ari-xxxxxxxx
インスタンスが起動すると以下のように、
% ec2-describe-instances i-73376e1a RESERVATION r-xxxxxxxx 123456789 default INSTANCE i-xxxxxxxx ami-xxxxxxxx ec2-x-x-x-x.compute-1.amazonaws.com domU-x-x-x-x-x-A2.compute-1.internal running 0 m1.small 2009-06-17T12:27:59+0000 us-east-1c aki-xxxxxxxx ari-xxxxxxxx
さっそくSSHを試して接続できるかを確認してみてください。
接続ができない場合は、
% ssh ec2-x-x-x-x.compute-1.amazonaws.com
Webサーバを起動する
SSHコマンドを利用し、
SSHコマンドはあらかじめ秘密鍵認証を設定しておき、
ここでも、
% ssh ec2-x-x-x-x.compute-1.amazonaws.com /etc/init.d/apache2 start
以下のように、
% ssh ec2-x-x-x-x.compute-1.amazonaws.com pidof apache2 2954 2953 2952 2947 2946 2829
ロードバランサーの設定を変更する
Webサーバの起動までは確認できたところで、
新しい設定ファイル
設定する前に、
% host ec2-x-x-x-x.compute-1.amazonaws.com ec2-x-x-x-x.compute-1.amazonaws.com has address 10.x.y.z
そのIPアドレスをもとに、
% vim /tmp/httpd.conf (略) <Proxy balancer://web> BalancerMember http://10.a.b.c:8000 BalancerMember http://10.x.y.z:8000 </Proxy> (略)
設定ファイルを転送します。
% scp /tmp/httpd.conf ec2-x-x-x-x.compute-1.amazonaws.com:/etc/apache2/httpd.conf
転送が完了したら、
% ssh ec2-x-x-x-x.compute-1.amazonaws.com /etc/init.d/apache2 reload
Wakameがあればここまでの手順を管理できる
Wakameはこれらの手順を各サーバ上で適宜実行するための仕組みを持っています。
今回は、
Wakameのデモ環境準備と設定
デモ環境では、
まず、

Instancesメニューへ移動すると、

起動したインスタンスの行をクリックすると、
ubuntuユーザとしてSSH接続を行い、
% ssh [email protected] The authenticity of host 'ec2-x-x-x-x.compute-1.amazonaws.com (x.x.x.x)' can't be established. RSA key fingerprint is aa:bb:cc:dd:ee:ff:aa:bb:cc:dd:ee:ff:aa:bb:cc:dd. Are you sure you want to continue connecting (yes/no)? yes % sudo su -
ここから、
- WakameがAWSへ問い合わせする際に使う、
Access Key ID、 Secret Access Keyの設定 - Elastic IPの取得
- MySQL用EBSボリュームの準備
Access Key ID と Secret Access Keyについては、

/home/
% vim /home/wakame/corelib/wakame/lib/configuration.rb 63: config.aws_access_key = 'AMAZON ACCESS KEY' 64: config.aws_secret_key = 'AMAZON SECRET KEY'
Elastic IPをAWS Management Consoleから取得し、
853: @listen_port = 80
854: @listen_port_https = 443
855: @template = ConfigurationTemplate::ApacheTemplate.new(:lb)
856: @elastic_ip = '174.129.221.12'
857: end
MySQL用EBSボリュームを確保します。ec2-api-toolsを使っても同等なことができますが、
% cd /home/wakame/corelib/
% /usr/local/gems/bin/rake ec2:mysqlsetupvol[1]
.
.
.
The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
umount /mnt/mysql-tmp
Initialized EBS Volume: vol-81ff10e8
%
最後に出てくるvol-xxxxxxxx の文字列を/home/
900: @mysqld_datadir = File.expand_path('data', @basedir)
901: @mysqld_log_bin = File.expand_path('mysql-bin.log', @mysqld_datadir)
902: @ebs_volume = 'vol-81ff10e8'
903: @ebs_device = '/dev/sdm'
これで、
% /etc/init.d/wakame-master restart % /etc/init.d/wakame-agent restart
Clusterの起動
以下のコマンドで、
% /home/wakame/corelib/bin/wakameadm status Cluster : Wakame::Service::WebCluster (0) Wakame::Service::Apache_LB : <current=1 min=1, max=1, type=ConstantCounter> Wakame::Service::Apache_WWW : <current=1 min=1, max=5, type=ConstantCounter> Wakame::Service::Apache_APP : <current=1 min=1, max=5, type=ConstantCounter> Wakame::Service::MySQL_Master : <current=1 min=1, max=1, type=ConstantCounter> Agents : i-73b8e41a : 10.240.63.223, 67.202.43.134 load=0.06, 2 sec(s) (1)
Clusterの項目には、
また、
現在のバージョンでは、

以下のコマンドで、
% /home/wakame/corelib/bin/wakameadm launch_cluster
このコマンドは、
% /home/wakame/corelib/bin/wakameadm launch_cluster % /home/wakame/corelib/bin/wakameadm status Cluster : Wakame::Service::WebCluster (2) Wakame::Service::Apache_LB : <current=1 min=1, max=1, type=ConstantCounter> b4c41f1cfc5c66ca28141c2290bac83e97f69cf0 (Offline) Wakame::Service::Apache_WWW : <current=1 min=1, max=5, type=ConstantCounter> b4a7c1033a2aa2f475f77b6eab89377b117a7012 (ONLINE) Wakame::Service::Apache_APP : <current=1 min=1, max=5, type=ConstantCounter> 8fc49ff6001201b099757157041318aaba45dba8 (Offline) Wakame::Service::MySQL_Master : <current=1 min=1, max=1, type=ConstantCounter> 03718153224a96f96d83f99a764c2cdc46ef9bed (Starting...) Instances : b4c41f1cfc5c66ca28141c2290bac83e97f69cf0 : Wakame::Service::Apache_LB (Offline) b4a7c1033a2aa2f475f77b6eab89377b117a7012 : Wakame::Service::Apache_WWW (ONLINE) On VM instance: i-73b8e41a 03718153224a96f96d83f99a764c2cdc46ef9bed : Wakame::Service::MySQL_Master (Starting...) On VM instance: i-73b8e41a 8fc49ff6001201b099757157041318aaba45dba8 : Wakame::Service::Apache_APP (Offline) Agents : i-73b8e41a : 10.240.63.223, 174.129.206.164 load=0.23, 2 sec(s) (1)
各サービスの起動がスケジュールされると、
上段に位置するサービス

これら一連の手順を繰り返すと、
Cluster : Wakame::Service::WebCluster (1) Wakame::Service::Apache_LB : <current=1 min=1, max=1, type=ConstantCounter> b4c41f1cfc5c66ca28141c2290bac83e97f69cf0 (ONLINE) Wakame::Service::Apache_WWW : <current=1 min=1, max=5, type=ConstantCounter> b4a7c1033a2aa2f475f77b6eab89377b117a7012 (ONLINE) Wakame::Service::Apache_APP : <current=1 min=1, max=5, type=ConstantCounter> 8fc49ff6001201b099757157041318aaba45dba8 (ONLINE) Wakame::Service::MySQL_Master : <current=1 min=1, max=1, type=ConstantCounter> 03718153224a96f96d83f99a764c2cdc46ef9bed (ONLINE) Instances : b4c41f1cfc5c66ca28141c2290bac83e97f69cf0 : Wakame::Service::Apache_LB (ONLINE) On VM instance: i-73b8e41a b4a7c1033a2aa2f475f77b6eab89377b117a7012 : Wakame::Service::Apache_WWW (ONLINE) On VM instance: i-73b8e41a 03718153224a96f96d83f99a764c2cdc46ef9bed : Wakame::Service::MySQL_Master (ONLINE) On VM instance: i-73b8e41a 8fc49ff6001201b099757157041318aaba45dba8 : Wakame::Service::Apache_APP (ONLINE) On VM instance: i-73b8e41a Agents : i-73b8e41a : 10.240.63.223, 174.129.206.164 load=0.0, 5 sec(s) (1) Services (4): Wakame::Service::Apache_LB, Wakame::Service::Apache_WWW, Wakame::Service::MySQL_Master, Wakame::Service::Apache_APP
ここまでで、

では、
hostsファイルに下記1行を追記してください。
174.x.x.x aaa.test
http://

http://

次は、
サービスを増やす
サービスを増やすには、
% /home/wakame/corelib/bin/wakameadm propagate_service Wakame::Service::Apache_APP % /home/wakame/corelib/bin/wakameadm status Cluster : Wakame::Service::WebCluster (1) Wakame::Service::Apache_LB : b4c41f1cfc5c66ca28141c2290bac83e97f69cf0 (ONLINE) Wakame::Service::Apache_WWW : b4a7c1033a2aa2f475f77b6eab89377b117a7012 (ONLINE) Wakame::Service::Apache_APP : 1a13d4bb5d018e84ddebbbf32484a822454fa44c (Offline) 8fc49ff6001201b099757157041318aaba45dba8 (ONLINE) Wakame::Service::MySQL_Master : 03718153224a96f96d83f99a764c2cdc46ef9bed (ONLINE) Instances : b4c41f1cfc5c66ca28141c2290bac83e97f69cf0 : Wakame::Service::Apache_LB (ONLINE) On VM instance: i-73b8e41a 1a13d4bb5d018e84ddebbbf32484a822454fa44c : Wakame::Service::Apache_APP (Offline) b4a7c1033a2aa2f475f77b6eab89377b117a7012 : Wakame::Service::Apache_WWW (ONLINE) On VM instance: i-73b8e41a 03718153224a96f96d83f99a764c2cdc46ef9bed : Wakame::Service::MySQL_Master (ONLINE) On VM instance: i-73b8e41a 8fc49ff6001201b099757157041318aaba45dba8 : Wakame::Service::Apache_APP (ONLINE) On VM instance: i-73b8e41a Agents : i-73b8e41a : 10.240.63.223, 174.129.206.164 load=0.0, 1 sec(s) (1) Services (4): Wakame::Service::Apache_LB, Wakame::Service::Apache_WWW, Wakame::Service::MySQL_Master, Wakame::Service::Apache_APP
Apache_

無事新しい仮想マシンが認識され、
Cluster : Wakame::Service::WebCluster (1) Wakame::Service::Apache_LB : <current=1 min=1, max=1, type=ConstantCounter> b4c41f1cfc5c66ca28141c2290bac83e97f69cf0 (ONLINE) Wakame::Service::Apache_WWW : <current=1 min=1, max=5, type=ConstantCounter> b4a7c1033a2aa2f475f77b6eab89377b117a7012 (ONLINE) Wakame::Service::Apache_APP : <current=2 min=1, max=5, type=ConstantCounter> 1a13d4bb5d018e84ddebbbf32484a822454fa44c (ONLINE) 8fc49ff6001201b099757157041318aaba45dba8 (ONLINE) Wakame::Service::MySQL_Master : <current=1 min=1, max=1, type=ConstantCounter> 03718153224a96f96d83f99a764c2cdc46ef9bed (ONLINE) Instances : b4c41f1cfc5c66ca28141c2290bac83e97f69cf0 : Wakame::Service::Apache_LB (ONLINE) On VM instance: i-73b8e41a 1a13d4bb5d018e84ddebbbf32484a822454fa44c : Wakame::Service::Apache_APP (ONLINE) On VM instance: i-71cf9318 b4a7c1033a2aa2f475f77b6eab89377b117a7012 : Wakame::Service::Apache_WWW (ONLINE) On VM instance: i-73b8e41a 03718153224a96f96d83f99a764c2cdc46ef9bed : Wakame::Service::MySQL_Master (ONLINE) On VM instance: i-73b8e41a 8fc49ff6001201b099757157041318aaba45dba8 : Wakame::Service::Apache_APP (ONLINE) On VM instance: i-73b8e41a Agents : i-73b8e41a : 10.240.63.223, 174.129.206.164 load=0.0, 7 sec(s) (1) Services (4): Wakame::Service::Apache_LB, Wakame::Service::Apache_WWW, Wakame::Service::MySQL_Master, Wakame::Service::Apache_APP i-71cf9318 : 10.254.230.31, 174.129.179.77 load=0.08, 5 sec(s) (1) Services (1): Wakame::Service::Apache_APP
wakameadmが返している状態は下図の通りです。

http://

増えたApache_
サービスを移動する
Wakameには、
一つのイメージから起動する様にデザインされているため、
そのための機能がサービスのサーバ間の移動機能で、
% /home/wakame/corelib/bin/wakameadm migrate_service b4a7c1033a2aa2f475f77b6eab89377b117a7012 % /home/wakame/corelib/bin/wakameadm status Cluster : Wakame::Service::WebCluster (2) Wakame::Service::Apache_LB : <current=1 min=1, max=1, type=ConstantCounter> b4c41f1cfc5c66ca28141c2290bac83e97f69cf0 (ONLINE) Wakame::Service::Apache_WWW : <current=1 min=1, max=5, type=ConstantCounter> b4a7c1033a2aa2f475f77b6eab89377b117a7012 (Migrating...) c6e25436e2274d4dd340929f958dca1956125c3a (Offline) Wakame::Service::Apache_APP : <current=2 min=1, max=5, type=ConstantCounter> 1a13d4bb5d018e84ddebbbf32484a822454fa44c (ONLINE) 8fc49ff6001201b099757157041318aaba45dba8 (ONLINE) Wakame::Service::MySQL_Master : <current=1 min=1, max=1, type=ConstantCounter> 03718153224a96f96d83f99a764c2cdc46ef9bed (ONLINE) Instances : b4c41f1cfc5c66ca28141c2290bac83e97f69cf0 : Wakame::Service::Apache_LB (ONLINE) On VM instance: i-73b8e41a 1a13d4bb5d018e84ddebbbf32484a822454fa44c : Wakame::Service::Apache_APP (ONLINE) On VM instance: i-71cf9318 c6e25436e2274d4dd340929f958dca1956125c3a : Wakame::Service::Apache_WWW (Offline) b4a7c1033a2aa2f475f77b6eab89377b117a7012 : Wakame::Service::Apache_WWW (Migrating...) On VM instance: i-73b8e41a 03718153224a96f96d83f99a764c2cdc46ef9bed : Wakame::Service::MySQL_Master (ONLINE) On VM instance: i-73b8e41a 8fc49ff6001201b099757157041318aaba45dba8 : Wakame::Service::Apache_APP (ONLINE) On VM instance: i-73b8e41a Agents : i-73b8e41a : 10.240.63.223, 174.129.206.164 load=1.32, 2 sec(s) (1) Services (4): Wakame::Service::Apache_LB, Wakame::Service::Apache_WWW, Wakame::Service::MySQL_Master, Wakame::Service::Apache_APP i-71cf9318 : 10.254.230.31, 174.129.179.77 load=0.09, 3 sec(s) (1) Services (1): Wakame::Service::Apache_APP
すると、

Cluster : Wakame::Service::WebCluster (2) Wakame::Service::Apache_LB : <current=1 min=1, max=1, type=ConstantCounter> b4c41f1cfc5c66ca28141c2290bac83e97f69cf0 (ONLINE) Wakame::Service::Apache_WWW : <current=1 min=1, max=5, type=ConstantCounter> c6e25436e2274d4dd340929f958dca1956125c3a (ONLINE) Wakame::Service::Apache_APP : <current=2 min=1, max=5, type=ConstantCounter> 1a13d4bb5d018e84ddebbbf32484a822454fa44c (ONLINE) 8fc49ff6001201b099757157041318aaba45dba8 (ONLINE) Wakame::Service::MySQL_Master : <current=1 min=1, max=1, type=ConstantCounter> 03718153224a96f96d83f99a764c2cdc46ef9bed (ONLINE) Instances : b4c41f1cfc5c66ca28141c2290bac83e97f69cf0 : Wakame::Service::Apache_LB (ONLINE) On VM instance: i-73b8e41a 1a13d4bb5d018e84ddebbbf32484a822454fa44c : Wakame::Service::Apache_APP (ONLINE) On VM instance: i-71cf9318 c6e25436e2274d4dd340929f958dca1956125c3a : Wakame::Service::Apache_WWW (ONLINE) On VM instance: i-83cb97ea 03718153224a96f96d83f99a764c2cdc46ef9bed : Wakame::Service::MySQL_Master (ONLINE) On VM instance: i-73b8e41a 8fc49ff6001201b099757157041318aaba45dba8 : Wakame::Service::Apache_APP (ONLINE) On VM instance: i-73b8e41a Agents : i-73b8e41a : 10.240.63.223, 174.129.206.164 load=0.01, 3 sec(s) (1) Services (3): Wakame::Service::Apache_LB, Wakame::Service::MySQL_Master, Wakame::Service::Apache_APP i-83cb97ea : 10.249.47.230, 174.129.104.37 load=0.62, 2 sec(s) (1) Services (1): Wakame::Service::Apache_WWW i-71cf9318 : 10.254.230.31, 174.129.179.77 load=0.0, 4 sec(s) (1) Services (1): Wakame::Service::Apache_APP
完了すると、

ロードバランサの画面では、

サービスを終了する
最後に、
shutdown_
% /home/wakame/corelib/bin/wakameadm shutdown_cluster Cluster : Wakame::Service::WebCluster (2) Wakame::Service::Apache_LB : <current=1 min=1, max=1, type=ConstantCounter> Wakame::Service::Apache_WWW : <current=1 min=1, max=5, type=ConstantCounter> c6e25436e2274d4dd340929f958dca1956125c3a (Stopping...) Wakame::Service::Apache_APP : <current=2 min=1, max=5, type=ConstantCounter> Wakame::Service::MySQL_Master : <current=1 min=1, max=1, type=ConstantCounter> 03718153224a96f96d83f99a764c2cdc46ef9bed (Stopping...) Instances : c6e25436e2274d4dd340929f958dca1956125c3a : Wakame::Service::Apache_WWW (Stopping...) On VM instance: i-83cb97ea 03718153224a96f96d83f99a764c2cdc46ef9bed : Wakame::Service::MySQL_Master (Stopping...) On VM instance: i-73b8e41a Agents : i-73b8e41a : 10.240.63.223, 174.129.206.164 load=0.13, 1 sec(s) (1) Services (1): Wakame::Service::MySQL_Master i-83cb97ea : 10.249.47.230, 174.129.104.37 load=0.0, 6 sec(s) (1) Services (1): Wakame::Service::Apache_WWW i-71cf9318 : 10.254.230.31, 174.129.179.77 load=0.0, 5 sec(s) (1)
最後に、
Cluster : Wakame::Service::WebCluster (0) Wakame::Service::Apache_LB : <current=1 min=1, max=1, type=ConstantCounter> Wakame::Service::Apache_WWW : <current=1 min=1, max=5, type=ConstantCounter> Wakame::Service::Apache_APP : <current=2 min=1, max=5, type=ConstantCounter> Wakame::Service::MySQL_Master : <current=1 min=1, max=1, type=ConstantCounter> Agents : i-73b8e41a : 10.240.63.223, 174.129.206.164 load=0.01, 5 sec(s) (1)
まとめ
今回は実際に動作するサーバ構成を元に、
次回は、