数据库即服务指南


Red Hat OpenStack Platform 8

Red Hat OpenStack Platform 的数据库即服务

OpenStack Documentation Team

摘要

本指南介绍了如何在 Red Hat OpenStack Platform 中部署 配置和使用数据库即服务。

前言

数据库即服务(DBaaS)让用户能够在 OpenStack 环境中方便地利用关系或非关系数据库,而不必担心管理任务,如部署、配置或备份。此功能由 trove 组件提供,该组件置备和管理客户机数据库镜像。

警告

DEPRECATION NOTICE :从 Red Hat OpenStack Platform 10 开始,OpenStack Trove 服务将不再包含在 Red Hat OpenStack Platform 发行版本中。我们与信任的合作伙伴合作为我们的客户提供生产就绪的 DBaaS 服务。请联系您的销售客户经理,了解有关此选项的更多信息。

DBaaS 包含多个服务:

  • 在客户机实例上运行和管理数据存储的客户机代理服务;这包括使新的数据存储在线并执行数据库操作。
  • 任务管理器服务,用于在实例上置备、管理和执行操作。
  • API 服务,提供 RESTful API,并将 API 请求转发到客户机代理或任务管理器。到 DBaaS API 的命令行界面由 trove 客户端提供,这是 python-troveclient 软件包的一部分。
  • 编排器服务,在主机上运行并侦听来自客户机实例的消息以传递给主机;例如,状态更新。

支持以下数据库平台:

  • MySQL 5.5 和 5.6
  • MariaDB 5.5 和 10
警告

本发行版本中提供了 OpenStack Database-as-a-Service 作为技术预览,因此不受红帽完全支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

第 1 章 管理数据库即服务

1.1. 安装和配置 Database-as-a-Service Controller

有关如何在 DBaaS 控制器上安装必要软件包和设置环境的详细信息,请参阅安装 参考

1.2. 安全数据库即服务

在早期版本的 Red Hat OpenStack Platform 中,DBaaS 客户机代理使用凭证来运行 RabbitMQ 消息总线,该凭据由整个管理控制器用于其所有流量。因此,DBaaS 实例可以查看消息总线发送的所有数据,包括敏感数据,这可能允许实例滥用或攻击共享总线的其他服务。在 Red Hat OpenStack Platform 8 中,DBaaS 放置在隔离的租户中,该租户无法访问其余的管理控制器。但是,为了进一步提高 DBaaS 的安全性,您可以在单独的主机和单独的 RabbitMQ 消息总线上设置 DBaaS 实例。为此,请执行以下步骤。

  1. 在管理控制器中:

    1. 将 RabbitMQ 用户和密码设置为不与 DBaaS 租户共享的自定义值。例如,您可以使用 guest 帐户和 / 默认虚拟主机以及更改的密码:

      # rabbitmqctl change_password guest password
      Copy to Clipboard Toggle word wrap

      在服务设置为连接到消息总线的所有配置文件中,将更改密码。

    2. 更新 DBaaS 数据库端点,以使服务目录查找在单独的主机上使用 DBaaS。首先确定当前的端点 UUID,然后将其删除,最后创建一个具有单独 DBaaS 主机的 IP 地址的新端点:

      # keystone endpoint-list
      # keystone endpoint-delete current_DBaaS_endpoint_uuid
      # keystone endpoint-create --service trove --publicurl http://IP:8779/v1.0/\$\(tenant_id\)s --region RegionOne
      Copy to Clipboard Toggle word wrap
  2. 在 DBaaS 控制器上:

    1. 在远程管理控制器主机的 WSGI 配置中指出身份验证令牌过滤器。使用 /etc/trove/api-paste.ini 文件中的以下选项和值,将 IP 替换为管理控制器主机的 IP 地址:

      [filter:authtoken]
      paste.filter_factory = keystonemiddleware.auth_token:filter_factory
      service_protocol = http
      service_host = IP
      service_port = 5000
      auth_host = IP
      auth_port = 35357
      auth_protocol = http
      auth_uri = http://IP:35357/v2.0/
      signing_dir = /tmp/keystone-signing-trove
      admin_tenant_name = admin
      admin_user = admin
      admin_password = admin
      Copy to Clipboard Toggle word wrap
    2. 添加 admin 用户,以确保 DBaaS 客户机代理的 secret 与管理控制器中使用的 secret 不同:

      # rabbitmqctl add_user isolated isolated
      # rabbitmqctl set_permissions isolated ".*" ".*" ".*"
      Copy to Clipboard Toggle word wrap
    3. 通过将以下选项和值放在 /etc/trove/trove.conf 文件中,配置 DBaaS 控制平面以连接到本地 RabbitMQ 实例并进行身份验证:

      # AMQP Connection info
      rabbit_userid=isolated
      rabbit_password=isolated
      rabbit_host=DBaaS_IP
      
      # single instance tenant
      nova_proxy_admin_user = user
      nova_proxy_admin_pass = password
      nova_proxy_admin_tenant_name = tenant
      trove_auth_url = http://MGMT_IP:5000/v2.0
      nova_compute_service_type = compute
      cinder_service_type = volumev2
      os_region_name = RegionOne
      nova_compute_url = http://MGMT_IP:8774/v3
      
      remote_nova_client = trove_ext.cloudos.remote.nova_client_trove_admin
      remote_cinder_client = trove_ext.cloudos.remote.cinder_client_trove_admin
      remote_neutron_client = trove_ext.cloudos.remote.neutron_client_trove_admin
      Copy to Clipboard Toggle word wrap
  3. 在管理控制器中,编辑 /etc/trove/trove-guestagent.conf 文件,如下所示:

    # AMQP Connection info
    rabbit_userid=isolated
    rabbit_password=isolated
    rabbit_host=DBaaS_IP
    
    # single tenant config
    nova_proxy_admin_user = user
    nova_proxy_admin_pass = password
    nova_proxy_admin_tenant_name = tenant
    trove_auth_url = http://MGMT_IP:5000/v2.0
    swift_url = http://MGMT_IP:8080/v1/AUTH_
    Copy to Clipboard Toggle word wrap

1.2.1. ACL 策略

或者,您可以通过利用 RabbitMQ 虚拟主机提供的 ACL 策略来提高安全性。在这种情况下,您可以将单独的用户分配给每个虚拟主机,包括单独的权限。例如,您可以定义名为 /isolated 的虚拟主机,并为虚拟主机分配适当的 隔离 用户。要做到这一点,请执行以下步骤:

  1. 更改默认 / 虚拟主机 的客户机 帐户密码:

    # rabbitmqctl change_password guest password
    Copy to Clipboard Toggle word wrap
  2. 添加新用户和虚拟主机,并相应地设置权限:

    # rabbitmqctl add_user isolated isolated
    # rabbitmqctl add_vhost /isolated
    # rabbitmqctl -p /isolated set_permissions isolated ".*" ".*" ".*"
    Copy to Clipboard Toggle word wrap
  3. 编辑 DBaaS 配置。要编辑两个文件: /etc/trove/trove-guestmanager.conf,它由 puppet-trove 生成,并被注入到客户机实例中,以及 /etc/trove/trove-conductor.conf,该服务配置 DBaaS control plane 服务,以获取来自 DBaaS 实例的异步状态更新。RabbitMQ 设置对于这两个文件是相同的:

    [oslo_messaging_rabbit]
    rabbit_host=IP
    rabbit_virtual_host=/isolated
    rabbit_userid=isolated
    rabbit_password=isolated
    rabbit_port=5672
    rabbit_ha_queues=False
    rabbit_hosts=IP:5672
    rabbit_use_ssl=False
    Copy to Clipboard Toggle word wrap

这种方法的优势在于其简单性与使用单独的主机和消息队列的情况进行比较。这在以自动化方式执行置备时很有用;例如,使用 Red Hat OpenStack Platform director。

第 2 章 使用数据库即服务

红帽建议使用 trove-image-create 工具为支持的数据存储生成自动化 DBaaS 兼容镜像。

要获取 trove-image-create 工具,请安装 openstack-trove-images 软件包:

# yum install openstack-trove-images
Copy to Clipboard Toggle word wrap

可用的基本选项如下:

Expand
选项description, parameters

-i,--image

要使用的基础镜像。支持 QEMU 镜像(qcow2)。将镜像文件名(以及可选)指定为 pamaterer。

-r,--release

要使用的 OpenStack 版本。将 kiloliberty 指定为参数。

-S,--datastore

要部署的数据存储。前言 中列出了支持的数据存储,潜在的参数有:

  • 在分发中,MySQL wagon- swigwhatever 提供 mysql。对于 RHEL 7,将使用 MariaDB 5.5。
  • mysql55 — MySQL 5.5 from mysql.com
  • mysql56 — MySQL 5.6 from mysql.com
  • mariadb10 — MariaDB 10.0 from mariadb.org

例 2.1. 自定义镜像

例如,您可以以这种方式使用该工具:

# trove-image-create -s mysql -r liberty -i myimage.qcow2
Copy to Clipboard Toggle word wrap

