fbpx

Cloud Foundryを使ってみよう[8]

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

複数の DEA を起動する

Cloud Foundry の各プロセスは、メッセージングシステムであるNATS (nats-server) を通してメッセージのやりとりを行っています。初期設定ではすべてのプロセスは localhost を NATS として指定していますが、理論上は NATS をハブとして各プロセスを分散して配置することができるはずです。

本項では、DEA (Droplet Execution Agent。Droplet とは、Cloud Foundry に push した、アプリケーション等をアーカイブしたもの)を複数起動することができるかの確認を行います。

cf@ubuntu:~$ ./cloudfoundry/vcap/dea/bin/dea -h
Usage: dea [OPTIONS]
    -c, --config [ARG]               Configuration File
    -s, --secure                     Secure Application Environment
        --disable_dir_cleanup        Don't cleanup App directories
    -h, --help                       Help
cf@ubuntu:~$

DEA の起動オプションで設定ファイルを指定することができます。指定がなければ cloudfoundry/vcap/dea/config/dea.yml を読み込むようになっています。また、最初から cloudfoundry/vcap/dea/config/dea2.yml が用意されているので、別途そちらを指定して、もう1つの DEA を起動することができるようです。

dea.yml と dea2.yml の主な差異は、次の通りです。

dea.yml

base_dir: /var/vcap.local/dea
filer_port: 12345
pid: /var/vcap/sys/run/dea.pid

dea2.yml

base_dir:  /var/vcap.local/dea2
filer_port: 12346
pid: /var/vcap/sys/run/dea2.pid

まず、vcap start で起動した1つ目の DEA のプロセスを確認します。

cf@ubuntu:~/cloudfoundry/vcap/bin$ ps axuwwwf | awk '$2="";$3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}' | grep "[ d]ea"
cf          ruby /home/cf/cloudfoundry/vcap/dea/bin/dea
cf@ubuntu:~/cloudfoundry/vcap/bin$

次に、dea2.yml を指定して、2つ目の DEA を起動します。

cf@ubuntu:~$ cd cloudfoundry/vcap/dea
Using /home/cf/.rvm/gems/ruby-1.9.2-p180
cf@ubuntu:~/cloudfoundry/vcap/dea$ ./bin/dea -c config/dea2.yml
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Starting VCAP DEA (0.99)
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Pid file: /var/vcap/sys/run/dea2.pid
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Using ruby @ /home/cf/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Checking runtimes:
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO --   ruby18:    OK
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO --   ruby19:    OK
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO --   node:      OK
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO --   java:      OK
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Using network: 127.0.0.1
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Socket Limit:1024
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Max Memory set to 4.0G
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Utilizing 1 cpu cores
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Allowing multi-tenancy
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Using directory: /var/vcap.local/dea2/
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- File service started on port: 12346
	:

これで合計 2つの DEA が起動しました。

この状態で、テストアプリケーションを push します。インスタンスを 2つに指定し、自動起動しないようにしておきます。

cf@ubuntu:~/env$ vmc push env --instances 2 --mem 32M --url env.vcap.me -n --no-start
Creating Application: OK
Uploading Application:
  Checking for available resources: OK
  Packing application: OK
  Uploading (0K): OK
Push Status: OK

cf@ubuntu:~/env$ 

cf@ubuntu:~/env$ vmc apps

+-------------+----+---------+-------------+----------+
| Application | #  | Health  | URLS        | Services |
+-------------+----+---------+-------------+----------+
| env         | 2  | STOPPED | env.vcap.me |          |
+-------------+----+---------+-------------+----------+

cf@ubuntu:~/env$

テストアプリケーションを起動します。

cf@ubuntu:~/env$ vmc start env
Staging Application: OK
Starting Application: OK                                                        

cf@ubuntu:~/env$

2つの DEA に、それぞれ 1つずつインスタンスが割り当てられました。

cf@ubuntu:~/env$ ps auxwwwf  | grep -C 3 "[d]ea" | awk '$2="";$3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}'
root          \_ sshd: cf [priv]
cf          \_ sshd: cf@pts/1
cf          \_ -bash
cf          \_ ruby ./bin/dea -c config/dea2.yml
cf          \_ /bin/sh
cf          \_ /bin/bash ./startup -p 34415
cf          \_ /usr/bin/ruby env.rb -p 34415
--
cf          /usr/bin/redis-server /home/cf/cloudfoundry/vcap/bin/config/redis-server.conf
cf          ruby /home/cf/cloudfoundry/vcap/router/bin/router
cf          ruby ./cloud_controller
cf          ruby /home/cf/cloudfoundry/vcap/dea/bin/dea
cf          \_ /bin/sh
cf          \_ /bin/bash ./startup -p 55662
cf          \_ /usr/bin/ruby env.rb -p 55662
cf@ubuntu:~/env$

テストアプリケーションにアクセスしてみると、DEA 2つにそれぞれ適当に振り分けられている様子がわかります。

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:55662

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:34415

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:55662

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:34415

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:55662

cf@ubuntu:~/env$

この状態で、片方の DEA を kill してみます。

cf@ubuntu:~/env$ ps auxwwwf | grep "[ d]ea" | awk '$3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}'
cf 2449         \_ ruby ./bin/dea -c config/dea2.yml
cf 1441         ruby /home/cf/cloudfoundry/vcap/dea/bin/dea
cf@ubuntu:~/env$ 

cf@ubuntu:~/env$ kill 1441
cf@ubuntu:~/env$ 

cf@ubuntu:~/env$ ps auxwwwf | grep "[ d]ea" | awk '$3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}'
cf 2449         \_ ruby ./bin/dea -c config/dea2.yml
cf@ubuntu:~/env$

kill された DEA で起動していたインスタンスが消滅し、もう片方の DEA で同じポートで起動されました。

cf@ubuntu:~/env$ ps auxwwwf | grep -C 5 "[ d]ea" | awk '$3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}'
cf 4685         | \_ grep --color=auto -C 5 [ d]ea
cf 4686         | \_ awk $3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}
root 1987         \_ sshd: cf [priv]
cf 2065         \_ sshd: cf@pts/1
cf 2066         \_ -bash
cf 2449         \_ ruby ./bin/dea -c config/dea2.yml
cf 3181         \_ /bin/sh
cf 3189         | \_ /bin/bash ./startup -p 34415
cf 3191         | \_ /usr/bin/ruby env.rb -p 34415
cf 4542         \_ /bin/sh
cf 4544         \_ /bin/bash ./startup -p 56183
cf@ubuntu:~/env$
cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:56183

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:34415

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:56183

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:34415

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:56183

cf@ubuntu:~/env$

なお、kill した DEA を再度起動しても、そちらにインスタンスが移動することはありません。

cf@ubuntu:~$ cd cloudfoundry/vcap/dea
Using /home/cf/.rvm/gems/ruby-1.9.2-p180
cf@ubuntu:~/cloudfoundry/vcap/dea$ ./bin/dea
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Starting VCAP DEA (0.99)
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Pid file: /var/vcap/sys/run/dea.pid
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Using ruby @ /home/cf/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Checking runtimes:
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   ruby18:    OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   ruby19:    OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   node:      OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   java:      OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   php:       OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   erlangR14B02: OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   python26:  OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Using network: 127.0.0.1
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Socket Limit:1024
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Max Memory set to 4.0G
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Utilizing 1 cpu cores
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Allowing multi-tenancy
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Using directory: /var/vcap.local/dea/
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- File service started on port: 12345
[2012-02-03 23:15:04] dea - 5283 b7c1 c148  DEBUG -- Took 0.000407542 to snapshot application state.

インスタンスを 2つ持った DEA を kill すると、2つのインスタンスはもう片方の DEA で起動し直されます。

cf@ubuntu:~/env$ ps auxwwwf | grep -C 5 "[ d]ea" | awk '$3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}'
cf 2065         | \_ sshd: cf@pts/1
cf 2066         | \_ -bash
root 4940         \_ sshd: cf [priv]
cf 5022         \_ sshd: cf@pts/2
cf 5023         \_ -bash
cf 5283         \_ ruby ./bin/dea
cf 5539         \_ /bin/sh
cf 5552         | \_ /bin/bash ./startup -p 58021
cf 5555         | \_ /usr/bin/ruby env.rb -p 58021
cf 5564         \_ /bin/sh
cf 5566         \_ /bin/bash ./startup -p 33825
cf@ubuntu:~/env$

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA