• eucalyptus
はてなブックマーク - Ubuntu 9.10改め10.04でUEC構築
このエントリーをはてなブックマークに追加

Fusic 平田です。
前回の続きを書く前にUbuntu 10.04 LTS(Lucid Lynx)が登場しました。
また前回「靭帯が切れた」と書きましたが、その後入院など挟みつつ。
やっとこ復帰して記事を書ける状態になりましたので、10.04での設定などをつらつらと。
構成は前回と同じですが、せっかくなのでFrontendは32bit機にしてみました。
ついでついでと言うことで(?)、インストール作業は後輩君に任せてみました。

インストール時の大きな違いとしては、コントローラ単位での選択式になりました。
# 9.10の場合はCluster/Nodeの2択でした。
# ClusterにNode Controller以外の全てがインストールされていたのですが、今回は選択可能です。

このためStorage Controllerだけ別にするなども可能なので、構成の幅が大きく広がります。
今回は同様の構成にしています。
[Frontend] Cluster Controller他1 : 192.168.11.100/24
[Backend] Node Controller: 192.168.11.101/24

インストール後、まずは管理画面にアクセスします。
[Frontend IP]:8443/
ログイン画面
まずadmin/passwordでログインし、パスワード設定と管理者メールアドレスを入力。
管理画面はこんな感じです。
管理画面

UECがめっぽう楽な理由の一つ2 が「Store」の項目。
Store
Store2
あらかじめ用意されている起動イメージを1クリックでインストールできます。
以下が現時点で用意されているイメージの一覧。

  • Ubuntu 9.10 – Karmic Koala (i386)
  • MediaWiki Demo Appliance (i386)
  • Ubuntu 9.10 – Karmic Koala (amd64)
  • M/DB Appliance
  • Ubuntu 10.04 LTS – Lucid Lynx (i386)
  • Ubuntu 10.04 LTS – Lucid Lynx (amd64)

とりあえず動かしてみたい!という方は是非使ってみてください。

さて、Eucalyptusの操作は主にコマンド(Euca2ools)を使用して行います。
というわけでまずは下準備。
# 以下の流れは、9.10でも10.04でも変わりはありません。

1. Frontendにsshでログイン
2. euca_conf –get-credentialsで認証情報を取得

