IK.AM

@making's tech note


Cloud Foundry on Azureにcf-mysqlをインストール

🗃 {Dev/PaaS/CloudFoundry}
🏷 Azure 🏷 BOSH 🏷 Cloud Foundry 🏷 MySQL 🏷 MariaDB 
🗓 Updated at 2016-09-15T13:16:30Z  🗓 Created at 2016-09-15T03:52:33Z   🌎 English Page

前の記事でAzureにCloud Foundryをインストールしたが、バックエンドサービスが一つもないので、cf-mysqlを用意してみる。

CF on AzureにMySQLを用意する方法はBOSH Azure CPIのドキュメントに載っているので、基本その通りにやればできる。

ただ、このcf-mysqlはHA対応しており、次のような構成になっている。

p-mysql

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.ymlcf-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ノード認識されていることがわかる。

proxy

次に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.x10.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ノードだけになっている。

p-mysql.png

あとは普通に使えば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に行きたい。


✒️️ Edit  ⏰ History  🗑 Delete