openstack高可用集群22-部署Trove實戰(數據庫服務)


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM