"Wakame"で始めるクラウドコントロール
第3回 クラウド上でスケールアウトするシステムの作り方と実例
今回から2回に分けてWakameの基本的な使い方を説明します。前提の知識としては,Amazon Web Servicesのアカウント(AWSアカウント)をお持ちでAWS Management Console等を使い,仮想マシンの起動を行ったことがある方を対象としています。
Amazon EC2へのアクセスやAWSアカウントの準備については,過去の特集「はじめてのAmazon EC2&S3 ~これからの新サービスの公開の形~」を参考になさるか,以下のオンラインの記事を参考にしてください。
システムをスケールアウトさせるための考え方
まず,Amazon Auto Scalingがそうであるように,WakameもAMI(Amazon Machine Image)の単位でインスタンスを起動することになります。
システムを起動するために必要な全てのサービスを1つのAMIに詰め込み,そこにWakameのMasterとAgentをインストールしておきます。
単一AMIを複数起動し,設定を調整することでスケールアウトするようにしておく
Amazon EC2上でスケールアウトさせるための原則として以下の通りに運用することとしています。
- インスタンスを起動する際には,同じ1つのAMIを元にする
- Wakameは,そのインスタンス上に必要なサービスを起動する・しないを制御する
- Wakameは,必要であればそのサービスの設定を書き換える
そのため,AMIにインストールされたサービスは,基本的にWakameや最低限必要なサービス以外は,OSの準備完了と同時に自動起動しないようにinit.dの設定をオフにしておきます。
代わりに,Wakameはスタートアップスクリプトを自ら制御しに行きます。
人手でやるのであれば,/etc/init.d以下のスタートアップスクリプトを順序良く実行していくことになります。
必要なときに自らインスタンスを起動することでスケールアウトする
Wakameのマスターが必要なタイミングでAmazon Web Servicesへ通信し,自分と同じAMIを自ら指定してインスタンスを起動します。
MasterからAmazon EC2のインスタンスを起動する際には,User Dataという領域を使って,インスタンスに初期値を与えることができます。
これによって,Agentが既に起動しているMasterと連携するために必要な情報を与えることができるのと同時に,Masterが複数起動してくることを防ぎます。
上図のところまで起動すると,あとはMasterからAgentに通信して,新たなインスタンス上に何を起動すべきかを指示できるようになります。
"Wakame"で始めるクラウドコントロール
- 第4回 クラウド上でデータベースをスケールアウトさせる方法と実例
- 第3回 クラウド上でスケールアウトするシステムの作り方と実例
- 第2回 クラウド上でサーバ構成を管理するための考え方と仕掛け
- 第1回 クラウドをコントロールするということの意義
-
Re: 再び、実例通りに動きませんでした (解決しました)
>同4ページ目ですが、完成したクラスタ環境に接続するテストを行う部分で
>hostsを書き換えた後http://aaa.test/へ接続を行うとのことですが、繋がりません
大変失礼いたしました
セキュリティー対策のため、/etc/ssh/sshd_configのPermitRootLogin yesをnoに変更していたため
wakameの処理中でrsyncがrootでsshを行う際に失敗してしまっていたようです
PermitRootLogin yesに戻したところ/home/wakame/config/apache2内のファイルが動的に書き換えられ
/var/log/wakame-master.logに出ていた以下のエラーも解消いたしました
wakame-master[DEBUG]: rsync -e 'ssh -i /home/wakame/config/root.id_rsa -o "UserKnownHostsFile /home/wakame/config/ssh/known_hosts"' -au /home/wakame/config/tmp/290e7b043d12ffebe64d4d76e2446725af99bebf/apache2 root@10.242.58.148:/home/wakame/config/
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(635) [sender=3.0.3]
無事、http://aaa.test/のアクセスに成功し、Load Balancer Managerの表示も正常になりましたCommented : #4 fxzz (2009/10/26, 16:35)
-
再び、実例通りに動きませんでした
いくつか表記通りでなかったり、戸惑う部分がありましたのでコメントさせて頂きます
3ページ目「Wakameのデモ環境準備と設定」内でroot権限に変更との事ですが
>ubuntuユーザとしてSSH接続を行い,root権限を取得します。
> % sudo su -
その後のプロンプトが以下の様に%になっています
これは著者のshellプロンプトカスタマイズによる物で
root権限(#) プロンプトと理解して宜しいのでしょうか?
> % cd /home/wakame/corelib/
> % /usr/local/gems/bin/rake ec2:mysqlsetupvol[1]
同3ページのelastic_ipを設定する箇所及びEBSボリュームを設定する部分でパスが間違っています
記事上のパスではファイルが存在しません
# ls -l /home/wakame/corelib/wakame/lib/service.rb
ls: cannot access /home/wakame/corelib/wakame/lib/service.rb: No such file or directory
正しくはこちらではないでしょうか?
# ls -l /home/wakame/corelib/lib/wakame/service.rb
-rwxr-xr-x 1 wakame wakame 34608 2009-10-22 17:47 /home/wakame/corelib/lib/wakame/service.rb
4ページでlaunch_clusterをする箇所がありますが、以下のコマンドを実行すると暫くすると
インスタンスのグローバルIPアドレスがservice.rbに設定したElasticIPに置き換わります
この為、それまでの動的IPで接続していたSSHが切断されます。
この事について一言注意書きを頂けるとありがたかったです
> % /home/wakame/corelib/bin/wakameadm launch_cluster
同4ページ目ですが、完成したクラスタ環境に接続するテストを行う部分で
hostsを書き換えた後http://aaa.test/へ接続を行うとのことですが、繋がりません
http://aaa.test/balancer-manager にて、proxy balancerモジュールの管理画面へは表示されますが
Worker URLのアドレスが本来設定されるはずであるwakame agentsのIPアドレスではなく
身に覚えのないIPアドレスが設定されています
この為http://aaa.test/へは繋がらない物と思われます
---- wakameadm statusのAgent部分の表示内容です ----
Agents :
i-9ca71cf4 : 10.245.191.132, 67.202.1.26 load=0.16, 5 sec(s) (1)
---- balancer-managerの表示内容です----
LoadBalancer Status for balancer://cluster-www
StickySession Timeout FailoverAttempts Method
- 0 0 byrequests
Worker URL Route RouteRedir Factor Set Status Elected To From
http://10.248.183.83:8000 10 0 Ok 0 0 0
--------------------------------------------------------------------------------
LoadBalancer Status for balancer://cluster-app
StickySession Timeout FailoverAttempts Method
- 10 1 byrequests
Worker URL Route RouteRedir Factor Set Status Elected To From
http://10.251.26.255:8001 10 0 Ok 0 0 0
http://10.248.183.213:8001 10 0 Ok 0 0 0
最後に5ページ目についてですが、サービスを「減らす」方法についても
知りたかったです
減らす処理を行った場合、不要になったEC2インスタンスが自動で終了したりも
wakame内で行われるのでしょうか?Commented : #3 fxzz (2009/10/23, 13:05)
-
Re: 実例通りに動きませんでした(解決しました)
>rakeタスクは以下の様に失敗してしまいます
解決しました
ubuntuのセキュリティフレームワークapparmorを止めて
rakeタスクを実行したところ正常に動作しました
apparmor停止
% sudo /etc/init.d/apparmor stop
参考ブログ
http://vcxzasdf.blogspot.com/2009_04_01_archive.htmlCommented : #2 fxzz (2009/10/22, 17:43)
-
実例通りに動きませんでした
wakameの実例通りに試していたのですが
以下の様な問題が起こりうまくできませんでした
configuration.rbの位置が間違っているようです
# ls -l /home/wakame/corelib/wakame/lib/configuration.rb
ls: cannot access /home/wakame/corelib/wakame/lib/configuration.rb: No such file or directory
正しくはこちらではないでしょうか?
# ls -l /home/wakame/corelib/lib/wakame/configuration.rb
-rw-r--r-- 1 wakame wakame 2264 2009-10-22 11:48 /home/wakame/corelib/lib/wakame/configuration.rb
>MySQL用EBSボリュームを確保します。
>ec2-api-toolsを使っても同等なことができますが,
>必要な手順を自動化したrakeタスクも用意してあります。
rakeタスクは以下の様に失敗してしまいます
ec2-api-toolsを使った方法はどの様に行うのでしょうか?
# /usr/local/gems/bin/rake ec2:mysqlsetupvol[1]
(in /home/wakame/corelib)
/home/wakame/corelib/config/../lib/wakame.rb:19: warning: already initialized constant VERSION
echo 'y' | mkfs.ext3 -q /dev/sdw
/dev/sdw is entire device, not just one partition!
Proceed anyway? (y,n) mount /dev/sdw /mnt/mysql-tmp
/usr/bin/mysql_install_db --datadir=/mnt/mysql-tmp
Installing MySQL system tables...
091022 11:50:52 [Warning] Can't create test file /mnt/mysql-tmp/ip-10-242-58-148.lower-test
091022 11:50:52 [Warning] Can't create test file /mnt/mysql-tmp/ip-10-242-58-148.lower-test
ERROR: 1005 Can't create table 'db' (errno: 13)
091022 11:50:52 [ERROR] Aborting
091022 11:50:52 [Note] /usr/sbin/mysqld: Shutdown complete
Installation of system tables failed!
Examine the logs in /mnt/mysql-tmp for more information.
You can try to start the mysqld daemon with:
/usr/sbin/mysqld --skip-grant &
and use the command line tool
/usr/bin/mysql to connect to the mysql
database and look at the grant tables:
shell> /usr/bin/mysql -u root mysql
mysql> show tables
Try 'mysqld --help' if you have problems with paths. Using --log
gives you a log in /mnt/mysql-tmp that may be helpful.
The latest information about MySQL is available on the web at
http://www.mysql.com
Please consult the MySQL manual section: 'Problems running mysql_install_db',
and the manual section that describes problems on your OS.
Another information source is the MySQL email archive.
Please check all of the above before mailing us!
And if you do mail us, you MUST use the /usr/bin/mysqlbug script!
umount /mnt/mysql-tmp
rake aborted!
Command failed with status (1): [/usr/bin/mysql_install_db --datadir=/mnt/m...]
(See full trace by running task with --trace)Commented : #1 fxzz (2009/10/22, 12:02)


