openstack高可用集群22-部署Trove实战(数据库服务)

时间:2024-03-09 18:42:35
Trove介绍
OpenStack 开源数据库即服务使命:为关系和非关系数据库引擎提供可扩展且可靠的云数据库即服务供应功能,并继续改进其功能齐全且可扩展的开源框架。
描述
Trove 是 OpenStack 的数据库即服务。它旨在完全在OpenStack上运行,目的是让用户能够快速轻松地利用关系或非关系数据库的功能,而无需承担处理复杂管理任务的负担。云用户和数据库管理员可以根据需要配置和管理多个数据库实例。最初,该服务将专注于提供高性能的资源隔离,同时自动执行复杂的管理任务,包括部署、配置、修补、备份、恢复和监控。
设计
Trove 旨在支持 Nova 实例中的单租户数据库。对 Nova 的配置方式没有限制,因为 Trove 与其他OpenStack组件完全通过 API交互。更详细的架构信息可以在这里找到
火库
该宝库-API服务提供了支持JSON和XML来配置和管理特罗韦情况下,一个RESTful API。
* 一个 REST-ful 组件
* 入口点 - Trove/bin/trove-api
* 使用由 Trove/etc/trove/api-paste.ini 配置的 WSGI 启动器
    * 定义过滤器的管道;令牌认证,速率限制等。
    * 将 trove 应用程序的 app_factory 定义为 trove.common.api:app_factory
* API 类(一个 wsgi 路由器)将 REST 路径连接到适当的控制器
    * 控制器的实现在相关模块(版本/实例/风味/限制)下,在 service.py 模块中
* 控制器通常将实现重定向到 models.py 模块中的一个类
* 此时使用另一个组件(TaskManager、GuestAgent等)的api模块通过RabbitMQ向前发送请求
宝藏任务管理器
该宝库-任务管理器服务执行繁重至于供应的情况下,管理实例的生命周期,并在数据库实例进行操作。
* 侦听 RabbitMQ 主题的服务
* 入口点 - Trove/bin/trove-taskmanager
* 作为由 Trove/etc/trove/trove-taskmanager.conf.sample 配置的 RpcService 运行,它将 trove.taskmanager.manager.Manager 定义为管理器 - 基本上这是通过队列到达的请求的入口点
* 如上所述,使用 TaskManager 的 api 模块,使用 _cast() 或 _call()(同步/a-sync)并将方法名称作为参数从另一个组件推送到该组件的请求
* Trove/openstack/common/rpc/dispatcher.py- RpcDispatcher.dispatch() 通过一些等效于反射的方式调用管理器中的正确方法
* 然后,管理器将处理重定向到来自 models.py 模块的对象。它从具有上下文和 instance_id 的相关类加载一个对象
* 实际处理通常在 models.py 模块中完成
trove-guestagent
该guestagent是来宾实例中运行的服务,负责管理和对数据库本身进行操作。Guest Agent 通过消息总线侦听 RPC 消息并执行请求的操作。
* 在作为服务运行的意义上类似于 TaskManager,它侦听 RabbitMQ 主题
* GuestAgent 在每个数据库实例上运行,并使用专用的 MQ 主题(标识为实例的 id)
* 入口点 - Trove/bin/trove-guestagent
* 作为由 Trove/etc/trove/trove-guestagent.conf.sample 配置的 RpcService 运行,它将 trove.guestagent.manager.Manager 定义为管理器 - 基本上这是通过队列到达的请求的入口点
* 如上所述,使用 GuestAgent 的 api 模块使用 _cast() 或 _call()(同步/a-sync)并将方法名称作为参数从另一个组件推送到该组件的请求
* Trove/openstack/common/rpc/dispatcher.py- RpcDispatcher.dispatch() 通过一些等效于反射的方式调用管理器中的正确方法
* 然后,管理器将处理重定向到 dbaas.py 模块中的对象(通常)。
* 实际处理通常在 dbaas.py 模块中完成
源代码存储库
* Trove 服务器 ( https://github.com/openstack/trove )
* Trove 集成 ( https://github.com/openstack/trove-integration )
* Trove 客户端 ( https://github.com/openstack/python-troveclient )
安装部署
* 如何将 trove 安装为 devstack 的一部分:trove/installation
* 如何使用 trove-integration: trove/trove-integration
* 如何设置单元测试以与 tox 一起运行:trove/unit-testing
* 如何设置测试环境并在安装后运行 redstack 测试:trove /integration-testing
* 如何设置你的 Mac 开发环境进行调试:trove/dev-env
* 发布 python-troveclient trove /release-python-troveclient
* 使用 Reno trove/create-release-notes-with-reno 创建发行说明
 
 
一、数据库配置
Controller节点
 
# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE trove;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON trove.* TO \'trove\'@\'localhost\' IDENTIFIED BY \'123456\';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON trove.* TO \'trove\'@\'%\' IDENTIFIED BY \'123456\';
MariaDB [(none)]> exit
 
二、创建服务凭证和API端点
Controller节点
 
1.创建服务凭证
 
# source admin-openstack.sh
 
# openstack user create --domain default --password=123456 trove
# openstack role add --project service --user trove admin
# openstack service create --name trove --description "Database" database
 
验证:
# openstack user list
+----------------------------------+-----------+
| ID                               | Name      |
+----------------------------------+-----------+
| 065c923922464a8c92b34fec3df2c603 | placement |
| 0837bb84f83849b78cb43af5b2e9b0bb | cinder    |
| 2a63b46e1fda41c48af777de4c36a7f7 | nova      |
| 380d6b7f829e4c8ab46704cc15222a2d | admin     |
| 50f1697407af4b36938a811aa33661f6 | trove     |
| 556b4a2d327a42fc9ef0e5fd084b1d60 | demo      |
| 903b6ea8dca046659be7fe06a0cdf777 | glance    |
| fb3c9409b2ed46518ab2d239c2979d3c | neutron   |
+----------------------------------+-----------+

  

# openstack role list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| b58dfb680050402a8e9c5e50df8db871 | admin |
| cb79cbbb80b542bc991df22dbd917d0f | user  |
+----------------------------------+-------+
# openstack service list
+----------------------------------+-----------+-----------+
| ID                               | Name      | Type      |
+----------------------------------+-----------+-----------+
| 3d9a29564f5e46998d2745e482a4b82c | trove     | database  |
| 4d49d572a7f44e75b65144749f5e3ada | glance    | image     |
| 849ac6198183476cbc0114f6dfecea51 | cinderv2  | volumev2  |
| b19e59658d25425ba4788777e5bcee45 | neutron   | network   |
| b5739b525cc44d36aeda3cbe4e4ca10e | cinderv3  | volumev3  |
| bc84019146f04b0bb09cf124450bbd31 | keystone  | identity  |
| d63c9be6faa4464aac8daf5b72fd17b5 | nova      | compute   |
| f794d246cd5647b197b466e947c3b398 | placement | placement |
+----------------------------------+-----------+-----------+

  

 
2.创建API端点
 
# openstack endpoint create --region RegionOne database public http://10.2.35.8:8779/v1.0/%\(tenant_id\)s
# openstack endpoint create --region RegionOne database internal http://10.2.35.8:8779/v1.0/%\(tenant_id\)s
# openstack endpoint create --region RegionOne database admin http://10.2.35.8:8779/v1.0/%\(tenant_id\)s
 
验证:
# openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------------------+
| ID                               | Region    | Service Name | Service Type | Enabled | Interface | URL                                      |
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------------------+
| 06a618b134ac4426a98c70cb19afd6e4 | RegionOne | nova         | compute      | True    | internal  | http://10.2.35.8:8774/v2.1               |
| 177ececc64ae45a0903f37ceae0df423 | RegionOne | placement    | placement    | True    | public    | http://10.2.35.8:8778                    |
| 3ea4bb7c105342d9a30ef4368728ef92 | RegionOne | glance       | image        | True    | admin     | http://10.2.35.8:9292                    |
| 43d00aa06e4f4ade8415ab959aa30d0a | RegionOne | keystone     | identity     | True    | admin     | http://10.2.35.8:5000/v3                 |
| 49342d71cffe4968b3346aa73dc29764 | RegionOne | neutron      | network      | True    | internal  | http://10.2.35.8:9696                    |
| 49bfc8de584845dbbe4b7705b0a9cc65 | RegionOne | cinderv2     | volumev2     | True    | public    | http://10.2.35.8:8776/v2/%(project_id)s  |
| 49f68f086dc44b628d59ff3ba01788a7 | RegionOne | cinderv3     | volumev3     | True    | public    | http://10.2.35.8:8776/v3/%(project_id)s  |
| 5058c628df1547208a990b7a44f2817e | RegionOne | cinderv3     | volumev3     | True    | admin     | http://10.2.35.8:8776/v3/%(project_id)s  |
| 50ef670720dc43eab1915f6efe472d00 | RegionOne | cinderv3     | volumev3     | True    | internal  | http://10.2.35.8:8776/v3/%(project_id)s  |
| 578faa25c01d45739bd87b752b3a0f8e | RegionOne | trove        | database     | True    | public    | http://10.2.35.8:8779/v1.0/%(tenant_id)s |
| 59b46e97f2fa4432aac0dbf7276436db | RegionOne | neutron      | network      | True    | public    | http://10.2.35.8:9696                    |
| 5c3223fdd241418d9827db438fa73923 | RegionOne | nova         | compute      | True    | admin     | http://10.2.35.8:8774/v2.1               |
| 61cdd4d6fa3d4cef9e510b5edc1cc12b | RegionOne | cinderv2     | volumev2     | True    | internal  | http://10.2.35.8:8776/v2/%(project_id)s  |
| 7927c118dd7f482293f987e76ae47b6c | RegionOne | glance       | image        | True    | public    | http://10.2.35.8:9292                    |
| 7f3204e551a4428ba2340a4deb89197f | RegionOne | neutron      | network      | True    | admin     | http://10.2.35.8:9696                    |
| 80c1c332d9db45b88f9294b75f9524ff | RegionOne | keystone     | identity     | True    | public    | http://10.2.35.8:5000/v3                 |
| 80ef06cbcbd94d048bd938e490dc7987 | RegionOne | nova         | compute      | True    | public    | http://10.2.35.8:8774/v2.1               |
| b6cbb1e963094f09b569a9aa2d75f189 | RegionOne | keystone     | identity     | True    | internal  | http://10.2.35.8:5000/v3                 |
| c0938f0cbdc0413fa6fc8fc3de679a1d | RegionOne | cinderv2     | volumev2     | True    | admin     | http://10.2.35.8:8776/v2/%(project_id)s  |
| c6965f0876764c409b6d7ca4cbfa7095 | RegionOne | glance       | image        | True    | internal  | http://10.2.35.8:9292                    |
| c9e543cba89b4b98a965955344ef3098 | RegionOne | trove        | database     | True    | admin     | http://10.2.35.8:8779/v1.0/%(tenant_id)s |
| d06ea3a397794918883b4619a32ddaa8 | RegionOne | placement    | placement    | True    | internal  | http://10.2.35.8:8778                    |
| e40f4b4c605f4ab7b29ff87e616a703a | RegionOne | trove        | database     | True    | internal  | http://10.2.35.8:8779/v1.0/%(tenant_id)s |
| e8f257cd21894dc78c02c719616492b4 | RegionOne | placement    | placement    | True    | admin     | http://10.2.35.8:8778                    |
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------------------+

 

三、安装并配置trove服务
 
1.安装Trove相关包
# yum install -y openstack-trove python-troveclient
 
2.修改相关配置文件
注:修改配置文件时,找到相应选项进行修改,没有该选项时再选择适当位置添加,随意添加选项容易造成服务启动失败
1)编辑trove.conf、trove-taskmanager.conf、trove-conductor.conf文件
 
# vi /etc/trove/trove.conf
[DEFAULT]
auth_strategy = keystone
debug = True
bind_host = 0.0.0.0
bind_port = 8779
default_datastore = mysql
use_nova_server_config_drive = True
transport_url= rabbit://openstack:123456@10.2.35.8:5672
rpc_backend=rabbit
control_exchange = trove
db_api_implementation = "trove.db.sqlalchemy.api"
trove_auth_url = http://10.2.35.8:5000/v3
nova_compute_url = http://10.2.35.8:8774/v2.1
cinder_url = http://10.2.35.8:8776/v3
neutron_url = http://10.2.35.8:9696
cinder_service_type = volumev3
add_addresses = True
network_label_regex = .*
ip_regex = .*
black_list_regex = ^10.2.110.*
trove_volume_support = True
block_device_mapping = vdb
device_path = /dev/vdb
max_accepted_volume_size = 200
max_instances_per_tenant = 100
max_volumes_per_tenant = 200
max_backups_per_tenant = 100
volume_time_out=120
http_get_rate = 200
http_post_rate = 200
http_put_rate = 200
http_delete_rate = 200
http_mgmt_post_rate = 200
trove_dns_support = False
dns_account_id = 123456
dns_auth_url = http://10.2.35.8:5000/v3
dns_username = user
dns_passkey = password
dns_ttl = 3600
dns_domain_name = \'trove.com.\'
dns_domain_id = 11111111-1111-1111-1111-111111111111
dns_driver = trove.dns.designate.driver.DesignateDriver
dns_instance_entry_factory = trove.dns.designate.driver.DesignateInstanceEntryFactory
dns_endpoint_url = http://10.2.35.8/v1/
dns_service_type = dns
network_driver = trove.network.nova.NeutronDriver
default_neutron_networks = 0530e38d-2fa9-45fb-8ccc-89b9150a931e
taskmanager_queue = taskmanager
admin_roles = admin
agent_heartbeat_time = 10
agent_call_low_timeout = 5
agent_call_high_timeout = 150
reboot_time_out = 60
api_paste_config = /etc/trove/api-paste.ini
log_file = /var/log/trove/trove.log
log_dir = /var/log/trove
log_file = trove-api.log
[database]
connection = mysql://trove:123456@10.2.35.8/trove
idle_timeout = 3600
[profiler]
[ssl]
[oslo_messaging_notifications]
[mysql]
root_on_create = True
tcp_ports = 22,3306
volume_support = True
device_path = /dev/vdb
ignore_users = os_admin
ignore_dbs = information_schema, performance_schema
[redis]
tcp_ports = 6379, 16379
volume_support = True
device_path = /dev/vdb
[cassandra]
tcp_ports = 7000, 7001, 9042, 9160
volume_support = True
device_path = /dev/vdb
[couchbase]
tcp_ports = 8091, 8092, 4369, 11209-11211, 21100-21199
volume_support = True
device_path = /dev/vdb
[mongodb]
tcp_ports = 2500, 27017, 27019
volume_support = True
device_path = /dev/vdb
num_config_servers_per_cluster = 1
num_query_routers_per_cluster = 1
[vertica]
tcp_ports = 5433, 5434, 22, 5444, 5450, 4803
udp_ports = 5433, 4803, 4804, 6453
volume_support = True
device_path = /dev/vdb
cluster_support = True
cluster_member_count = 3
api_strategy = trove.common.strategies.cluster.experimental.vertica.api.VerticaAPIStrategy
[cors]
[cors.subdomain]
[oslo_middleware]
[keystone_authtoken]
www_authenticate_uri = http://10.2.35.8:5000
auth_url = http://10.2.35.8:5000
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = trove
password = 123456
 
# vi /etc/trove/trove-taskmanager.conf
[DEFAULT]
debug = True
update_status_on_fail = True
transport_url= rabbit://openstack:123456@10.2.35.8:5672
rpc_backend=rabbit
control_exchange = trove
db_api_implementation = trove.db.sqlalchemy.api
trove_auth_url = http://10.2.35.8:5000/v3
nova_compute_url = http://10.2.35.8:8774/v2.1
cinder_url = http://10.2.35.8:8776/v3
neutron_url = http://10.2.35.8:9696
trove_volume_support = True
block_device_mapping = vdb
device_path = /dev/vdb
mount_point = /var/lib/mysql
volume_fstype = ext4
volume_time_out=120
server_delete_time_out=480
use_nova_server_config_drive = True
nova_proxy_admin_user = trove
nova_proxy_admin_pass = 123456
nova_proxy_admin_tenant_name = service
taskmanager_manager=trove.taskmanager.manager.Manager
exists_notification_transformer = trove.extensions.mgmt.instances.models.NovaNotificationTransformer
notification_service_id = mysql:2f3ff068-2bfb-4f70-9a9d-a6bb65bc084b
trove_dns_support = False
dns_account_id = 123456
dns_auth_url = http://10.2.35.8:5000/v3
dns_username = user
dns_passkey = password
dns_ttl = 3600
dns_domain_name = \'trove.com.\'
dns_domain_id = 11111111-1111-1111-1111-111111111111
dns_driver = trove.dns.designate.driver.DesignateDriver
dns_instance_entry_factory = trove.dns.designate.driver.DesignateInstanceEntryFactory
dns_endpoint_url = http://10.2.35.8/v1/
dns_service_type = dns
network_driver = trove.network.nova.NeutronDriver
default_neutron_networks = 0530e38d-2fa9-45fb-8ccc-89b9150a931e
trove_security_groups_support = False
trove_security_group_name_prefix="ALLOW ALL"
trove_security_group_rule_cidr = 0.0.0.0/0
users_page_size = 20
agent_heartbeat_time = 10
agent_call_low_timeout = 5
agent_call_high_timeout = 150
agent_replication_snapshot_timeout = 36000
use_nova_server_volume = True
network_label_regex = .* #with neutron enabled
ip_regex = .*
black_list_regex = ^10.2.110.*
template_path = /etc/trove/templates/
log_dir = /var/log/trove
log_file = trove-taskmanager.log
pydev_debug = disabled
guest_config = /etc/trove/trove-guestagent.conf
guest_info = guest_info
injected_config_location = /etc/trove/
cloudinit_location = /etc/trove/cloudinit
[database]
connection = mysql+pymysql://root:123456@10.2.35.8/trove
idle_timeout = 3600
[profiler]
[oslo_messaging_notifications]
[mysql]
icmp = True
tcp_ports = 22,3306
volume_support = True
device_path = /dev/vdb
[redis]
tcp_ports = 6379, 16379
volume_support = True
device_path = /dev/vdb
[cassandra]
tcp_ports = 7000, 7001, 9042, 9160
volume_support = True
device_path = /dev/vdb
[couchbase]
tcp_ports = 8091, 8092, 4369, 11209-11211, 21100-21199
volume_support = True
device_path = /dev/vdb
[mongodb]
volume_support = True
device_path = /dev/vdb
[vertica]
tcp_ports = 5433, 5434, 22, 5444, 5450, 4803
udp_ports = 5433, 4803, 4804, 6453
volume_support = True
device_path = /dev/vdb
mount_point = /var/lib/vertica
taskmanager_strategy = trove.common.strategies.cluster.experimental.vertica.taskmanager.VerticaTaskManagerStrategy
 
# vi /etc/trove/trove-conductor.conf
[DEFAULT]
debug = True
trove_auth_url = http://10.2.35.8:5000/v3
nova_compute_url = http://10.2.35.8:8774/v2.1
cinder_url = http://10.2.35.8:8776/v3
neutron_url = http://10.2.35.8:9696
conductor_manager = trove.conductor.manager.Manager
transport_url= rabbit://openstack:123456@10.2.35.8:5672
rpc_backend=rabbit
control_exchange = trove
[profiler]
[database]
connection = mysql+pymysql://root:123456@10.2.35.8/trove
[oslo_messaging_notifications]

  

 
2)校对api-paste.ini文件(可以先把该文件备份,然后将内容复制、粘贴进去)
 
# mv /etc/trove/api-paste.ini /etc/trove/api-paste-backup.ini
 
# vi /etc/trove/api-paste.ini
[composite:trove]
use = call:trove.common.wsgi:versioned_urlmap
/: versions
/v1.0: troveapi
 
[app:versions]
paste.app_factory = trove.versions:app_factory
 
[pipeline:troveapi]
pipeline = cors http_proxy_to_wsgi faultwrapper osprofiler authtoken authorization contextwrapper ratelimit extensions troveapp
#pipeline = debug extensions troveapp
 
[filter:extensions]
paste.filter_factory = trove.common.extensions:factory
 
[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
 
[filter:authorization]
paste.filter_factory = trove.common.auth:AuthorizationMiddleware.factory
 
[filter:cors]
paste.filter_factory = oslo_middleware.cors:filter_factory
oslo_config_project = trove
 
[filter:contextwrapper]
paste.filter_factory = trove.common.wsgi:ContextMiddleware.factory
 
[filter:faultwrapper]
paste.filter_factory = trove.common.wsgi:FaultWrapper.factory
 
[filter:ratelimit]
paste.filter_factory = trove.common.limits:RateLimitingMiddleware.factory
 
[filter:osprofiler]
paste.filter_factory = osprofiler.web:WsgiMiddleware.factory
 
[app:troveapp]
paste.app_factory = trove.common.api:app_factory
 
#Add this filter to log request and response for debugging
[filter:debug]
paste.filter_factory = trove.common.wsgi:Debug
 
[filter:http_proxy_to_wsgi]
use = egg:oslo.middleware#http_proxy_to_wsgi
3)编辑trove-guestagent.conf文件
 
# vi /etc/trove/trove-guestagent.conf
[DEFAULT]
debug=true
transport_url= rabbit://openstack:123456@10.2.35.8:5672
trove_auth_url = http://10.2.35.8:5000/v3
rpc_backend=rabbit
control_exchange = trove
datastore_manager = mysql
nova_proxy_admin_user = admin
nova_proxy_admin_pass = 123456
nova_proxy_admin_tenant_name = service
root_grant = ALL
root_grant_option = True
log_dir = /var/log/trove/
log_file = trove-guestagent.log
[profiler]
[oslo_messaging_notifications]
[mysql]
[vertica]
[redis]
[percona]
backup_namespace = trove.guestagent.strategies.backup.mysql_impl
restore_namespace = trove.guestagent.strategies.restore.mysql_impl
[couchbase]
backup_namespace = trove.guestagent.strategies.backup.experimental.couchbase_impl
restore_namespace = trove.guestagent.strategies.restore.experimental.couchbase_impl
[cassandra]
backup_namespace = trove.guestagent.strategies.backup.experimental.cassandra_impl
restore_namespace = trove.guestagent.strategies.restore.experimental.cassandra_impl
[db2]
[couchdb]
3.同步数据库
# su -s /bin/sh -c "trove-manage db_sync" trove
 
导入报错:
查看日志
# cat /var/log/trove/trove-api.log | less
2021-05-19 17:21:52.989 2550449 DEBUG migrate.versioning.util [-] Constructing engine construct_engine /usr/lib/python2.7/site-packages/migrate/versioning/util/__init__.py:145
2021-05-19 17:21:52.991 2550449 CRITICAL root [-] Unhandled error: ImportError: No module named MySQLdb
2021-05-19 17:21:52.991 2550449 ERROR root Traceback (most recent call last):
2021-05-19 17:21:52.991 2550449 ERROR root   File "/usr/bin/trove-manage", line 10, in <module>
2021-05-19 17:21:52.991 2550449 ERROR root     sys.exit(main())
2021-05-19 17:21:52.991 2550449 ERROR root   File "/usr/lib/python2.7/site-packages/trove/cmd/manage.py", line 283, in main
2021-05-19 17:21:52.991 2550449 ERROR root     Commands().execute()
2021-05-19 17:21:52.991 2550449 ERROR root   File "/usr/lib/python2.7/site-packages/trove/cmd/manage.py", line 54, in execute
2021-05-19 17:21:52.991 2550449 ERROR root     exec_method(**kwargs)
2021-05-19 17:21:52.991 2550449 ERROR root   File "/usr/lib/python2.7/site-packages/trove/cmd/manage.py", line 39, in db_sync
2021-05-19 17:21:52.991 2550449 ERROR root     self.db_api.db_sync(CONF, repo_path=repo_path)
2021-05-19 17:21:52.991 2550449 ERROR root   File "/usr/lib/python2.7/site-packages/trove/db/sqlalchemy/api.py", line 108, in db_sync
2021-05-19 17:21:52.991 2550449 ERROR root     migration.db_sync(options, version, repo_path)
2021-05-19 17:21:52.991 2550449 ERROR root   File "/usr/lib/python2.7/site-packages/trove/db/sqlalchemy/migration.py", line 102, in db_sync
2021-05-19 17:21:52.991 2550449 ERROR root     _version_control(options, repo_path)
2021-05-19 17:21:52.991 2550449 ERROR root   File "/usr/lib/python2.7/site-packages/trove/db/sqlalchemy/migration.py", line 90, in _version_control
2021-05-19 17:21:52.991 2550449 ERROR root     return versioning_api.version_control(sql_connection, repo_path)
2021-05-19 17:21:52.991 2550449 ERROR root   File "<string>", line 2, in version_control
2021-05-19 17:21:52.991 2550449 ERROR root   File "/usr/lib/python2.7/site-packages/migrate/versioning/util/__init__.py", line 163, in with_engine
2021-05-19 17:21:52.991 2550449 ERROR root     engine = construct_engine(url, **kw)
2021-05-19 17:21:52.991 2550449 ERROR root   File "/usr/lib/python2.7/site-packages/migrate/versioning/util/__init__.py", line 148, in construct_engine
2021-05-19 17:21:52.991 2550449 ERROR root     return create_engine(engine, **kwargs)
2021-05-19 17:21:52.991 2550449 ERROR root   File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/__init__.py", line 431, in create_engine
2021-05-19 17:21:52.991 2550449 ERROR root     return strategy.create(*args, **kwargs)
2021-05-19 17:21:52.991 2550449 ERROR root   File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 87, in create
2021-05-19 17:21:52.991 2550449 ERROR root     dbapi = dialect_cls.dbapi(**dbapi_args)
2021-05-19 17:21:52.991 2550449 ERROR root   File "/usr/lib64/python2.7/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 104, in dbapi
2021-05-19 17:21:52.991 2550449 ERROR root     return __import__("MySQLdb")
2021-05-19 17:21:52.991 2550449 ERROR root ImportError: No module named MySQLdb
2021-05-19 17:21:52.991 2550449 ERROR root
解决办法
yum install -y MariaDB-devel 
 
4.启动trove服务并设置开机自启
systemctl enable openstack-trove-api.service openstack-trove-taskmanager.service openstack-trove-conductor.service
systemctl start openstack-trove-api.service openstack-trove-taskmanager.service openstack-trove-conductor.service
 
三、验证操作,并创建数据库实例
1.上传mysql镜像
# source admin-openstack.sh
# trove list
# openstack image create "MySQL 5.6 64位" --file MySQL_5.6_XD.qcow2 --disk-format qcow2 --container-format bare --public
+------------------+----------------------------------------------------------------------------------+
| Property         | Value                                                                            |
+------------------+----------------------------------------------------------------------------------+
| checksum         | 156acbb0b92037053face8b0f97674bd                                                 |
| container_format | bare                                                                             |
| created_at       | 2021-05-20T02:39:36Z                                                             |
| disk_format      | qcow2                                                                            |
| id               | d30c4a3a-66d7-4cba-a8c5-25dfb5414f70                                             |
| locations        | [{"url": "rbd://9a686d1d-af9b-47ab-                                              |
|                  | 9e07-364588f8d3fb/images/6cac4e9b-3933-4a78-8a26-b783dca85320/snap", "metadata": |
|                  | {}}]                                                                             |
| min_disk         | 0                                                                                |
| min_ram          | 0                                                                                |
| name             | mysqlTest                                                                        |
| os_hash_algo     | sha512                                                                           |
| os_hash_value    | 60d8255f163623024e3de14fecad98a444341b977c1ac0c417b69528309041339a4d30b3b6edb6b5 |
|                  | 97cb33cd49a95ad0c3fce2fd4fd186da053c48f13ebe09e8                                 |
| os_hidden        | False                                                                            |
| owner            | bb780174db4d4c94883c9a083d91463d                                                 |
| protected        | False                                                                            |
| size             | 592800256                                                                        |
| status           | active                                                                           |
| tags             | []                                                                               |
| updated_at       | 2021-05-20T02:39:45Z                                                             |
| virtual_size     | Not available                                                                    |
| visibility       | public                                                                           |
+------------------+----------------------------------------------------------------------------------+

注:关于Trove MySQL5.6的镜像制作在下一篇会有。

# su -s /bin/sh -c "trove-manage --config-file /etc/trove/trove.conf datastore_update mysql \'\'" trove

# trove-manage --config-file /etc/trove/trove.conf datastore_version_update mysql mysql-5.6 mysql d30c4a3a-66d7-4cba-a8c5-25dfb5414f70 \'\' 1
 
命令帮助查看
# trove-manage datastore_version_update -h
usage: trove-manage datastore_version_update [-h]
                                             datastore version_name manager
                                             image_id packages active
 
 
Add or update a datastore version. If the datastore version already exists,
all values except the datastore name and version will be updated.
 
 
positional arguments:
  datastore     Name of the datastore.
  version_name  Name of the datastore version.
  manager       Name of the manager that will administer the datastore
                version.
  image_id      ID of the image used to create an instance of the datastore
                version.
  packages      Packages required by the datastore version that are installed
                on the guest image.
  active        Whether the datastore version is active or not. Accepted
                values are 0 and 1.
 
2.创建MySQL数据库
各种数据库实例的最低需求
Database    RAM (MB)    Disk (GB)    VCPUs
MySQL         512         5             1
Cassandra     2048         5             1
MongoDB         1024         5             1
Redis         512         5             1
 
1)查看实例类型
 
