深入理解OpenStack自动化部署
  • 前言
  • 初识PuppetOpenstack
    • 相关约定
    • 术语表
    • PuppetOpenstack项目简介
  • Puppet开发基础
    • 关于Puppet
    • Puppet核心概念
    • 理解Hiera
    • 准备开发测试环境
  • OpenStack基础服务模块
    • puppet-apache模块
    • puppet-memcached模块
    • puppet-sysctl模块
    • puppet-rsync模块
    • puppet-xinetd模块
    • puppet-rabbitmq模块
    • puppet-firewall模块
    • puppet-mysql模块
    • puppet-vcsrepo模块
    • puppet-mongodb模块
    • puppet-ceph
  • Openstack服务模块
    • OpenStack模块代码结构
    • puppet-keystone模块
    • puppet-nova
    • puppet-neutron
    • puppet-glance
    • puppet-horizon
    • puppet-ceilometer
    • puppet-cinder
    • puppet-tempest
    • puppet-heat
    • puppet-swift
    • puppet-trove
    • puppet-sahara
    • puppet-manila
    • puppet-rally
    • puppet-designate
    • puppet-aodh模块
  • PuppetOpenstack公共库和工具类模块
    • puppet-oslo
    • puppet-vswitch模块
    • puppet-openstacklib
    • puppet-openstack-integration
    • puppet-openstack-specs
    • puppet-openstack-cookiebutter
    • puppet-modulesync-configs
    • puppet-openstack_spec_helper
    • puppet-stdlib
    • puppet-openstack_extras
  • 最佳实践
    • 模块管理
    • Hiera
    • 提交规范
    • 正确使用环境
    • 转发层规范
    • 代码风格
    • Standalone vs C\/S 模式
    • Puppet版本的选择
    • Puppet4的新特性和变化
    • Puppet的能与不能
  • 其他部署工具
    • Fuel
    • Kolla
    • TripleO
    • Packstack
    • OSA
    • DevStack
    • 编写一个定制化部署工具
  • 结语
Powered by GitBook
On this page
  • 基础知识
  • 先睹为快
  • class trove
  • class trove::api
  • class trove::conductor
  • class trove::taskmanager
  • 小结
  • 动手练习

Was this helpful?

  1. Openstack服务模块

puppet-trove

Previouspuppet-swiftNextpuppet-sahara

Last updated 6 years ago

Was this helpful?

本节作者:廖鹏辉 阅读级别:选读 阅读时间:2h

基础知识

Trove 是一个 DBaaS 服务,它能够利用 OpenStack 云平台中的资源,让用户能够以自助的方式快速的构建和管理数据库服务。trove 支持多种数据库,包括关系型和非关系型数据库,例如 MySQL/MariaDB/PostgreSQL/MongoDB/Canssandra/Redis/Couchbase 等等。trove 将这些数据库的管理功能抽象成了统一的接口提供给用户使用。

使用 trove 服务能够帮助用户减少数据库的部署,配置和维护成本,能够更轻松的使用各种不同的数据库服务。trove 通过调用 Nova/Cinder/Swift 等其他 OpenStack 服务来进行资源的编排。

trove 服务有下面这些组件:

  • trove-api,对外提供 REST-ful 的 API

  • trove-taskmanager,监听在消息队列上,负责完成虚拟机实例的启动,以及实例的整个生命周期的管理,并对数据库进行管理操作

  • trove-guestagent,运行在虚拟机实例内部,监听在消息队列上,负责对数据库进行管理的运维操作

  • trove-conductor,接收虚拟机示例发送的信息,并更新各个实例的状态,它的作用类似于 nova-conductor

这些组件之间以及与其他 OpenStack 服务之间的关系如下:

先睹为快

部署 trove 服务需要依赖于其他的 OpenStack 组件,因此建议先部署核心的 OpenStack 组件,最后部署 trove 服务。可以使用 puppet-trove 模块的示例代码来部署 trove 服务:

puppet apply trove/examples/site.pp

代码中使用 trove::client 来部署客户端组件,使用 ::trove::api/::trove::conductor/::trove::taskmanager 来部署 trove 的各个服务。使用 ::trove::keystone::auth 类来完成 keystone 相关资源的创建,使用 ::trove::db::mysql 来完成数据库的创建。