这将通过添加 MariaDB 5.5 和从 Red Hat OpenStack Platform 8 (Liberty)的 MariaDB 5.5 和从 Red Hat OpenStack Platform 8 (Liberty)来自定义存储在当前工作目录中的 myimage.qcow2 文件中的镜像。

使用 RHEL 7 镜像时,必须使用额外的选项:

Expand
选项识别的参数及其语法描述

--sm-register

USER:password:PASSWORD
USER:file:FILE_CONTAINING_PASSWORD

使用您的红帽凭证使用 Subscription Manager 注册。

--sm-pool

池:POOL_ID
文件:FILE_CONTAINING_POOL_ID
auto

将指定或自动决定的订阅池附加到系统。

例 2.2. 自定义 RHEL 7 镜像

例如:

# trove-image-create -s mysql -r liberty -i ../../images/rhel-mariadb55.qcow2 --sm-register admin@example.com:password:123456 --sm-pool auto
Copy to Clipboard Toggle word wrap

这将以类似于上例的方式自定义镜像,并使用红帽登录名称 admin@example.com、密码 123456 以及最佳匹配订阅注册系统。

2.1.1. 将镜像加载到数据库即服务管理

完成镜像自定义后,执行以下步骤:

  1. 将镜像上传到镜像服务。要做到这一点,请运行以下命令:

    # openstack image create rhel7-mariadb55 --disk-format qcow2 --container-format bare --public < myimage.qcow2
    Copy to Clipboard Toggle word wrap
  2. 从上一命令的输出中获取上传的镜像的 ID,这应类似如下:

    +------------------+------------------------------------------------------+
    | Field            | Value                                                |
    +------------------+------------------------------------------------------+
    | checksum         | dec3f16054739459d03984b7a552cd9c                     |
    | container_format | bare                                                 |
    | created_at       | 2016-01-27T20:10:36Z                                 |
    | disk_format      | qcow2                                                |
    | file             | /v2/images/c637391b-e00f-47fb-adb5-e8dfc4e224d4/file |
    | id               | c637391b-e00f-47fb-adb5-e8dfc4e224d4                 |
    | min_disk         | 0                                                    |
    | min_ram          | 0                                                    |
    | name             | rhel7-mariadb55                                      |
    | owner            | 483cae7de00c4f029e19eef5983c67a9                     |
    | protected        | False                                                |
    | schema           | /v2/schemas/image                                    |
    | size             | 1910767616                                           |
    | status           | active                                               |
    | updated_at       | 2016-01-27T20:10:46Z                                 |
    | virtual_size     | None                                                 |
    | visibility       | public                                               |
    +------------------+------------------------------------------------------+
    Copy to Clipboard Toggle word wrap

    在这种情况下,ID 为 c637391b-e00f-47fb-adb5-e8dfc4e224d4

  3. 更新 DBaaS 管理数据存储,使其具有用于为您想要的数据存储和版本启动实例的新映像记录:

    # export DATASTORE=mariadb
    # export DATASTORE_VERSION=5.5
    # export IMAGE_ID=c637391b-e00f-47fb-adb5-e8dfc4e224d4
    # export PACKAGES=mariadb-server
    #
    # trove-manage datastore_update ${DATASTORE} ""
    # trove-manage datastore_version_update ${DATASTORE} ${DATASTORE_VERSION} ${DATASTORE} ${IMAGE_ID} ${PACKAGES} 1
    # trove-manage datastore_update ${DATASTORE} ${DATASTORE_VERSION}
    Copy to Clipboard Toggle word wrap
    重要

    PACKAGES 变量的值取决于您正在使用的数据存储。对于 MySQL (任何版本),请使用 mysql-community-server。对于 MariaDB 10.0,请使用 MariaDB-server

2.1.2. 故障排除

如果实例启动时失败,可以创建并使用 SSH 密钥的镜像进行故障排除。trove-image-create 工具具有用于此目的的 -root-ssh-key 选项。此选项将公钥的路径作为参数,并将密钥注入镜像中。例如:

# trove-image-create -i myimage.qcow2 -r liberty -s mysql --root-ssh-key ~/.ssh/id_rsa.pub
Copy to Clipboard Toggle word wrap

要根据此镜像访问实例,请按照以下步骤操作:

  1. 编辑与实例关联的安全组。
  2. 打开 SSH 端口。
  3. 还要考虑允许 ICMP。
  4. 如果实例位于专用网络中,则需要向实例添加一个浮动 IP。

完成这些步骤后,您应能够运行以下命令登录实例:

# ssh root@INSTANCE_IP
Copy to Clipboard Toggle word wrap

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat