1. 程式人生 > >Rocky版新功能集錦之三:Trove

Rocky版新功能集錦之三:Trove

摘要:8月31日,備受業界關注的OpenStack第18個版本Rocky正式釋出。在人工智慧,機器學習,NFV和邊緣計算等使用者的驅動下,Rocky版本的OpenStack變得比以往更強大,它帶來了數十種增強功能,並支援各種硬體架構,包括裸機管理服務等,這些更新和升級能夠很好的滿足基礎設施的新需求。OpenStack正力爭為業界提供一個開放,完善,穩定,功能齊全的最優解決方案。今天將圍繞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專案架構


圖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常用操作


圖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許可權

2. 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資訊 

3. 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 

4. 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

5. 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的資訊 

6. replica操作

為了支援資料庫的高可用,trove可動態新增或刪除一個instance副本。 

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

7. 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的許可權資訊 

8. 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版本釋出之際,九州雲將於10月10日上午10:00,正式線上同步釋出全球首款基於 Rocky版本第七代全新開源雲管理平臺 ——Animbus® 7.0系列產品。

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