Skip to content

使用 a9s PostgreSQL

本部分介绍了如何使用 a9s PostgreSQL。

在应用中使用 a9s PostgreSQL

要在应用中使用 a9s PostgreSQL,请按照本部分介绍的步骤创建服务实例并将服务实例绑定到应用中。有关管理服务实例的详细信息,请参见使用 cf CLI 管理服务实例

查看 a9s PostgreSQL 服务

服务安装完成后,postgresql 及其服务计划会显示在 CF marketplace 中。运行 cf marketplace 查看服务列表:

$ cf marketplace
Getting services from marketplace in org test / space test as admin...
OK

service         plans                             description
postgresql      postgresql-xs, postgresql-m       This is the anynines PostgreSQL 9.4 service.

请参见下一部分了解如何根据 cf marketplace 输出中列出的计划创建 PostgreSQL 服务实例。

创建服务实例

要配置 PostgreSQL 数据库,请运行 cf create-service

```shell tab="Template" cf create-service {service_name} {service_plan} {instance_name}

```shell tab="Example"
cf create-service postgresql postgresql-xs my-postgresql-service

服务和服务计划名称

在 Cloud Foundry 环境中,服务和服务计划的名称名称可能不同。使用 cf marketplace 命令查找可用服务的正确名称。

创建服务实例可能需要几分钟的时间,具体取决于您的基础架构和服务代理使用情况。

使用 cf services 检查创建状态。此命令将显示所有服务实例的列表。要检查特定服务实例的状态,请运行 cf service {instance_name}

将应用绑定到服务实例

创建数据库后,运行 cf bind-service 将服务绑定到应用:

```shell tab="Template" cf bind-service {app_name} {instance_name}

```shell tab="Example"
cf bind-service postgresql-app my-postgresql-service

重新载入或重新启动应用

要使应用能够访问服务实例,请运行 cf restagecf restart 来重新载入或重新启动应用。

获取服务实例访问凭证

将服务实例绑定到应用后,PostgreSQL 数据库的凭证将存储在应用的环境 variable 中。运行 cf env APP-NAME 显示环境 variable。

可以从 VCAP_SERVICES 密钥中获取凭证。

```shell tab="Template" cf env {app_name}

```shell tab="Example"
$ cf env postgresql-app
Getting env variables for app postgresql-app in org test / space test as admin...
OK

System-Provided:
{
 "VCAP_SERVICES": {
 "postgresql": [
 {
 "credentials": {
 "host":"EXAMPLE-HOST",
 "name": "d92e2bd",
 "password":"EXAMPLE-PASSWORD",
 "port":5432,
 "uri":"EXAMPLE-URI",
 "username":"EXAMPLE-USERNAME"
 },
 "label": "postgresql",
 "name": "my-postgresql-service",
 "plan": "postgresql-xs",
 "tags": [
 "sql",
 "database"
 ]
 }
 ]
 }
}
...

您可以在 PostgreSQL 客户端使用 host、用户名和密码连接到数据库。

删除 a9s PostgreSQL 服务实例

警告

在删除服务实例之前,必须对数据库中存储的数据进行备份。服务实例删除操作无法撤消,一旦服务删除,所有数据都将丢失。

必须先解除服务实例与所有应用之间的绑定,然后才能删除服务实例。

列出可用服务

运行 cf services 列出可用服务。

```shell tab="Template" cf services

```shell tab="Example"
$ cf services

Getting services in org test / space test as admin...
OK

name service plan bound apps last operation
my-postgresql-service postgresql postgresql-xs postgresql-app create succeeded

在此示例中,将 my-postgresql-service 绑定到 postgresql-app 应用上。

解绑服务实例

运行 cf unbind 可以解除应用与服务间的绑定关系:

```shell tab="Template" cf unbind-service {app_name} {instance_name}

```shell tab="Example"
cf unbind-service postgresql-app my-postgresql-service

删除服务实例

解除绑定后,服务不再绑定在应用上。运行 cf delete-service 删除服务:

