配置 Trove¶
注意
在生产环境中部署 Trove 时应格外小心。 确保完全理解已部署架构的安全隐患。
Trove 为 OpenStack 部署提供 DBaaS。 它部署客户机虚拟机,为最终用户提供所需的数据库。 Trove 客户机虚拟机需要通过 RPC (oslo.messaging) 和 OpenStack 服务与 Trove 服务进行连接。 这些客户机虚拟机访问这些服务的方式可以通过内部网络(在 oslo.messaging 的情况下)或通过公共接口(在 OpenStack 服务的情况下)实现。 对于示例配置,我们将指定一个提供程序网络作为 Trove 在每个客户机虚拟机上配置的网络。 然后,客户机可以通过此网络连接到 oslo.messaging,并通过外部连接到 OpenStack 服务。 可选地,客户机虚拟机可以使用内部网络访问 OpenStack 服务,但这需要将更多的容器绑定到此网络。
以下概述的部署配置可能不适合生产环境。 请仔细检查此配置,并结合您自己的安全要求进行评估。
为 Trove 设置 neutron 网络¶
Trove 需要控制平面和数据库客户机虚拟机之间的连接。 为此目的,应创建一个提供程序网络,该网络将桥接 Trove 容器(如果控制平面安装在容器中)或主机与虚拟机。 在一般情况下,neutron 网络可以是一个简单的扁平网络。 以下是在 openstack_user_config.yml 中的一个示例条目
- network:
container_bridge: "br-dbaas"
container_type: "veth"
container_interface: "eth13"
host_bind_override: "eth13"
ip_from_q: "dbaas"
type: "flat"
net_name: "dbaas-mgmt"
group_binds:
- neutron_linuxbridge_agent
- oslomsg_rpc
- trove_all
请确保修改此文件中的其他条目。
net_name 将是在创建 neutron 网络时指定的物理网络。 默认值 dbaas-mgmt 也用于查找 rpc 消息传递容器的地址。 如果未使用默认值,则需要覆盖 defaults\main.yml 中的一些变量。
默认情况下,此角色不会自动创建 neutron 网络。 但是,可以更改默认值以创建 neutron 网络。 请参阅 defaults\main.yml 中的 trove_service_net_* 变量。 通过自定义 trove_service_net_* 变量并让此角色创建 neutron 网络,可以无中断或干预地完成 OpenStack 和 DBaaS 的完整部署。
以下是如何手动在 neutron 中设置提供程序网络的示例,如果需要的话
neutron net-create dbaas_service_net --shared \
--provider:network_type flat \
--provider:physical_network dbaas-mgmt
neutron subnet-create dbaas_service_net 172.29.252.0/22 --name dbaas_service_subnet
--ip-version=4 \
--allocation-pool start=172.29.252.110,end=172.29.255.255 \
--enable-dhcp \
--dns-nameservers list=true 8.8.4.4 8.8.8.8
需要特别注意 --allocation-pool,以避免与分配给主机或容器的 IP 地址重叠(请参阅 openstack_user_config.yml 中的 used_ips 变量)
注意
由于 Trove 客户机代理配置文件包含该信息,因此此角色需要在运行前创建 neutron 网络。
构建 Trove 镜像¶
在构建客户机虚拟机部署的磁盘镜像时,需要考虑许多事项。 以下列出了一些
虚拟机和网络基础设施的安全性
将安装哪些数据库
将支持哪些数据库服务
如何维护镜像
可以使用 diskimage-builder 工具构建镜像。 可以从 Trove 容器中提取 Trove 虚拟环境,并使用自定义 diskimage-builder 元素将其部署到镜像中。
有关构建 Trove 磁盘镜像的 diskimage-builder 元素,请参阅 OpenStack Trove 项目中的 trove/integration/scripts/files/elements 目录内容。
使用独立的 RabbitMQ¶
由于 Trove 使用 RabbitMQ 与客户机服务器交互,因此需要将 neutron 网络传递到 RabbitMQ 容器中,这存在安全风险。 因此,您可能希望在 RabbitMQ 集群方面将 Trove 与其他服务隔离,并使用独立的 RabbitMQ 集群。
为了部署新的 RabbitMQ 集群并将其用于 Trove,您需要
为 RabbitMQ 容器创建一个新的组。 您需要在
/etc/openstack_depoy/env.d内部创建一个文件,该文件定义组映射component_skel: trove_rabbitmq: belongs_to: - trove_mq_all container_skel: trove_rabbit_container: belongs_to: - trove-mq_containers contains: - trove_rabbitmq physical_skel: trove-mq_containers: belongs_to: - all_containers trove-mq_hosts: belongs_to: - hosts
定义将在此组中部署的主机。 这可以通过 conf.d 中的新文件或在 openstack_user_config.yml 内部完成
trove-mq_hosts: aio1: ip: 172.29.236.100
将 dbaas 网络映射添加到新组
- network: container_bridge: "br-dbaas" container_type: "veth" container_interface: "eth14" host_bind_override: "eth14" ip_from_q: "dbaas" type: "flat" net_name: "dbaas-mgmt" group_binds: - neutron_linuxbridge_agent - oslomsg_rpc - trove_rabbitmq
为专用 rabbitmq 容器创建覆盖,例如
/etc/openstack_deploy/group_vars/trove_rabbitmq.ymlrabbitmq_cluster_name: trove rabbitmq_cookie_token: <token> rabbitmq_monitoring_password: <password>
为 trove 服务容器创建覆盖,例如
/etc/openstack_deploy/group_vars/trove_all.yml注意
对于通知,我们仍然希望使用主 RabbitMQ 集群
trove_guest_rpc_host_group: trove_rabbitmq trove_guest_oslomsg_rpc_password: SecretPassword
运行 playbook 以创建 rabbitmq 容器并在其上部署集群
openstack-ansible playbooks/lxc-containers-create.yml --limit trove_rabbitmq,lxc_hosts openstack-ansible playbooks/rabbitmq-install.yml -e rabbitmq_host_group=trove_rabbitmq