配置 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 镜像

在构建客户机虚拟机部署的磁盘镜像时,需要考虑许多事项。 以下列出了一些

  1. 虚拟机和网络基础设施的安全性

  2. 将安装哪些数据库

  3. 将支持哪些数据库服务

  4. 如何维护镜像

可以使用 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,您需要

  1. 为 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
    
  2. 定义将在此组中部署的主机。 这可以通过 conf.d 中的新文件或在 openstack_user_config.yml 内部完成

    trove-mq_hosts:
      aio1:
        ip: 172.29.236.100
    
  3. 将 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
    
  4. 为专用 rabbitmq 容器创建覆盖,例如 /etc/openstack_deploy/group_vars/trove_rabbitmq.yml

    rabbitmq_cluster_name: trove
    rabbitmq_cookie_token: <token>
    rabbitmq_monitoring_password: <password>
    
  5. 为 trove 服务容器创建覆盖,例如 /etc/openstack_deploy/group_vars/trove_all.yml

    注意

    对于通知,我们仍然希望使用主 RabbitMQ 集群

    trove_guest_rpc_host_group: trove_rabbitmq
    trove_guest_oslomsg_rpc_password: SecretPassword
    
  6. 运行 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