```shell tab="Template" cf delete-service {instance_name}

```shell tab="Example"
cf delete-service my-postgresql-service

删除服务可能需要几分钟的时间。删除服务会删除相应的基础架构资源。运行 cf services 命令可以查看删除状态。

将服务实例升级到其它服务计划

服务实例创建后,您可以将其升级到其它较大的服务计划。较大的服务计划提供更多的 CPU、RAM 和存储资源。有关详细信息,请参见更新服务​​实例

```shell tab="Template" cf update-service {instance_name} -p {service_plan}

```shell tab="Example"
cf update-service my-postgresql-service -p a-bigger-plan

您可以根据当前使用的计划选择升级计划:

  • 如果您当前正在使用 postgresql-xs 计划,则可以升级到 postgresql-m 计划。

添加 Graphite 端点

如果要使用 Graphite 来监控服务,您可以设置一个端点,使用 cf update-service 命令可以向该端点发送信息。此命令需要提供 -c flag 和包含 graphitemetrics_prefix 键的 JSON 字符串。 metrics_prefix 可能会要求每个指标名称必须以 API 密钥开头,具体取决于您的 graphite 供应商。您还可以更改向端点发送数据的间隔。interval 默认为 10 秒。

cf update-service my-postgresql-service -c '{ "graphite": ["yourspace.your-graphite-endpoint.com:12345"], "metrics_prefix": "your-api-key.my-cluster-postgresql", "interval":"5"}'

添加 Syslog 端点

使用 cf update-service 命令与 -c flag 可以将 syslog 流式传输到第三方服务。在这种情况下,该命令需要一个包含 syslog 键的 JSON 字符串。您还可以使用与 graphite 端点 interval 相同的键来更改 syslog 的间隔。

cf update-service my-postgresql-service -c '{ "syslog": ["logs4.your-syslog-endpoint.com:54321"], "interval":"5" }'

Cloud Foundry 应用安全组

本部分介绍了判断安全组是否已创建的方法。

每个 a9s 数据服务都将自动创建并更新 Cloud Foundry 安全组,以防止未在同一个 Cloud Foundry 应用空间中运行的应用访问该实例。有关安全组的详细信息,请参见了解应用安全组

获取服务实例 GUID

运行 cf service INSTANCE_NAME --guid 获取服务实例的 GUID。

```shell tab="Template" cf service {instance_name} --guid

```shell tab="Example"
$ cf service my-postgresql --guid
ca16f111-5073-40b7-973a-156c75dd3028

检查可用的安全组

要查看所有可用的安全组,请使用 cf security-groups

$cf security-groups
Getting security groups as demo@anynines.com
OK

 Name Organization Space
#0 public_networks
#1 dns
#2 tcp_open
#3 guard_432fb752-876d-443b-a311-a075f4df2237 demonstrations demo
#4 guard_ca16f111-5073-40b7-973a-156c75dd3028 demonstrations demo

在此我们可以看到一个名为 guard_ca16f111-5073-40b7-973a-156c75dd3028 的安全组已经创建成功。

说明

如果无法建立应用与服务实例之间的连接,请检查是否已创建安全组。

备份和恢复服务实例,下载备份

a9s PostgreSQL 可以轻松地创建和恢复备份。

获取仪表盘地址、登录和授权

  1. 使用 cf service {instance_name} 获取仪表盘 URL,例如:
$cf service my-postgresql

Service instance:my-postgresql
Service:postgresql
Bound apps:
Tags:
Plan:postgresql-xs
description: This is a service creating and managing dedicated PostgreSQL service instances and clusters, powered by the anynines Service Framework
Documentation url:
Dashboard:https://postgresql-dashboard.aws.ie.apps.eu1.mindsphere.io/service-instances/ca16f111-5073-40b7-973a-156c75dd3028