class trove

trove 这个类用于安装 openstack-trove 基础包,同时使用 trove_config 资源对 trove 进行基础配置(例如 nova/neutron/cinder 等服务的访问 URL),并且定义了一些消息队列,数据库相关的参数,供各个服务使用。

例如,下面的代码使用 trove_config 配置了 nova 的访问 URL:

  if $nova_compute_url {
    trove_config { 'DEFAULT/nova_compute_url': value => $nova_compute_url }
  }
  else {
    trove_config { 'DEFAULT/nova_compute_url': ensure => absent }
  }

class trove::api

由于众多 OpenStack 模块都使用 oslo 公共库,这些服务都需要进行 oslo 相关的配置,这些配置在 trove 模块中被抽象成为单独的类,来进行响应的配置,trove::db 用于 oslo.db 相关的配置,trove::logging 用于 oslo.log 相关的配置

trove::api 中,调用了 trove::db 来进行数据库配置,调用 trove::logging 来进行日志相关的配置。

trove::api 还使用了 puppet-oslo 模块中的 define 资源来进行 oslo 相关的配置,例如,进行 MQ 相关的配置:

    oslo::messaging::rabbit {'trove_config':
      rabbit_hosts          => $::trove::rabbit_hosts,
      rabbit_host           => $::trove::rabbit_host,
      rabbit_port           => $::trove::rabbit_port,
      rabbit_ha_queues      => $::trove::rabbit_ha_queues,
      rabbit_userid         => $::trove::rabbit_userid,
      rabbit_password       => $::trove::rabbit_password,
      rabbit_virtual_host   => $::trove::rabbit_virtual_host,
      rabbit_use_ssl        => $::trove::rabbit_use_ssl,
      kombu_reconnect_delay => $::trove::kombu_reconnect_delay,
      amqp_durable_queues   => $::trove::amqp_durable_queues,
      kombu_ssl_ca_certs    => $::trove::kombu_ssl_ca_certs,
      kombu_ssl_certfile    => $::trove::kombu_ssl_certfile,
      kombu_ssl_keyfile     => $::trove::kombu_ssl_keyfile,
      kombu_ssl_version     => $::trove::kombu_ssl_version
    }

class trove::conductor

trove-conductor 服务的部署也比较简单,和 trove-api 类似,配置一些基础配置和 oslo 相关配置,就可以启动服务了,在 puppet-trove 模块总,服务的管理都是使用 trove::generic_service 这个 define 资源来完成的,例如, trove-conductor 服务的使用:

  trove::generic_service { 'conductor':
    enabled        => $enabled,
    manage_service => $manage_service,
    package_name   => $::trove::params::conductor_package_name,
    service_name   => $::trove::params::conductor_service_name,
    ensure_package => $ensure_package,
  }

class trove::taskmanager

trove-taskmanager 服务的部署和 trove 其他服务也是类似的,唯一需要注意的是 trove-taskmanager 类中也对 guest-agent 的配置文件进行了管理,管理使用的是模板的方式:

  file { $guestagent_config_file:
    content => template('trove/trove-guestagent.conf.erb'),
    require => Anchor['trove::install::end'],
  }

小结

trove 服务的部署比较简单,使用 puppet 能够方便的部署起 trove 服务起来,如果想进一步学习 trove 服务的使用,可以参考 openstack 官方的文档。

动手练习

  • 部署 trove 服务,制作一个基于 mysql 的镜像,并导入到 trove 中

  • 使用 mysql 镜像启动数据库实例

关于 puppet-oslo 模块相关的细节可以参考本书对 puppet-oslo 模块的介绍。这里值得注意的是在代码中直接调用了 trove 这个类中的变量使用,为什么 trove::api 能够使用 trove 类中的变量呢,这时因为 trove::api 使用 inherits 继承了 trove 类,关于 inherits 的用法,可以参考。

这里
基础知识 - 快速了解 trove 服务
先睹为快 - 一言不合,立马动手?
核心代码讲解 - 如何管理 trove 服务?
class trove
class trove::api
class trove::conductor
class trove::taskmanager
小结
动手练习