gintama@gintama-front:~$ sudo euca_conf --get-credentials euca.zip
[sudo] password for gintama:
--2010-06-11 10:44:57--  https://localhost:8443/getX509?user=admin&code=dc4sfR3CSYk1V0G3qNvtyP2BL8vx4387zYPWk8K2NVDAz7SL5jkS8k7kDC2sBBMp7hcMES6wMLyJQU8ng1dg
localhost をDNSに問いあわせています... ::1, 127.0.0.1
localhost|::1|:8443 に接続しています... 失敗しました: Connection refused.
localhost|127.0.0.1|:8443 に接続しています... 接続しました。
警告: localhost の証明書(発行者: `/C=US/ST=CA/L=Santa Barbara/O=db/OU=Eucalyptus/CN=localhost')の検証に失敗しました:
  自己署名証明書です。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 5052 (4.9K) [application/zip]
`euca.zip' に保存中
 
100%[==================================================================================================================================>] 5,052       --.-K/s   時間 0s
 
2010-06-11 10:44:58 (584 MB/s) - `euca.zip' へ保存完了 [5052/5052]

3. 解凍してsourceで読み込む3

gintama@gintama-front:~$ unzip euca.zip
Archive:  euca.zip
To setup the environment run: source /path/to/eucarc
  inflating: eucarc
  inflating: cloud-cert.pem
  inflating: jssecacerts
  inflating: euca2-admin-8de7c506-pk.pem
  inflating: euca2-admin-8de7c506-cert.pem

これでeuca-****なコマンドを使っていろいろ操作できるようになりました。
主に使うコマンドの説明をしつつ、一気にインスタンス起動まで話を進めます。

・euca-describe-availability-zones verbose
クラスタの状態(起動できるイメージの数など)を表示します。

gintama@gintama-front:~$ euca-describe-availability-zones verbose
AVAILABILITYZONE        gintama-front   192.168.11.100
AVAILABILITYZONE        |- vm types     free / max   cpu   ram  disk
AVAILABILITYZONE        |- m1.small     0004 / 0004   1    192     2
AVAILABILITYZONE        |- c1.medium    0004 / 0004   1    256     5
AVAILABILITYZONE        |- m1.large     0002 / 0002   2    512    10
AVAILABILITYZONE        |- m1.xlarge    0002 / 0002   2   1024    20
AVAILABILITYZONE        |- c1.xlarge    0001 / 0001   4   2048    20

・euca-describe-images
登録されている起動イメージの一覧を表示します。

gintama@gintama-front:~$ euca-describe-images
IMAGE   emi-E0851072    image-store-1276057589/image.manifest.xml       admin   available       public          x86_64  machine eki-F6F41100    eri-0B6B1169
IMAGE   eki-F6F41100    image-store-1276057589/kernel.manifest.xml      admin   available       public          x86_64  kernel
IMAGE   eri-0B6B1169    image-store-1276057589/ramdisk.manifest.xml     admin   available       public          x86_64  ramdisk

emi-******が起動イメージ、eki-******がkernel、eri-******がramdiskです。
Amazon EC2のami/aki/ariと同様だと考えていただければ結構です。

・euca-bundle-image, euca-upload-image, euca-register
イメージ登録に使用するコマンド群。
bundle→upload→registerの流れになります。
これについてはEucalyptus 日本語 Wikiあたりを参考に。
今回はStoreからインストールしたイメージを使用するので、この項目は省略します。

・euca-add-keypair [keypair_name] > keyfilename
起動したインスタンスへのログインは、公開鍵認証を用います。
起動時にkeypair名を指定し、対応した秘密鍵を用いて認証する流れになります。
この元となるkeypairを作成するコマンドです。
今回はsilverkeyというkeypairを作成、silverkey.privとして秘密鍵を保存しました。
ついでにパーミッションも変更しておきます。

gintama@gintama-front:~$ euca-add-keypair silverkey > silverkey.priv
gintama@gintama-front:~$ chmod 600 ~/silverkey.priv

・euca-add-group, euca-describe-group
細かい権限の設定はgroupという単位で管理されます。
groupごとに通信を許可するポートの指定などが行えます。
初期状態ではdefault groupのみが存在します。

gintama@gintama-front:~$ euca-describe-groups
GROUP   admin   default default group

・euca-run-instances
インスタンスの起動を行います。
必ず指定するのはgroup(-g)、keypair(-k)、image_id(emi-*******)の3つ。
インスタンスのCPU数・メモリ容量・ディスク容量はtype(-t)で指定します。

gintama@gintama-front:~$ euca-run-instances -g default -k silverkey -t m1.small emi-E0851072
RESERVATION     r-3339074D      admin   admin-default
INSTANCE        i-47D5088C      emi-E0851072    0.0.0.0 0.0.0.0 pending silverkey       0               m1.small        2010-06-11T02:35:00.451Z        gintama-front   eki-F6F41100        eri-0B6B1169

しばらくしてeuca-descibe-instancesを実行すると、

gintama@gintama-front:~$ euca-describe-instances
RESERVATION     r-3339074D      admin   default
INSTANCE        i-47D5088C      emi-E0851072    192.168.11.201  172.19.1.2      running silverkey       0               m1.small        2010-06-11T02:35:00.451Z        gintama-front       eki-F6F41100    eri-0B6B1169

となり起動していることが確認できます。

・euca-authorize
group単位でのアクセス許可設定です。
Firewallの設定だと考えていただければ、分かりやすいかと思われます。
例えば192.168.11.0/24に対してsshを許可するならこんな感じになります。

gintama@gintama-front:~$ euca-authorize -P tcp -p 22 -s 192.168.11.0/24 default
GROUP   default
PERMISSION      default ALLOWS  tcp     22      22      FROM    CIDR    192.168.11.0/24

前述の通り、sshでのログイン時は公開鍵認証を行います。
# Storeに登録されているイメージの場合、ユーザIDはubuntuを使用します。

gintama@gintama-front:~$ ssh -i silverkey.priv ubuntu@192.168.11.201
Linux ip-172-19-1-2 2.6.32-21-server #32-Ubuntu SMP Fri Apr 16 09:17:34 UTC 2010 x86_64 GNU/Linux
Ubuntu 10.04 LTS
 
Welcome to the Ubuntu Server!
 * Documentation:  http://www.ubuntu.com/server/doc
 
  System information as of Fri Jun 11 02:50:13 UTC 2010
 
  System load: 0.17              Memory usage: 23%   Processes:       64
  Usage of /:  42.7% of 1.36GB   Swap usage:   0%    Users logged in: 0
 
  Graph this data and manage this system at https://landscape.canonical.com/
---------------------------------------------------------------------
At the moment, only the core of the system is installed. To tune the
system to your needs, you can choose to install one or more
predefined collections of software by running the following
command:
 
   sudo tasksel --section server
---------------------------------------------------------------------
 
0 packages can be updated.
0 updates are security updates.
 
 
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
 
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
 
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
 
ubuntu@ip-172-19-1-2:~$

起動したインスタンスに無事ログインすることができました。

だいぶ駆け足でしたが、起動まではこんな感じです。
インストール作業は基本お任せでやってもらったのですが、何の苦労もなく起動しました。
もう少し苦戦するだろうと思っていたのですが。。。

次回は各コマンドの追加説明や、GUIのツールなどについて説明しようと思います。

  1. Cloud Controler, Storage Controller, Warlus []
  2. もう一つはインストーラの手軽さ []
  3. .bashrcであらかじめ読み込むようにしておいたほうが便利です []
    はてなブックマーク - Search Plugin for CakePHPで簡単検索機能実装
    このエントリーをはてなブックマークに追加

    最近CakePHPプラグインづいている小山です。

    今回はCakeDC謹製のSearch Pluginを紹介します。
    (CakePHPのバージョンは1.3.0を想定しています。)

    Search Plugin

    みなさんはCakePHPで検索機能を作るとき、どのように実装していますか?

    たとえば一般的な一覧画面(index)で検索機能を実装しようと思ったら、まずはformを作成して検索条件をPOSTで飛ばして利用すればいいですが、
    さらに最近デフォルトで実装されているページネーション機能と連携して、検索結果でページングを実現しようとするとちょっと面倒です。

    さらに細かい検索条件を実装しようと思ったら、もう考えたくありません。
    自分は新規案件のたびに毎回1からつくっていたような気がします。

    CakePHPのコアデベロッパーの75%を抱える(CakeDCのサイト情報)CakeDCでも、やはり面倒だと思っていたのか、Search Pluginという検索プラグインを作成して使っていたようです。

    最近いくつかのプラグインのソースが公開されたので自分も使ってみました。
    実際に触ってみると面白いくらいに簡単に検索機能が実装できます。

    CakePHPの初期設定

    どれくらい楽かがわかるように、CakePHPをダウンロードしてくるところから実施してみます。

    $ wget http://github.com/cakephp/cakephp1x/tarball/1.3.0
    $ tar zxvf cakephp-cakephp1x-1.3.0-0-g1c06478.tar.gz
    $ mv cakephp-cakephp1x-3bb7793/ cakesearch
    $ cd cakesearch

    次にデータベースを作成します。

    今回はcakesearchというデータベースにpostsというテーブルを作成します。

    次にCakePHPいつもの設定をします。

    appフォルダをそのまま使うつもりですが、app/config/*.phpをいじったりtmpフォルダのパーミッションの設定をするのが面倒なので、今回はbakeコマンドを利用してちょっと楽をします。

    $ php cake/console/cake.php bake

    bakeコマンドメニューの”[D]atabase Configuration”を使ってデータベースの設定をしたあと、”[P]roject”を使ってプロジェクトの設定をします。

    そこで、「What is the full path for this app including the app directory name?」と聞かれるので、ここであえてappフォルダのパスを指定します。

    [/var/www/cakesearch/app/myapp] > /var/www/cakesearch/app

    このあとは導かれるままにEnterを押していくと、app/config/core.phpのSecurity.saltやCakePHP1.3から新たに導入されたSecurity.cipherSeedの設定をしてくれます。app/tmpのパーミッション設定までしてくれています。

    つぎにbakeコマンドを使ってpostsテーブルのMVCのファイルを作成します。

    このとき、「Would you like to create some basic class methods」と聞かれたときにyを選択してindexアクションを作成しておいてください。

    Search Pluginの設定

    さて、ここまででCakePHP自体の設定は終わりです。

    ここからSearch Pluginを導入してみます。

    CakeDCのgithubリポジトリからSearchプラグインをダウンロードして設置します。

    $ cd app/plugins
    $ wget http://github.com/CakeDC/Search/tarball/master
    $ tar zxvf CakeDC-Search-xxxxxx.tar.gz
    $ mv CakeDC-Search-xxxxxx search

    これでSearch Pluginの設置は完了です。
    次にpostsの一覧画面(posts/index)にtitleで検索する機能を実装してみます。

    bakeコマンドで作成されたapp/models/post.phpを以下のように書き換えます。

    $filterArgsは大体想像できると思うのですが、「titleフィールドをLIKEで検索する」ための設定です。typeには他にも完全一致や、サブクエリなどをつかった条件指定などもできます。

    次にapp/controllers/posts_controller.phpを書き換えます。
    (簡単のためindexアクションまでを表示しています)

    $presetVarsは、検索フォーム内のデータを管理するための設定値です。

    $this->Prg->commonProcess()は検索条件のデータのハンドリングを行っています。例えば検索条件自体のバリデーションなどもすることが可能です。

    $this->Post->parseCriteria()は$this->passedArgsと$this->Post->filterArgsを利用して$this->paginateに渡す条件を作成します。

    次にapp/views/posts/index.ctpを書き換えます。
    (簡単のため書き加えた部分周辺のみを表示しています)

    これでbakeコマンドで生成したファイルの修正はすべて終了です。

    なんとこれだけです。
    たったこれだけの修正で、ページネーションと連携したり、検索した条件が保持されたりする検索機能を実装できました。

    まとめ

    今回は、CakeDC謹製 Search Pluginの簡単な導入方法を紹介しました。

    もう少し込み入った使い方などはREADMEなどに詳細に書かれていますので、是非参考にしてみてください。

    • eucalyptus
    はてなブックマーク - Ubuntu 9.10でUEC構築 ~インストール~
    このエントリーをはてなブックマークに追加

    Fusic 平田です。
    「次回は」と書きつつ間が開きすぎて申し訳ありません。
    靭帯が切れたりしていたということで、ご容赦ください。。。

    というわけで、前回の続きでEucalyptusインストールのお話です。

    マシンとネットワーク

    今回使用するマシンのスペックは以下になります。
    Dell PowerEdge T105
    CPU: Quad-core AMD Opteron 1354
    メモリ: 4GB
    HDD: 250GB 7,200rpm
    CPUがAMD-V対応であることを条件に選定しています。
    これを2台使用し、それぞれFrontendとBackendとして使用します。

    ネットワーク構成としては、前回の記事にあった
    ネットワーク構成図
    の構成で組むことにします。

    IPアドレスはそれぞれ以下の通り。
    [Frontend] Cluster Controller他1 : 192.168.11.100/24
    [Backend] Node Controller: 192.168.11.101/24

    仮想インスタンスには、内部IPとして自動的に1つのIPアドレスが割り当てられます。
    これはインスタンス同士、あるいはEucalyptus内部の通信に用いられます。
    これとは別に、外部からの通信用に別途IPアドレスを割り当てることが可能です。
    この「仮想インスタンスが外部とのやりとりに使用するIP」がPublic IPです。
    今回はPublic IPとして192.168.11.201-220/24を割り当てます。

    インストール

    Ubuntu公式サイトからUbuntu 9.10 serverのISOファイルをダウンロードし、インストールCDを作成します。
    作成したCDから起動すると、
    言語の選択
    言語の選択が表示されるので「日本語」を選択します。

    Ubuntu 9.10 Serverから、インストール項目に
    インストール画面
    「Ubuntu エンタープライズ クラウドをインストール」が追加されているので、これを選択します。

    以降は通常のUbuntuインストール手順ですが、途中いくつか異なる点があります。
    Cluster選択
    ClusterとNode、どちらとしてインストールするかを選択。
    Clusterの場合は「Cluster」を、
    Node選択
    Nodeの場合は「Node」を選択します。

    ここで注意点をひとつ。
    Ubuntuでは全体、もしくはホームディレクトリの暗号化が可能です。
    ただし、暗号化したファイルシステムを使用した場合は起動imageが正常に動作しないので、今回は暗号化しません。2
    ディスクガイド
    ホームディレクトリ暗号化

    Cluster側は、さらにいくつか設定項目があります。

    Cluster名入力
    Cluster名の入力。
    任意のCluster名を入力してください。

    Public IP入力
    Public IPの入力。
    今回は「192.168.11.201-220」と入力しました。

    以上でインストールは完了です。

    なお、前回の記事で仮想化技術に対応していないCPUのマシンをNodeにしようとした場合は
    Nodeインストール時の警告画面
    こんなのが出ると書きましたが、これが出るのはインストールの最後です。
    結構げんなりすること請け合いですので、Node側のマシン選定にはご注意ください。
    ちなみにCluster側は出ません。3

    インストールはこれで完了です。
    設定まで含めようと思ったのですが、長くなったので次回に回します。

    1. Cloud Controler, Storage Controller, Warlusが一緒に入ります。 []
    2. ホームディレクトリ上で作業する事が多かったので、ホームディレクトリも暗号化していません。 []
    3. 試しに余ったマシンにClusterを入れてみたところ、仮想インスタンスの起動までは動作しました。 []