# openstack flavor list
+--------------------------------------+-----------+-------+------+-----------+-------+-----------+
| ID                                   | Name      |   RAM | Disk | Ephemeral | VCPUs | Is Public |
+--------------------------------------+-----------+-------+------+-----------+-------+-----------+
| 1280f60c-21af-4e05-ba51-3c2fa07bca32 | 1c1g      |  1024 |   50 |         0 |     1 | True      |
| 974ee747-6317-44e2-b3be-430a73fbba16 | 2c4g      |  4096 |   50 |         0 |     2 | True      |
| d1befcc4-d76b-404e-8a59-2657f874ac25 | 4c8g      |  8192 |   50 |         0 |     4 | True      |
| fe9563d4-93a4-4fd0-9782-5c752bfe1eef | 8c16g     | 16384 |   50 |         0 |     8 | True      |
+--------------------------------------+-----------+-------+------+-----------+-------+-----------+  
使用trove创建一个mysql数据库
数据库名:mysql_instance_1
数据库实例:6
卷大小:1GB
myDB数据库
数据库基于mysql数据存储和mysql-5.6 datastore_version
用户为userA,密码为password
 
# trove create mysql_instance_2 6 --size 10 --databases myDB_2 \
--users userA:password --datastore_version mysql-5.6 \
  --datastore mysql
 
生产实战命令:
#trove --debug create mysql_instance_1 1280f60c-21af-4e05-ba51-3c2fa07bca32 --size 50 --volume_type ba44284f-5e23-4a6c-8cc2-f972941e46b5  --availability_zone "High Clock Speed AZ"  --databases mydb --users admin:123456  --datastore_version mysql-5.6 --datastore mysql
 
查看已经创建的云数据库
# trove list
 
 
作者:Dexter_Wang   工作岗位:某互联网公司资深云计算与存储工程师  联系邮箱:993852246@qq.com