Rocky版新功能集錦之三:Trove

摘要:8月31日,備受業界關注的OpenStack第18個版本Rocky正式發佈。在人工智能,機器學習,NFV和邊緣計算等用戶的驅動下,Rocky版本的OpenStack變得比以往更強大,它帶來了數十種增強功能,並支持各種硬件架構,包括裸機管理服務等,這些更新和升級能夠很好的滿足基礎設施的新需求。OpenStack正力爭爲業界提供一個開放,完善,穩定,功能齊全的最優解決方案。今天將圍繞Rocky版本的Trove項目,對項目的新特性進行展示,業界需要掌握的關鍵點都在這裏。

Rocky版新功能集錦之三:Trove

Trove簡介

Trove是OpenStack官方的database-as-service項目,提供關係型或非關係型數據庫的部署、配置、備份、恢復和監控,大大簡化了操作流程。它在OpenStack Havana版本中被孵化,並被正式集成在OpenStack Icehouse版本中。項目的原始贊助商爲HP和Rackspace,主要貢獻者有Tesora,Rackspace,HP,IBM,Redhat,eBay,Mirantis。

Rocky版本Trove功能變更一覽

在最新發布的OpenStack Rocky版本中,Trove未引入新的特性,更注重修復部分bug,例如:

1、MariaDB在主備切換的時候,如果在將副本附加到新主服務器之前重新激活舊主服務器,則可能會在舊主服務器上意外創建新的GTID,並同步到這些副本,從服務器無法變更爲主服務器。該問題通過先將副本附加到新主服務來解決。

2、取消從Nova創建Volume,直接通過cinderclient創建volume。

3、Peviously root disable API返回沒有任何內容的HTTP 200響應,現在將返回更合適的HTTP 204響應。

Trove項目架構

Rocky版新功能集錦之三:Trove

圖1 Trove系統架構圖

圖1展示了Torve項目的架構,它由trove-api,trove-taskmanager,trove-conductor和trove-guestagent子系統構成,各子系統之間通過RPC進行通信。在這4個子系統中:

1、trove-api 提供REST風格的API,完成一些數據層面的邏輯操作(直接操作DB),比如獲取實例列表、集羣列表等,將複雜的異步任務它都交給taskmanager去完成,例如創建虛擬機、卷等操作。

2、trove-taskmanager與OpenStack的核心組件Nova、Cinder、Neutron等進行操作,完成數據庫實例的創建、刪除等資源操作。

3、trove-guestagent集成在vm鏡像裏面,創建、管理、備份數據庫等,並通過週期性任務,實時更新數據庫狀態。

4、trove-conductor作爲trove數據庫訪問的中間件,避免了trove-guestagent直接訪問trove數據庫。

Trove抽象出系統的公共基礎架構,通過對基礎架構的繼承開發,可支持各種不同類型數據庫。這也使得用戶可以通過統一的方式操作不同類型的數據庫,降低了使用難度。OpenStack Trove目前支持Cassandra,CouchBase,CouchDB,DataStax Enterprise,DB2,MariaDB,MongoDB,MySQL,Oracle,Percona Server,PostgreSQL,Redis和Vertica。

Trove常用操作

Rocky版新功能集錦之三:Trove
圖2 Trove概念架構圖

圖2顯示了Trove的概念架構圖,trove的主要操作也是圍繞這幾個概念實現的,分別爲instance操作、datastore操作、backup操作、cluster操作、configuration操作、replica操作、user操作和database操作。下面展示了它們的部分操作,詳細的操作參數可通過trove --help獲得。

  1. Instance操作

Instance代表一個運行有mysql或MongoDB等的虛擬機,對Instance的操作即可落在虛擬機上,也可落在mysql、MongoDB上。

• trove create:創建一個trove instance
• trove delete:刪除一個trove instance
• trove resize-instance:調整虛擬機的flavor
• trove resize-volume:調整mysql或MongoDB等載盤的大小
• trove restart:重啓一個trove instance
• trove show:顯示一個trove instance的detail信息
• trove update:更新一個trove instance的信息
• trove list: 展示當前項目下的所有trove instances
• trove root-disable: 禁止mysql等獲得root權限
• trove root-enable: 運行mysql等獲得root權限

  1. datastore操作

Datastore維護着當前Trove能夠支持的數據庫系統版本和對應鏡像等信息。
• trove datastore-list:顯示有哪些datastore trove
• datastore-show:顯示一個datastore的detail信息
• trove datastore-version-list:顯示一個datastore的version list
• trove datastore-version-show:顯示一個datastore的一個version的detail信息

  1. backup操作

trove提供備份mysql或MongoDB中的數據庫到swift的操作,支持全量備份和增量備份。

• trove backup-create:創建一個數據庫的backup
• trove backup-delete:刪除指定ID的backup
• trove backup-list:列出可用的所有backups
• trove backup-list-instance:列出指定instance對應數據庫的所有可用backups
• trove backup-show:顯示指定ID的backup的detail信息
• trove backup-copy:從一個backup copy生成一個新的backup

  1. cluster操作

針對有些數據庫系統有cluster的概念,比如MongoDB。

• trove cluster-create:創建一個新的cluster
• trove cluster-delete:刪除一個cluster
• trove cluster-instances:列出一個cluster的所有instances
• trove cluster-list:列出所有的clusters
• trove cluster-show:顯示指定ID的cluster的detail信息
• trove cluster-grow: 向cluster中添加更多的instance
• trove cluster-shrink: 從cluster中移除instance
• trove cluster-seset_status: 設置cluster的任務狀態爲None
• trove cluster-upgrade:將cluster升級到一個新的datastore

  1. configuration group操作

trove提出了配置組的概念,這是爲了是用戶可以定製不同Instance中數據庫系統的配置參數,針對不同的數據庫系統類型,支持的配置參數也不相同,比如mysql支持的配置參數定義在:trove/templates/mysql/validation-rules.json。此外,trove限制每個instance只能配置一個configuration group。

• trove configuration-create:創建一個新的configuration group
• trove configuration-delete:刪除一個configuration group
• trove configuration-attach:attach一個configuration group到一個trove instance上
• trove configuration-detach:detach一個trove instance上的configuration group
• trove configuration-default:顯示一個trove instance的默認configuration group
• trove configuration-instances:顯示綁定到一個configuration group上的所有trove instances
• trove configuration-list:顯示所有的configuration group
• trove configuration-show:顯示一個configuration group的detail信息
• trove configuration-parameter-list:列出指定version的datastore支持的configuration group配置參數
• trove configuration-parameter-show:顯示指定version的datastore支持的configuration group的某一項配置的詳細信息
• trove configuration-patch:把新的<values> patch到一個configuration group
• trove configuration-update:更新一個configuration group的信息

  1. replica操作

爲了支持數據庫的高可用,trove可動態添加或刪除一個instance副本。

• trove create [--replica_of <source_instance>] [--replica_count <count>] :爲一個instance添加一個新的副本
• trove detach-replica: 去除一個instance的副本

  1. user操作

trove支持創建數據庫系統的user,並支持賦予/收回 user訪問數據庫系統的權限。

• trove user-create:創建一個數據庫系統的user
• trove user-delete:刪除一個數據庫系統的user
• trove user-grant-access:賦予user訪問database(可以同時指定多個)的權限
• trove user-revoke-access:收回user訪問database的權限
• trove user-list:list一個數據庫系統的所有users
• trove user-show:顯示一個數據庫系統中指定user的detail信息
• trove user-show-access:顯示一個數據庫系統中指定user訪問database的權限信息

  1. database操作

trove支持在一個數據庫系統上創建多個database;

• trove database-create:在一個數據庫系統上創建database
• trove database-delete:刪除一個數據庫系統上的database
• trove database-list:列舉一個數據庫系統上的所有databases

除了這些操作,Trove還有針對security group、metadata、log等,這些操作使得Trove功能十分強大,滿足了用戶的需求。

Rocky版本遇到的問題與解決方案

目前,Trove向虛擬機中注入guestagent的配置文件等是通過Nova api中的personality參數,但是此參數已經從OpenStack Queens版本中啓用,將來會從Nova代碼中移除。未來,Trove將使用Nova api中的--user-data參數進行文件的注入,具體操作如下:

1、重建trove.instance.models.BaseIntance中的get_injected_file函數,用來獲取注入文件內容、路徑、所有者和權限,生成InjectedFile對象,請將所有需要注入的文件構成InjectedFile list返回。

2、調整trove.taskmanger.models.FreshIntanceTask中的_prepare_userdata函數,基於InjectFile對象建立cloud-config腳本。如果Trove中還存在datastore_manager的cloudinit腳本,將會對該cloudinit腳本進行檢測,然後將它和cloud-config腳本轉化爲mime multi part file類型腳本,以防止傳遞給cloud-init的數據類型大於一種。

3、利用-user-data傳遞參數給Nova api,虛擬機啓動的時候,cloud-init通過執行腳本完成文件的注入。

未來Trove server與Trove guest agent間的通信將採用octaviad的網絡架構模式。

參考鏈接:
https://github.com/openstack/trove
https://wiki.openstack.org/wiki/Trove
https://docs.openstack.org/developer/trove/
https://docs.openstack.org/releasenotes/trove/rocky.html

搞個大事件

Rocky版新功能集錦之三:Trove
值此Rocky版本發佈之際,九州雲將於10月10日上午10:00,正式線上同步發佈全球首款基於 Rocky版本第七代全新開源雲管理平臺 ——Animbus® 7.0系列產品。

10月10日10點,誠邀業界同仁一同品鑑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章