前の記事でAzureにCloud Foundryをインストールしたが、バックエンドサービスが一つもないので、cf-mysqlを用意してみる。
CF on AzureにMySQLを用意する方法はBOSH Azure CPIのドキュメントに載っているので、基本その通りにやればできる。
ただ、このcf-mysqlはHA対応しており、次のような構成になっている。
BOSH Azure CPIのドキュメントの通りにインストールすると、Proxy 2台、Maria DB Server 3台、Service Broker 2台の構成になって、試用には少し大きい。まずはドキュメント通りインストールして後から縮退する。
最初にMariaDB 3台をそれぞれ別のネットワークに置きたいので、azure cliでsubnetを作る(コンパイル用のsubnetも作るとして、全部で4つのsubnet)
azure network vnet subnet create --resource-group "azure-cf" --vnet-name "boshvnet-crp" --name "mysql1" --address-prefix "10.0.50.0/24"
azure network vnet subnet create --resource-group "azure-cf" --vnet-name "boshvnet-crp" --name "mysql2" --address-prefix "10.0.51.0/24"
azure network vnet subnet create --resource-group "azure-cf" --vnet-name "boshvnet-crp" --name "mysql3" --address-prefix "10.0.52.0/24"
azure network vnet subnet create --resource-group "azure-cf" --vnet-name "boshvnet-crp" --name "compilation" --address-prefix "10.0.53.0/24"
Azureのダッシュボードでサブネットを見ると次のようになっているはず。
次にmanifestファイルを作成する。ここから次の3ファイルをダウンロードする。
cf-infrastructure-azure.yml
cf-mysql-template.yml
sample_azure_stub.yml
このうち、sample_azure_stub.yml
をcf-mysql-azure-stub.yml
にコピーして、REPLACE_XXXX
の部分を自分の環境に合わせて埋める。
前記事の例で言うとdiffは次のような感じになるはず。
1c1
< director_uuid: REPLACE_WITH_YOUR_DIRECTOR_UUID
---
> director_uuid: cf2c3591-2374-456c-bcb3-7901355cd084 # bosh status --uuidで確認
7c7
< environment: REPLACE_WITH_YOUR_ENVIRONMENT_NAME
---
> environment: cf-azure
16c16
< - range: 10.0.32.0/24
---
> - range: 10.0.50.0/24
18c18
< - 10.0.32.2 - 10.0.32.3
---
> - 10.0.50.2 - 10.0.50.3
20,21c20,21
< - 10.0.32.4 - 10.0.32.8
< gateway: 10.0.32.1
---
> - 10.0.50.4 - 10.0.50.8
> gateway: 10.0.50.1
30c30
< - range: 10.0.33.0/24
---
> - range: 10.0.51.0/24
32c32
< - 10.0.33.2 - 10.0.33.3
---
> - 10.0.51.2 - 10.0.51.3
34,35c34,35
< - 10.0.33.4 - 10.0.33.8
< gateway: 10.0.33.1
---
> - 10.0.51.4 - 10.0.51.8
> gateway: 10.0.51.1
44c44
< - range: 10.0.34.0/24
---
> - range: 10.0.52.0/24
46c46
< - 10.0.34.2 - 10.0.34.3
---
> - 10.0.52.2 - 10.0.52.3
48,49c48,49
< - 10.0.34.4 - 10.0.34.8
< gateway: 10.0.34.1
---
> - 10.0.52.4 - 10.0.52.8
> gateway: 10.0.52.1
58c58
< - range: 10.0.35.0/24
---
> - range: 10.0.53.0/24
61c61
< - 10.0.35.2 - 10.0.35.3
---
> - 10.0.53.2 - 10.0.53.3
63,64c63,64
< - 10.0.35.4 - 10.0.35.8
< gateway: 10.0.35.1
---
> - 10.0.53.4 - 10.0.53.8
> gateway: 10.0.53.1
74,76c74,76
< admin_username: REPLACE_WITH_YOUR_CF_ADMIN_USERNAME
< admin_password: REPLACE_WITH_YOUR_CF_ADMIN_PASSWORD
< skip_ssl_validation: REPLACE_WITH_TRUE_OR_FALSE # True if you don't have a trusted SSL certificate, false if you do
---
> admin_username: admin
> admin_password: c1oudc0w
> skip_ssl_validation: true # True if you don't have a trusted SSL certificate, false if you do
78c78
< domain: REPLACE_WITH_YOUR_CF_SYSTEM_DOMAIN # The broker registers a route at p-msyql.external_domain.
---
> domain: azurecf.ik.am # The broker registers a route at p-msyql.external_domain.
80c80
< - REPLACE_WITH_YOUR_CF_APPS_DOMAIN
---
> - azurecf.ik.am
83c83
< password: REPLACE_WITH_NATS_PASSWORD_FROM_CF_RELEASE
---
> password: c1oudc0w
85c85
< - REPLACE_WITH_NATS_IP_ADDRESS_FROM_CF_RELEASE
---
> - 10.0.16.13
90c90
< virtual_network_name: REPLACE_WITH_YOUR_VIRTUAL_NETWORK_NAME
---
> virtual_network_name: boshvnet-crp
92,95c92,95
< mysql1: REPLACE_WITH_YOUR_SUBNET_NAME_1
< mysql2: REPLACE_WITH_YOUR_SUBNET_NAME_2
< mysql3: REPLACE_WITH_YOUR_SUBNET_NAME_3
< compilation: REPLACE_WITH_YOUR_COMPILATION_SUBNET
---
> mysql1: mysql1
> mysql2: mysql2
> mysql3: mysql3
> compilation: compilation
102c102
< admin_password: REPLACE_WITH_A_PASSWORD_YOU_MAKE_UP #The admin password for the MySQL server process
---
> admin_password: mysqlpassword #The admin password for the MySQL server process
104,105c104,105
< username: REPLACE_WITH_A_USERNAME_YOU_MAKE_UP
< password: REPLACE_WITH_A_PASSWORD_YOU_MAKE_UP
---
> username: mysqluser
> password: mysqlpassword
113,115c113,115
< auth_username: REPLACE_WITH_A_USERNAME_YOU_MAKE_UP # eg. cc
< auth_password: REPLACE_WITH_A_PASSWORD_YOU_MAKE_UP
< cookie_secret: REPLACE_WITH_A_PASSWORD_YOU_MAKE_UP
---
> auth_username: mysqluser # eg. cc
> auth_password: mysqlpassword
> cookie_secret: mysqlpassword
119c119
< secret: REPLACE_WITH_A_PASSWORD_YOU_MAKE_UP #Secret used by MySQL dashboard to fetch an OAuth token from UAA
---
> secret: mysqlpassword #Secret used by MySQL dashboard to fetch an OAuth token from UAA
156,157c156,157
< api_username: REPLACE_WITH_A_USERNAME_YOU_MAKE_UP
< api_password: REPLACE_WITH_A_PASSWORD_YOU_MAKE_UP
---
> api_username: mysqluser
> api_password: mysqlpassword
3つのyamlをマージするためにspiff
をダウンロード。
sudo apt-get install unzip
wget https://github.com/cloudfoundry-incubator/spiff/releases/download/v1.0.7/spiff_linux_amd64.zip
unzip spiff_linux_amd64.zip
sudo mv spiff /usr/bin/
マージしてcf-mysql-azure.yml
というBOSHのマニフェストファイルを作成。
spiff merge cf-mysql-template.yml cf-infrastructure-azure.yml cf-mysql-azure-stub.yml > cf-mysql-azure.yml
マニフェストファイルをBOSH Directorに配置して、bosh deploy
$ bosh deployment cf-mysql-azure.yml && bosh -n deploy
Deployment set to `/home/making/bosh-azure-cpi-release/docs/advanced/deploy-mysql/cf-mysql-azure.yml'
Acting as user 'admin' on deployment 'cf-azure-mysql' on 'bosh'
Getting deployment properties from director...
Unable to get properties list from director, trying without it...
Cannot get current deployment information from director, possibly a new deployment
Deploying
---------
Director task 23
Deprecation: Ignoring cloud config. Manifest contains 'networks' section.
Started preparing deployment > Preparing deployment. Done (00:00:01)
Started preparing package compilation > Finding packages to compile. Done (00:00:00)
Started compiling packages
Started compiling packages > cli/24305e50a638ece2cace4ef4803746c0c9fe4bb0
Started compiling packages > mysqlclient/ce95f8ac566f76b650992987d5282ee473356e43
Started compiling packages > ruby/1e7b91e63e8d3a6f55aef4b47b54e334f3a2130b
Started compiling packages > syslog_aggregator/078da6dcb999c1e6f5398a6eb739182ccb4aba25
Done compiling packages > cli/24305e50a638ece2cace4ef4803746c0c9fe4bb0 (00:02:36)
Started compiling packages > common/ba480a46c4b2aa9484fb24ed01a8649453573e6f. Done (00:00:13)
Started compiling packages > golang/9f7c66f922b86570bc366ba071f35fdecde17e8e
Done compiling packages > syslog_aggregator/078da6dcb999c1e6f5398a6eb739182ccb4aba25 (00:02:55)
Started compiling packages > python/4e255efa754d91b825476b57e111345f200944e1
Done compiling packages > golang/9f7c66f922b86570bc366ba071f35fdecde17e8e (00:00:36)
Started compiling packages > check/d6811f25e9d56428a9b942631c27c9b24f5064dc
Done compiling packages > mysqlclient/ce95f8ac566f76b650992987d5282ee473356e43 (00:03:54)
Started compiling packages > boost/3eb8bdb1abb7eff5b63c4c5bdb41c0a778925c31
Done compiling packages > check/d6811f25e9d56428a9b942631c27c9b24f5064dc (00:00:31)
Started compiling packages > bootstrap/97d308ebffa4f8da0c8c93eb1e3310d53461bbf6. Done (00:00:19)
Started compiling packages > acceptance-tests/efb3ddcf58277fc01b0993c91fc831f5a88d4cc8. Done (00:00:43)
Started compiling packages > quota-enforcer/e2c4c9e7d7bbbe4bfdc0866962461b00e654cca3. Done (00:00:18)
Started compiling packages > route-registrar/e2293d2a59214e8840e2c6ca3aa32e5a8faf8558. Done (00:00:19)
Started compiling packages > switchboard/934ee6b7e7ce6a14531bd84aa5d4265e131efb38. Done (00:00:20)
Started compiling packages > gra-log-purger/f02fa5774ab54dbb1b1c3702d03cb929b85d60e6. Done (00:00:16)
Started compiling packages > galera-healthcheck/b59fe51d570da4cff95baab323946f794068f2cf
Done compiling packages > python/4e255efa754d91b825476b57e111345f200944e1 (00:03:25)
Started compiling packages > mariadb_ctrl/3732b3c0c6ab24017104b72bfd3dde609b800566
Done compiling packages > boost/3eb8bdb1abb7eff5b63c4c5bdb41c0a778925c31 (00:02:36)
Started compiling packages > scons/11e7ad3b28b43a96de3df7aa41afddde582fcc38
Done compiling packages > galera-healthcheck/b59fe51d570da4cff95baab323946f794068f2cf (00:00:22)
Done compiling packages > mariadb_ctrl/3732b3c0c6ab24017104b72bfd3dde609b800566 (00:00:23)
Done compiling packages > scons/11e7ad3b28b43a96de3df7aa41afddde582fcc38 (00:00:14)
Started compiling packages > galera/d15a1d2d15e5e7417278d4aa1b908566022b9623
Done compiling packages > ruby/1e7b91e63e8d3a6f55aef4b47b54e334f3a2130b (00:07:48)
Started compiling packages > cf-mysql-broker/47cdbff74dadd949abd599bbd259fe7a53bbd68f. Done (00:01:11)
Done compiling packages > galera/d15a1d2d15e5e7417278d4aa1b908566022b9623 (00:13:39)
Started compiling packages > mariadb/73a290c83b875ab4972465ff8458e745f4d02cf5. Done (00:24:42)
Started compiling packages > xtrabackup/2e701e7a9e4241b28052d984733de36aae152275. Done (00:16:43)
Done compiling packages (01:01:48)
Started creating missing vms
Started creating missing vms > mysql_z1/0 (58f6f463-6ecb-4a8b-a915-00ae4ac2960d)
Started creating missing vms > mysql_z2/0 (b9ce4c91-c332-4ce7-a99d-957eedb257d2)
Started creating missing vms > mysql_z3/0 (2a17bc3a-0b81-410f-8fd0-92ac3ae9f00b)
Started creating missing vms > proxy_z1/0 (1861bda0-e3a2-4a09-9a91-9bca95128bc3)
Started creating missing vms > proxy_z2/0 (25e271ff-f916-421d-bcac-6149bc95b376)
Started creating missing vms > cf-mysql-broker_z1/0 (b213d50b-54a2-403e-a520-9ed5207d9a90)
Started creating missing vms > cf-mysql-broker_z2/0 (0e3bc3a3-2a11-4ecb-b30c-5d59253055b4)
Done creating missing vms > proxy_z1/0 (1861bda0-e3a2-4a09-9a91-9bca95128bc3) (00:02:07)
Done creating missing vms > cf-mysql-broker_z2/0 (0e3bc3a3-2a11-4ecb-b30c-5d59253055b4) (00:02:18)
Done creating missing vms > mysql_z1/0 (58f6f463-6ecb-4a8b-a915-00ae4ac2960d) (00:02:20)
Done creating missing vms > mysql_z3/0 (2a17bc3a-0b81-410f-8fd0-92ac3ae9f00b) (00:02:21)
Done creating missing vms > cf-mysql-broker_z1/0 (b213d50b-54a2-403e-a520-9ed5207d9a90) (00:02:30)
Done creating missing vms > proxy_z2/0 (25e271ff-f916-421d-bcac-6149bc95b376) (00:02:33)
Done creating missing vms > mysql_z2/0 (b9ce4c91-c332-4ce7-a99d-957eedb257d2) (00:03:05)
Done creating missing vms (00:03:05)
Started updating job mysql_z1 > mysql_z1/0 (58f6f463-6ecb-4a8b-a915-00ae4ac2960d) (canary). Done (00:02:50)
Started updating job mysql_z2 > mysql_z2/0 (b9ce4c91-c332-4ce7-a99d-957eedb257d2) (canary). Done (00:03:47)
Started updating job mysql_z3 > mysql_z3/0 (2a17bc3a-0b81-410f-8fd0-92ac3ae9f00b) (canary). Done (00:03:15)
Started updating job proxy_z1 > proxy_z1/0 (1861bda0-e3a2-4a09-9a91-9bca95128bc3) (canary). Done (00:00:53)
Started updating job proxy_z2 > proxy_z2/0 (25e271ff-f916-421d-bcac-6149bc95b376) (canary). Done (00:00:52)
Started updating job cf-mysql-broker_z1 > cf-mysql-broker_z1/0 (b213d50b-54a2-403e-a520-9ed5207d9a90) (canary). Done (00:01:17)
Started updating job cf-mysql-broker_z2 > cf-mysql-broker_z2/0 (0e3bc3a3-2a11-4ecb-b30c-5d59253055b4) (canary). Done (00:01:16)
Task 23 done
Started 2016-09-14 17:17:28 UTC
Finished 2016-09-14 18:39:35 UTC
Duration 01:22:07
Deployed `cf-azure-mysql' to `bosh'
mariadbなどのコンパイルに結構時間かかり、デプロイは1時間20分ほど要する。
$ bosh vms
Acting as user 'admin' on 'bosh'
Deployment `cf-azure-mysql'
Director task 45
Task 45 done
+-------------------------------------------------------------+---------+-----+--------------------+-----------+
| VM | State | AZ | VM Type | IPs |
+-------------------------------------------------------------+---------+-----+--------------------+-----------+
| cf-mysql-broker_z1/0 (b213d50b-54a2-403e-a520-9ed5207d9a90) | running | n/a | cf-mysql-broker_z1 | 10.0.50.9 |
| cf-mysql-broker_z2/0 (0e3bc3a3-2a11-4ecb-b30c-5d59253055b4) | running | n/a | cf-mysql-broker_z2 | 10.0.51.9 |
| mysql_z1/0 (58f6f463-6ecb-4a8b-a915-00ae4ac2960d) | running | n/a | mysql_z1 | 10.0.50.4 |
| mysql_z2/0 (b9ce4c91-c332-4ce7-a99d-957eedb257d2) | running | n/a | mysql_z2 | 10.0.51.4 |
| mysql_z3/0 (2a17bc3a-0b81-410f-8fd0-92ac3ae9f00b) | running | n/a | mysql_z3 | 10.0.52.4 |
| proxy_z1/0 (1861bda0-e3a2-4a09-9a91-9bca95128bc3) | running | n/a | proxy_z1 | 10.0.50.5 |
| proxy_z2/0 (25e271ff-f916-421d-bcac-6149bc95b376) | running | n/a | proxy_z2 | 10.0.51.5 |
+-------------------------------------------------------------+---------+-----+--------------------+-----------+
VMs total: 7
Deployment `multiple-cf-on-azure'
Director task 46
Task 46 done
+---------------------------------------------------------------------------+---------+-----+-------------+---------------+
| VM | State | AZ | VM Type | IPs |
+---------------------------------------------------------------------------+---------+-----+-------------+---------------+
| access_z1/0 (74a1ab9d-32c9-46aa-9903-1430ed474249) | running | n/a | resource_z1 | 10.0.16.109 |
| api_z1/0 (47cffc4f-e68f-450f-ad55-e016b3ec7e01) | running | n/a | resource_z1 | 10.0.16.102 |
| brain_z1/0 (6a0ed991-b9ad-4743-b5c6-60eef37c1a51) | running | n/a | resource_z1 | 10.0.16.106 |
| cc_bridge_z1/0 (7001782d-97d4-48e0-a288-b49fe99e907e) | running | n/a | resource_z1 | 10.0.16.108 |
| cell_z1/0 (46f83357-a890-463d-9f34-ff6e37082a32) | running | n/a | resource_z1 | 10.0.16.107 |
| consul_z1/0 (eb86b16c-aee0-4711-8a4d-c1046e666d43) | running | n/a | resource_z1 | 10.0.16.16 |
| database_z1/0 (e42d51b8-2509-4aa6-a5de-c26ff161746c) | running | n/a | resource_z1 | 10.0.16.105 |
| doppler_z1/0 (facd13de-9e7e-4919-a21f-f8c25dcb76e0) | running | n/a | resource_z1 | 10.0.16.103 |
| etcd_z1/0 (0b0d0610-35e9-4a18-8861-3e5bd6c2bbb8) | running | n/a | resource_z1 | 10.0.16.14 |
| ha_proxy_z1/0 (b0e54bf1-20e8-4861-8ec6-3897a5e04177) | running | n/a | resource_z1 | 10.0.16.4 |
| | | | | 13.78.121.100 |
| loggregator_trafficcontroller_z1/0 (89e9789a-cf8d-481c-b4bd-e71de58947a3) | running | n/a | resource_z1 | 10.0.16.104 |
| nats_z1/0 (f7bfc395-4168-41ac-b40c-61810927baff) | running | n/a | resource_z1 | 10.0.16.13 |
| nfs_z1/0 (ab811af8-9e12-4f03-bede-cb6488ab13be) | running | n/a | resource_z1 | 10.0.16.15 |
| postgres_z1/0 (e0da4072-bff1-42a5-b6db-2d4e6876810a) | running | n/a | resource_z1 | 10.0.16.11 |
| route_emitter_z1/0 (dff8bc35-5020-4c62-a3b9-387d719e2546) | running | n/a | resource_z1 | 10.0.16.110 |
| router_z1/0 (50ec2d18-6971-49d2-bd14-d2b6946b18f0) | running | n/a | resource_z1 | 10.0.16.12 |
| uaa_z1/0 (f04a9a3d-3b70-4fbc-b52d-979f9064d905) | running | n/a | resource_z1 | 10.0.16.101 |
+---------------------------------------------------------------------------+---------+-----+-------------+---------------+
VMs total: 17
Proxyにアクセス(https://proxy-0-p-mysql.<cf system domain>
)すると3ノード認識されていることがわかる。
次にService BrokerをCloud Foundryに登録して、cf marketplace
からこのMySQLを使えるようにする。
$ bosh run errand broker-registrar
Acting as user 'admin' on deployment 'cf-azure-mysql' on 'bosh'
Director task 47
Started preparing deployment > Preparing deployment. Done (00:00:00)
Started preparing package compilation > Finding packages to compile. Done (00:00:00)
Started creating missing vms > broker-registrar/0 (f878d368-eafa-4c16-9891-12581b66caa4). Done (00:02:38)
Started updating job broker-registrar > broker-registrar/0 (f878d368-eafa-4c16-9891-12581b66caa4) (canary). Done (00:00:44)
Started running errand > broker-registrar/0. Done (00:00:03)
Started fetching logs for broker-registrar/f878d368-eafa-4c16-9891-12581b66caa4 (0) > Finding and packing log files. Done (00:00:01)
Started deleting errand instances broker-registrar > broker-registrar/0 (f878d368-eafa-4c16-9891-12581b66caa4). Done (00:02:40)
Task 47 done
Started 2016-09-15 00:02:42 UTC
Finished 2016-09-15 00:08:49 UTC
Duration 00:06:07
[stdout]
CF_API_URL=https://api.azurecf.ik.am
CF_SKIP_SSL_VALIDATION=true
CF_ADMIN_USERNAME=admin
BROKER_NAME=p-mysql
BROKER_URL=https://p-mysql.azurecf.ik.am:443
BROKER_USERNAME=mysqluser
Setting api endpoint to https://api.azurecf.ik.am...
OK
API endpoint: https://api.azurecf.ik.am (API version: 2.57.0)
Not logged in. Use 'cf login' to log in.
API endpoint: https://api.azurecf.ik.am
Authenticating...
OK
Use 'cf target' to view or set your target org and space
Service broker does not exist - creating broker
Creating service broker p-mysql as admin...
OK
Enabling access of plan 100mb for service p-mysql as admin...
OK
Enabling access of plan 1gb for service p-mysql as admin...
OK
[stderr]
None
Errand `broker-registrar' completed successfully (exit code 0)
念の為、Service Brokerの/v2/catalog
APIにアクセス。
$ curl -u mysqluser:mysqlpassword -k https://p-mysql.azurecf.ik.am/v2/catalog | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 14529 0 14529 0 0 261k 0 --:--:-- --:--:-- --:--:-- 262k
{
"services": [
{
"dashboard_client": {
"redirect_uri": "https://p-mysql.azurecf.ik.am/",
"secret": "mysqlpassword",
"id": "p-mysql"
},
"id": "44b26033-1f54-4087-b7bc-da9652c2a539",
"name": "p-mysql",
"description": "MySQL databases on demand",
"tags": [
"mysql"
],
"metadata": {
"supportUrl": "https://support.pivotal.io",
"documentationUrl": "https://github.com/cloudfoundry/cf-mysql-release/blob/master/README.md",
"providerDisplayName": "Pivotal Software",
"longDescription": "Creating a service instance provisions a database. Binding applications provisions unique credentials for each application to access the database.",
"imageUrl": "data:image/png;base64,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",
"displayName": "MySQL for Pivotal Cloud Foundry"
},
"plan_updateable": true,
"plans": [
{
"metadata": {
"displayName": "100 MB",
"bullets": [
"Shared MySQL server",
"100 MB storage",
"20 concurrent connections"
],
"costs": [
{
"unit": "MONTH",
"amount": {
"usd": 0
}
}
]
},
"description": "Shared MySQL Server",
"name": "100mb",
"id": "ab08f1bc-e6fc-4b56-a767-ee0fea6e3f20"
},
{
"metadata": {
"displayName": "1 GB",
"bullets": [
"Shared MySQL server",
"1000 MB storage",
"40 concurrent connections"
],
"costs": [
{
"unit": "MONTH",
"amount": {
"usd": 0
}
}
]
},
"description": "Shared MySQL Server",
"name": "1gb",
"id": "11d0aa36-dcec-4021-85f5-ea4d9a5c8342"
}
],
"bindable": true
}
]
}
問題なし。マーケットプレースにも登録されている🙌
$ cf marketplace
Getting services from marketplace in org default_organization / space demo as admin...
OK
service plans description
p-mysql 100mb, 1gb MySQL databases on demand
TIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.
このままでも使えるが、今回はHA不要として、1ノードに縮退する。マニフェストファイルのうち、2台目以降のinstances
を0にして、10.0.51.x
と10.0.52.x
のIPをコメントアウトする。
27,28c27,28
< - 10.0.51.4
< - 10.0.52.4
---
> # - 10.0.51.4
> # - 10.0.52.4
41c41
< - instances: 1
---
> - instances: 0
45,46c45,46
< static_ips:
< - 10.0.51.4
---
> # static_ips:
> # - 10.0.51.4
69c69
< - instances: 1
---
> - instances: 0
73,74c73,74
< static_ips:
< - 10.0.52.4
---
> # static_ips:
> # - 10.0.52.4
106,107c106,107
< - 10.0.51.4
< - 10.0.52.4
---
> # - 10.0.51.4
> # - 10.0.52.4
123c123
< - 10.0.51.5
---
> # - 10.0.51.5
129c129
< - instances: 1
---
> - instances: 0
133,134c133,134
< static_ips:
< - 10.0.51.5
---
> # static_ips:
> # - 10.0.51.5
244c244
< - instances: 1
---
> - instances: 0
487,488c487,488
< - 10.0.51.4
< - 10.0.52.4
---
> #- 10.0.51.4
> #- 10.0.52.4
567,568c567,568
< - 10.0.51.4
< - 10.0.52.4
---
> # - 10.0.51.4
> # - 10.0.52.4
571c571
< - 10.0.51.5
---
> # - 10.0.51.5
変更後のマニフェスト例はこちら。
変更したら再度bosh deploy
。
$ bosh -n deploy
Acting as user 'admin' on deployment 'cf-azure-mysql' on 'bosh'
Getting deployment properties from director...
Detecting deployment changes
----------------------------
Releases
cf-mysql
version type changed: String -> Fixnum
- 25
+ 25
Compilation
No changes
Update
No changes
Resource pools
No changes
Disk pools
No changes
Networks
No changes
Jobs
mysql_z1
properties
± cluster_ips:
- 10.0.51.4
- 10.0.52.4
mysql_z2
± instances:
- 1
+ 0
± networks:
- {"name"=>"mysql2", "static_ips"=>["10.0.51.4"]}
+ {"name"=>"mysql2"}
mysql_z3
± instances:
- 1
+ 0
± networks:
- {"name"=>"mysql3", "static_ips"=>["10.0.52.4"]}
+ {"name"=>"mysql3"}
proxy_z1
properties
± cluster_ips:
- 10.0.51.4
- 10.0.52.4
proxy
± proxy_ips:
- 10.0.51.5
proxy_z2
± instances:
- 1
+ 0
± networks:
- {"name"=>"mysql2", "static_ips"=>["10.0.51.5"]}
+ {"name"=>"mysql2"}
cf-mysql-broker_z2
± instances:
- 1
+ 0
bootstrap
properties
± cluster_ips:
- 10.0.51.4
- 10.0.52.4
Properties
± default_mysql_cluster_ips:
- 10.0.51.4
- 10.0.52.4
± default_proxy_ips:
- 10.0.51.5
Meta
No changes
Deploying
---------
Director task 60
Deprecation: Ignoring cloud config. Manifest contains 'networks' section.
Started preparing deployment > Preparing deployment. Done (00:00:00)
Started preparing package compilation > Finding packages to compile. Done (00:00:00)
Started updating job mysql_z1 > mysql_z1/0 (58f6f463-6ecb-4a8b-a915-00ae4ac2960d) (canary). Done (00:00:59)
Started deleting unneeded instances mysql_z2 > mysql_z2/0 (b9ce4c91-c332-4ce7-a99d-957eedb257d2). Done (00:02:01)
Started deleting unneeded instances mysql_z3 > mysql_z3/0 (2a17bc3a-0b81-410f-8fd0-92ac3ae9f00b). Done (00:02:49)
Started updating job proxy_z1 > proxy_z1/0 (1861bda0-e3a2-4a09-9a91-9bca95128bc3) (canary). Done (00:00:44)
Started deleting unneeded instances proxy_z2 > proxy_z2/0 (25e271ff-f916-421d-bcac-6149bc95b376). Done (00:02:41)
Started deleting unneeded instances cf-mysql-broker_z2 > cf-mysql-broker_z2/0 (0e3bc3a3-2a11-4ecb-b30c-5d59253055b4). Done (00:02:51)
Task 60 done
Started 2016-09-15 02:46:45 UTC
Finished 2016-09-15 02:58:51 UTC
Duration 00:12:06
Deployed `cf-azure-mysql' to `bosh'
Proxy、 MariaDB Server、Service Brokerがそれぞれ1台(10.0.50.x
)になっていることがわかる。
$ bosh vms
Acting as user 'admin' on 'bosh'
Deployment `cf-azure-mysql'
Director task 67
Task 67 done
+-------------------------------------------------------------+---------+-----+--------------------+-----------+
| VM | State | AZ | VM Type | IPs |
+-------------------------------------------------------------+---------+-----+--------------------+-----------+
| cf-mysql-broker_z1/0 (b213d50b-54a2-403e-a520-9ed5207d9a90) | running | n/a | cf-mysql-broker_z1 | 10.0.50.9 |
| mysql_z1/0 (58f6f463-6ecb-4a8b-a915-00ae4ac2960d) | running | n/a | mysql_z1 | 10.0.50.4 |
| proxy_z1/0 (1861bda0-e3a2-4a09-9a91-9bca95128bc3) | running | n/a | proxy_z1 | 10.0.50.5 |
+-------------------------------------------------------------+---------+-----+--------------------+-----------+
VMs total: 3
Deployment `multiple-cf-on-azure'
Director task 68
Task 68 done
+---------------------------------------------------------------------------+---------+-----+-------------+---------------+
| VM | State | AZ | VM Type | IPs |
+---------------------------------------------------------------------------+---------+-----+-------------+---------------+
| access_z1/0 (74a1ab9d-32c9-46aa-9903-1430ed474249) | running | n/a | resource_z1 | 10.0.16.109 |
| api_z1/0 (47cffc4f-e68f-450f-ad55-e016b3ec7e01) | running | n/a | resource_z1 | 10.0.16.102 |
| brain_z1/0 (6a0ed991-b9ad-4743-b5c6-60eef37c1a51) | running | n/a | resource_z1 | 10.0.16.106 |
| cc_bridge_z1/0 (7001782d-97d4-48e0-a288-b49fe99e907e) | running | n/a | resource_z1 | 10.0.16.108 |
| cell_z1/0 (46f83357-a890-463d-9f34-ff6e37082a32) | running | n/a | resource_z1 | 10.0.16.107 |
| consul_z1/0 (eb86b16c-aee0-4711-8a4d-c1046e666d43) | running | n/a | resource_z1 | 10.0.16.16 |
| database_z1/0 (e42d51b8-2509-4aa6-a5de-c26ff161746c) | running | n/a | resource_z1 | 10.0.16.105 |
| doppler_z1/0 (facd13de-9e7e-4919-a21f-f8c25dcb76e0) | running | n/a | resource_z1 | 10.0.16.103 |
| etcd_z1/0 (0b0d0610-35e9-4a18-8861-3e5bd6c2bbb8) | running | n/a | resource_z1 | 10.0.16.14 |
| ha_proxy_z1/0 (b0e54bf1-20e8-4861-8ec6-3897a5e04177) | running | n/a | resource_z1 | 10.0.16.4 |
| | | | | 13.78.121.100 |
| loggregator_trafficcontroller_z1/0 (89e9789a-cf8d-481c-b4bd-e71de58947a3) | running | n/a | resource_z1 | 10.0.16.104 |
| nats_z1/0 (f7bfc395-4168-41ac-b40c-61810927baff) | running | n/a | resource_z1 | 10.0.16.13 |
| nfs_z1/0 (ab811af8-9e12-4f03-bede-cb6488ab13be) | running | n/a | resource_z1 | 10.0.16.15 |
| postgres_z1/0 (e0da4072-bff1-42a5-b6db-2d4e6876810a) | running | n/a | resource_z1 | 10.0.16.11 |
| route_emitter_z1/0 (dff8bc35-5020-4c62-a3b9-387d719e2546) | running | n/a | resource_z1 | 10.0.16.110 |
| router_z1/0 (50ec2d18-6971-49d2-bd14-d2b6946b18f0) | running | n/a | resource_z1 | 10.0.16.12 |
| uaa_z1/0 (f04a9a3d-3b70-4fbc-b52d-979f9064d905) | running | n/a | resource_z1 | 10.0.16.101 |
+---------------------------------------------------------------------------+---------+-----+-------------+---------------+
VMs total: 17
Proxyを見ても1ノードだけになっている。
あとは普通に使えばOK👍
$ cf create-service p-mysql 100mb demo-db
Creating service instance demo-db in org default_organization / space demo as admin...
OK
$ cf services
Getting services in org default_organization / space demo as admin...
OK
name service plan bound apps last operation
demo-db p-mysql 100mb create succeeded
$ cf bind-service demo-app demo-db
Binding service demo-db to app demo-app in org default_organization / space demo as admin...
OK
TIP: Use 'cf restage demo-app' to ensure your env variable changes take effect
$ cf env demo-app
Getting env variables for app demo-app in org default_organization / space demo as admin...
OK
System-Provided:
{
"VCAP_SERVICES": {
"p-mysql": [
{
"credentials": {
"hostname": "10.0.50.5",
"jdbcUrl": "jdbc:mysql://10.0.50.5:3306/cf_a8a8ca5b_f3b2_46c7_90c8_81d659ba4530?user=taed8moNPw0pNACn\u0026password=zZnXpiPG8hRGV3yV",
"name": "cf_a8a8ca5b_f3b2_46c7_90c8_81d659ba4530",
"password": "zZnXpiPG8hRGV3yV",
"port": 3306,
"uri": "mysql://taed8moNPw0pNACn:zZnXpiPG8hRGV3yV@10.0.50.5:3306/cf_a8a8ca5b_f3b2_46c7_90c8_81d659ba4530?reconnect=true",
"username": "taed8moNPw0pNACn"
},
"label": "p-mysql",
"name": "demo-db",
"plan": "100mb",
"provider": null,
"syslog_drain_url": null,
"tags": [
"mysql"
],
"volume_mounts": []
}
]
}
}
{
"VCAP_APPLICATION": {
"application_id": "92d6f5b8-01f9-4504-baff-59475cf7e2e0",
"application_name": "demo-app",
"application_uris": [
"demo-app.azurecf.ik.am"
],
"application_version": "90527843-c56d-4d1b-88c1-bfb94ccb5ff8",
"limits": {
"disk": 1024,
"fds": 16384,
"mem": 8
},
"name": "demo-app",
"space_id": "f7798e39-7ac0-4295-98ee-a66c96e63baf",
"space_name": "demo",
"uris": [
"demo-app.azurecf.ik.am"
],
"users": null,
"version": "90527843-c56d-4d1b-88c1-bfb94ccb5ff8"
}
}
User-Provided:
No running env variables have been set
No staging env variables have been set
MySQLができたので、次はAzureサービスのService Brokerに行きたい。