OpenStack Trove概要

Trove簡介

Openstack Trove是openstack爲用戶提供的數據庫即服務(DBaaS)。所謂DBaaS,即trove既具有數據庫管理的功能,又具有云計算的優勢。使用trove,用戶可以:

  • "按需"獲得數據庫服務器
  • 配置所獲得的數據庫服務器或者數據庫服務器集羣
  • 對數據庫服務器或者數據庫服務器集羣進行自動化管理
  • 根據數據庫的負載讓數據庫服務器集羣動態伸縮

與openstack的其他組件一樣,trove也提供RESTful API,並通過RESTful API和其他組件進行交互。

Trove架構

上圖爲trove的架構圖。Trove API和用戶進行交互,當Trove API接收到用戶請求時,trove API首先會調用Keystone的API來對用戶進行認證,認證通過後纔會去執行相應的操作。Trove API會同步處理操作簡單的一些請求,複雜的請求則會通過Message Queue (RabbitMQ)交給Task Manager來處理。Task Manager會監聽RabbitMQ的一個topic,收到請求後就會進行處理。這些請求通常是分配數據庫實例、管理數據庫實例的生命週期、操作數據庫等。和openstack的其他組件一樣,Trove也有一個Infrastructure Database來存儲自己本身的數據,如數據庫實例的信息等。Trove conductor的主要功能是接收來自guest agent的狀態更新信息,這些信息會被存儲在Infrastructure database裏面或者作爲調用結果返回給其他服務。通常這些狀態更新信息包括:guest agent心跳包,數據庫備份狀態等。Guest Agent運營於數據庫服務器中(虛擬機),給trove其他組件提供了一套內部使用的API,trove的其他組件通過Message Queue來調用這些API,guest agent收到API調用請求後,執行相應的數據庫操作。

Trove的安裝部署請參考Openstack官方文檔(多坑慎入):

https://docs.openstack.org/project-install-guide/database/ocata/

Trove的基本概念

  • 數據庫實例(Instance):包含數據庫程序的openstack虛擬機,如果用戶創建了一個數據庫實例,那麼他其實就創建了一臺openstack虛擬機,並在該虛擬機上啓動了數據庫服務。
  • Datastore:用來表示和存儲數據庫的類型、版本、虛擬機鏡像等信息。當用戶創建一個數據庫實例時需要指定Datastore.
  • 配置組(Configuration Group):數據庫參數組成的集合。用戶可以將配置組應用到一個或多個數據庫實例上,因而避免了大量的重複操作。

 

Trove的用法

0.添加Datastore

在創建數據庫實例時,需要指定Datastore來告訴trove需要用到的鏡像、數據庫類型及版本信息。所以在創建數據庫實例之前需要在系統中創建Datastore.

由於版權問題,openstack官方並沒有提供可供下載的鏡像,需要用戶自己去build。可參考文檔:

https://docs.openstack.org/developer/trove/dev/building_guest_images.html

ad@ltczhp11:~$ glance image-create --name mysql-5.6 --disk-format=qcow2 --container-format=bare --file=./mysql-5.6.qcow2 --visibility public 
ad@ltczhp11:~$ glance image-list
+--------------------------------------+--------------------------+
| ID                                   | Name                     |
+--------------------------------------+--------------------------+
| 31d60001-c2bf-496e-9f21-069bb411bd3b | CouchDB                  |
| eaf27f1b-3a8a-4efb-827c-697fa065933b | DB2                      |
| 60ca8bfc-28a7-418a-9422-ec6548f23d54 | DIB-Mongodb              |
| 51103b44-2618-4c15-8ded-4371bea8973a | DIB-Postgres             |
| 8bc1a6a2-6ec3-4f37-bb54-91134b903996 | mongodb-lsl              |
| c4c9a58f-bbe6-4640-8488-0c05b52028df | mysql-5.6                |
| 5d800163-3660-467a-a433-e1827924a741 | PostgreSQL               |
| 38291f8f-5af6-4338-82b7-3f18dc355cae | ubuntu16.04-server-s390x |
+--------------------------------------+--------------------------+

使用trove-manage添加Datastore:

root@ltczhp11:~# trove-manage datastore_update mysql "" #創建一個datastore

root@ltczhp11:~# trove-manage datastore_version_update mysql 5.6 mysql c4c9a58f-bbe6-4640-8488-0c05b52028df "" 1 #創建一個dadastore的版本,一個dadastore可以有多個版本

root@ltczhp11:~# trove-manage datastore_update mysql 5.6 #指定默認的datastore版本

1.基本的數據庫實例操作

  • 列出所有的數據庫實例 
    • $ trove list
  • 創建一個數據庫實例 
    • $ trove create vm1 2 --size 3 --datastore mysql
  • 重啓一個數據庫實例 
    • $ trove restart vm1
  • 刪除一個數據庫實例 
    • $ trove delete vm1
  • 強制刪除一個數據庫實例 
    • $ trove force-delete vm1
  • 調整一個數據庫實例的規格
    • $ trove resize-volume vm1 4
    • $ trove resize-instance vm1 3

2.管理數據庫用戶

  • 列出所有的數據庫用戶
    • $ trove user-list
  • 創建一個用戶
    • $ trove user-create
  • 刪除一個用戶
    • $ trove user-delete
  • 給一個用戶授權訪問某個數據庫 
    • $ trove user-grant-access
  • 吊銷用戶對於某一個數據庫的訪問權限
    • $ trove user-revoke-access
  • 顯示用戶信息
    • $ trove user-show
  • 顯示用戶的權限
    • $ trove user-show-access

3. 數據庫管理

  • 在一個數據庫實例中創建一個數據庫 
    • $ trove database-create
  • 列出一個數據庫實例中的所有數據庫
    • $ trove database-list
  • 刪除一個數據庫實例中的某個數據庫
    • $ trove database-delete

4. 副本管理

  • 創建一個副本
    • $ trove create  --replica_of
  • 將一個副本從源數據庫分離
    • $ trove detach-replica
  • 讓一個副本在副本集合中成爲源數據庫
    • $ trove promote-to-replica-source
  • 刪除掛掉的源數據庫
    • $ trove eject-replica-source
  • 設置副本親和性
    • $ trove create  --replica_of  --locality affinity
    • $ trove create  --replica_of  --locality anti-affinity
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章