Cloud Foundryを複数ホストで動かした。
前回の続き。Cloud Foundryが4ホストで動いたのでその設定を書く。ネタ元はこちら→How to install Cloud Foundry on multiple hosts
これでやっと、「それMicro Cloud Foundryでもできるわー」と言われなくなる。
各ホスト共通のインストール手順
cloudfoundry / vcapのInstall、Step2までを実行。
必要ないサービスまで入ってしまう(例えば、mysqlはホスト4しか必要ない)が、各ホストをVMのコピーにより作成したので今回は手抜き。
各サーバ個別の設定手順
作業は全て、vcapのインストールされる ~/cloudfoundry/vcap で行う。
ホスト1 (Router)
mbusのアドレスをホスト2(cloud_controller)のアドレスに変更する。
% vim router/config/router.yml -mbus: nats://localhost:4222 +mbus: nats://172.16.0.2:4222 % ruby bin/vcap start router router : RUNNING
ホスト2 (Cloud Controller, Health Manager)
localhostをホスト2自身のアドレスに変更する。
% vim cloud_controller/config/cloud_controller.yml -local_route: 127.0.0.1 +local_route: 172.16.0.2 -mbus: nats://localhost:4222/ +mbus: nats://172.16.0.2:4222/ % vim health_manager/config/health_manager.yml -local_route: 127.0.0.1 +local_route: 172.16.0.2 -mbus: nats://localhost:4222/ +mbus: nats://172.16.0.2:4222/ % ruby bin/vcap start cloud_controller health_manager cloud_controller : RUNNING health_manager : RUNNING
ホスト3 (DEA)
local_routeを自身のアドレスに、mbusのアドレスをホスト2(cloud_controller)のアドレスに変更する。
% vim dea/config/dea.yml -local_route: 127.0.0.1 +local_route: 172.16.0.3 -mbus: nats://localhost:4222/ +mbus: nats://172.16.0.2:4222/ % ruby bin/vcap start dea dea : RUNNING
ホスト4 (Services)
ip_routeを自身のアドレスに、mbusのアドレスをホスト2(cloud_controller)のアドレスに変更する。mysql以外についても(たぶん)同様。
% vim mysql/config/mysql_gateway.yml -ip_route: localhost +ip_route: 172.16.0.4 -mbus: nats://localhost:4222 +mbus: nats://172.16.0.2:4222 % vim mysql/config/mysql_node.yml -ip_route: 127.0.0.1 +ip_route: 172.16.0.4 -mbus: nats://localhost:4222 +mbus: nats://172.16.0.2:4222
また、mysql_gatewayがcloud_controllerと通信するために、ホスト2の cloud_controller/config/cloud_controller.yml に書かれたexternal_uri(デフォルトだとapi.vcap.me)の名前解決が必要。
% sudo vim /etc/hosts
+ 172.16.0.2 api.vcap.me
また、vcapのインストールスクリプトでmysqlをインストールした場合、デフォルトたとlocalhostにしかbindしていないので、設定変更と再起動が必要。(こんなところではまった、、)
% sudo vim /etc/mysql/my.cnf
[mysqld]
+bind-address = 0.0.0.0
% sudo /etc/init.d/mysql restart
% ruby bin/vcap start mysql
mysql_gateway : RUNNING
mysql_node : RUNNING
動作確認
トンネルはrouterであるホスト1に掘る。
% sudo ssh -L 80:172.16.0.1:80 kawag@172.16.0.1 -N
mysqlを利用する適当なRailsアプリをvmc pushすると、ホスト4にDBが作られる。
% rails -v Rails 3.0.9 % vmc target api.vcap.me % rails new cftest -d mysql % cd cftest % bundle install --path vendor/bundle % rails generate scaffold post title:string content:text % vmc push cftest Would you like to deploy from the current directory? [Yn]: Application Deployed URL: 'cftest.vcap.me'? Detected a Rails Application, is this correct? [Yn]: Memory Reservation [Default:256M] (64M, 128M, 256M, 512M or 1G) Creating Application: OK Would you like to bind any services to 'cftest'? [yN]: y The following system services are available: 1. mongodb 2. mysql 3. neo4j 4. redis Please select one you wish to provision: 2 Specify the name of the service [mysql-b3e5f]: Creating Service: OK Binding Service: OK Uploading Application: Checking for available resources: OK Processing resources: OK Packing application: OK Uploading (129K): OK Push Status: OK Staging Application: OK Starting Application: OK
今後の予定
cloud_controllerが複数あったら勝手に負荷分散するの?とかその辺がよくわからないので調べたい。そろそろ気合入れてソース読まないとしんどそうな感じ。