Last Operation
Status:update succeeded
Message:
Started:2017-10-26T08:28:38Z
Updated:2017-10-26T08:28:38Z
  1. 在浏览器中输入仪表盘 URL,然后通过“使用 WebKey 登录”方法在重定向的页面上进行身份验证:
    authentication-page
  2. 单击 **授权**以批准授权请求:
    authorization-page

执行备份

如上所示,您可以单击仪表盘上的 **触发备份**来进行备份:

service-dashboard

随后,备份将进行排队。很快就可以开始备份。

service-dashboard

说明

备份所需时间取决于数据的大小。

还原备份

再次打开仪表盘并选择要还原的备份。单击备份的 **还原**按钮。随后将触发还原。

service-dashboard

说明

备份还原的所需时间取决于数据的大小。

service-dashboard

下载备份

要下载已执行的备份,首先必须设置个人加密密钥。否则,执行的备份无法下载。

要设置个人加密密钥,请打开相应服务实例的服务仪表盘,如上图所示。单击 编辑 按钮。

service-dashboard

设置加密秘钥并单击**保存** 按钮。加密密钥的最小长度为8个字符。

service-dashboard

新创建的备份现在将显示一个**下载** 按钮。 单击此按钮下载备份。

service-dashboard

Note

如果更改了个人加密密钥,将无法再下载使用旧的个人加密密钥加密的已执行备份。

使服务实例在本地可用

任何 a9s 数据服务都可以在本地访问。也就是说您可以将本地客户端连接到服务,实施调试等多种操作。CF 提供了一种创建 SSH 正向通道的智能方法,即通过推送应用来实现。有关此功能的详细信息,请参见 CF 文档中使用 SSH 访问应用部分。

首先,您必须将应用绑定到服务。请参见将应用绑定到服务实例了解具体方法。

说明

必须在平台中启用 cf ssh 支持。如果不确定,请咨询管理员。

获取服务 URL 和凭证

请参照获取服务实例访问凭证来获取服务的 hostname 和用户凭证。

```shell tab="Template" cf env {app_name}

```shell tab="Example"
$ cf env postgresql-app
Getting env variables for app postgresql-app in org test / space test as admin...
OK

System-Provided:
{
 "VCAP_SERVICES": {
  "postgresql": [
   {
    "credentials": {
     "host": [
        "d67901c.service.dc1.a9svs"
       ],
     "username": "brk-usr",
     "password": "password",
     "port": 5432
    },
    "label": "postgresql",
    "name": "my-postgresql-service",
    "plan": "postgresql-xs"
   }
  ]
 }
}
...

请记住 host 是 d67901c.service.dc1.a9svs,用户名是 brk-usr,密码是 password。在下一步骤中将用到这些信息。

创建连接服务的通道

使用 cf ssh 可以创建一个连接管理仪表盘的 ssh 正向通道。使用之前步骤的 hostport 连接 a9s PostgreSQL 实例:

```shell tab="Template" cf ssh {app_name} -L {local_port}:{host}:{port}

```shell tab="Example"
$ cf ssh postgresql-app -L 5432:d67901c.service.dc1.a9svs:5432
vcap@956aaf4e-6da9-4f69-4b1d-8e631a403312:~$

当 SSH 通道打开时,您可以通过地址 localhost:5432 访问该示例的实例。

说明

不要忘记用 exit 关闭会话。

PostgreSQL 扩展

创建或删除扩展

可以使用 Cloud Foundry CLI 和附加配置参数安装 PostgreSQL 扩展:

cf create-service {service_name} {service_plan} {instance_name} -c '{"install_plugins": ["{plugin_name}"]}'
cf update-service {instance_name} -c '{"install_plugins": ["{plugin_name}]}'
cf update-service {instance_name} -c '{"delete_plugins": ["{plugin_name}]}'

可用的扩展

以下是可用的 PostgreSQL 扩展:

  • postgis
  • uuid-ossp
  • ltree
  • pgcrypto
  • citext

默认扩展

以下 PostgreSQL 扩展是默认安装的并且无法删除,它们需要有一个功能复制:

  • pgcrypto
  • citext

Last update: November 16, 2021