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が複数あったら勝手に負荷分散するの?とかその辺がよくわからないので調べたい。そろそろ気合入れてソース読まないとしんどそうな感じ。