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
api-paste.ini文件下載地址:
https://opendev.org/openstack/trove/raw/branch/master/etc/trove/api-paste.ini
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
pip install -i
https://pypi.tuna.tsinghua.edu.cn/simple MySQLdb
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