数据库即服务指南
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 实例。为此,请执行以下步骤。
在管理控制器中:
将 RabbitMQ 用户和密码设置为不与 DBaaS 租户共享的自定义值。例如,您可以使用
guest帐户和/默认虚拟主机以及更改的密码:rabbitmqctl change_password guest password
# rabbitmqctl change_password guest passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务设置为连接到消息总线的所有配置文件中,将更改密码。
更新 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
# 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 RegionOneCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在 DBaaS 控制器上:
在远程管理控制器主机的 WSGI 配置中指出身份验证令牌过滤器。使用
/etc/trove/api-paste.ini文件中的以下选项和值,将 IP 替换为管理控制器主机的 IP 地址:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加 admin 用户,以确保 DBaaS 客户机代理的 secret 与管理控制器中使用的 secret 不同:
rabbitmqctl add_user isolated isolated rabbitmqctl set_permissions isolated ".*" ".*" ".*"
# rabbitmqctl add_user isolated isolated # rabbitmqctl set_permissions isolated ".*" ".*" ".*"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过将以下选项和值放在
/etc/trove/trove.conf文件中,配置 DBaaS 控制平面以连接到本地 RabbitMQ 实例并进行身份验证:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在管理控制器中,编辑
/etc/trove/trove-guestagent.conf文件,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2.1. ACL 策略 复制链接链接已复制到粘贴板!
或者,您可以通过利用 RabbitMQ 虚拟主机提供的 ACL 策略来提高安全性。在这种情况下,您可以将单独的用户分配给每个虚拟主机,包括单独的权限。例如,您可以定义名为 /isolated 的虚拟主机,并为虚拟主机分配适当的 隔离 用户。要做到这一点,请执行以下步骤:
更改默认
/虚拟主机的客户机帐户密码:rabbitmqctl change_password guest password
# rabbitmqctl change_password guest passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow 添加新用户和虚拟主机,并相应地设置权限:
rabbitmqctl add_user isolated isolated rabbitmqctl add_vhost /isolated rabbitmqctl -p /isolated set_permissions isolated ".*" ".*" ".*"
# rabbitmqctl add_user isolated isolated # rabbitmqctl add_vhost /isolated # rabbitmqctl -p /isolated set_permissions isolated ".*" ".*" ".*"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑 DBaaS 配置。要编辑两个文件:
/etc/trove/trove-guestmanager.conf,它由 puppet-trove 生成,并被注入到客户机实例中,以及/etc/trove/trove-conductor.conf,该服务配置 DBaaS control plane 服务,以获取来自 DBaaS 实例的异步状态更新。RabbitMQ 设置对于这两个文件是相同的:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
这种方法的优势在于其简单性与使用单独的主机和消息队列的情况进行比较。这在以自动化方式执行置备时很有用;例如,使用 Red Hat OpenStack Platform director。
第 2 章 使用数据库即服务 复制链接链接已复制到粘贴板!
2.1. 自动化创建并配置数据库即服务客户机镜像 复制链接链接已复制到粘贴板!
红帽建议使用 trove-image-create 工具为支持的数据存储生成自动化 DBaaS 兼容镜像。
要获取 trove-image-create 工具,请安装 openstack-trove-images 软件包:
yum install openstack-trove-images
# yum install openstack-trove-images
可用的基本选项如下:
| 选项 | description, parameters |
|---|---|
|
| 要使用的基础镜像。支持 QEMU 镜像(qcow2)。将镜像文件名(以及可选)指定为 pamaterer。 |
|
|
要使用的 OpenStack 版本。将 |
|
| 要部署的数据存储。前言 中列出了支持的数据存储,潜在的参数有:
|
例 2.1. 自定义镜像
例如,您可以以这种方式使用该工具:
trove-image-create -s mysql -r liberty -i myimage.qcow2
# trove-image-create -s mysql -r liberty -i myimage.qcow2
这将通过添加 MariaDB 5.5 和从 Red Hat OpenStack Platform 8 (Liberty)的 MariaDB 5.5 和从 Red Hat OpenStack Platform 8 (Liberty)来自定义存储在当前工作目录中的 myimage.qcow2 文件中的镜像。
使用 RHEL 7 镜像时,必须使用额外的选项:
| 选项 | 识别的参数及其语法 | 描述 |
|---|---|---|
|
|
USER | 使用您的红帽凭证使用 Subscription Manager 注册。 |
|
|
| 将指定或自动决定的订阅池附加到系统。 |
例 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
# trove-image-create -s mysql -r liberty -i ../../images/rhel-mariadb55.qcow2 --sm-register admin@example.com:password:123456 --sm-pool auto
这将以类似于上例的方式自定义镜像,并使用红帽登录名称 admin@example.com、密码 123456 以及最佳匹配订阅注册系统。
2.1.1. 将镜像加载到数据库即服务管理 复制链接链接已复制到粘贴板!
完成镜像自定义后,执行以下步骤:
将镜像上传到镜像服务。要做到这一点,请运行以下命令:
openstack image create rhel7-mariadb55 --disk-format qcow2 --container-format bare --public < myimage.qcow2
# openstack image create rhel7-mariadb55 --disk-format qcow2 --container-format bare --public < myimage.qcow2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从上一命令的输出中获取上传的镜像的 ID,这应类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这种情况下,ID 为 c637391b-e00f-47fb-adb5-e8dfc4e224d4。
更新 DBaaS 管理数据存储,使其具有用于为您想要的数据存储和版本启动实例的新映像记录:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要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
# trove-image-create -i myimage.qcow2 -r liberty -s mysql --root-ssh-key ~/.ssh/id_rsa.pub
要根据此镜像访问实例,请按照以下步骤操作:
- 编辑与实例关联的安全组。
- 打开 SSH 端口。
- 还要考虑允许 ICMP。
- 如果实例位于专用网络中,则需要向实例添加一个浮动 IP。
完成这些步骤后,您应能够运行以下命令登录实例:
ssh root@INSTANCE_IP
# ssh root@INSTANCE_IP