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$