OpenStack的Trove組件詳解


一:簡介

    一、背景

       1. 對於公有雲計算平台來說,只有計算、網絡與存儲這三大服務往往是不太夠的,在目前互聯網應用百花齊放的背景下,幾乎所有應用都使用到數據庫,而數據庫承載的往往是應用最核心的數據。此外,在大數據分析越來越盛行的背景下,對數據庫的可靠便捷管理也變得更為重要。因此,DBase as a Service(DBaaS,數據庫服務)也就順理成章地成為了雲計算平台為用戶創造價值的一個重要服務。

       2. 對比Amazon AWS中各種關於數據的服務,其中最著名的是RDS(SQL-base)和DynamoDB(NoSQL),除了實現了基本的數據管理能力,還具備良好的伸縮能力、容災能力和不同規格的性能表現。因此,對於最炙手可熱的開源雲計算平台Openstack來說,也從Icehouse版加入了DBaaS服務,代號Trove。直到去年底發布的Openstack Liberty版本,Trove已經經過了4個版本的迭代發布,目前已經成為Openstack官方可選的核心服務之一。本文將深入介紹Trove的原理、架構與功能,並通過實踐來展示Trove的應用。

    二、設計目標

       1. Trove is Database as a Service for OpenStack. It’s designed to run entirely on OpenStack, with the goal of allowing users to quickly and easily utilize the features of a relational or non-relational database without the burden of handling complex administrative tasks. ”這是Trove在官方首頁上對這個項目的說明,有兩個關鍵點。一個是從產品設計上說,它定位不僅僅是關系型數據庫,而且還涵蓋非關系數據庫的服務。另一個是從產品實現上說,它是完全基於Openstack的。

       2. 從第一點可以看出Trove解決問題的高度已經超越了同類產品。因為我們從其他雲計算平台對比去看,關系型和非關系型數據庫都是由不同的服務去提供(比如AWS的RDS和DynamoDB),而且實現上也往往互相獨立的系統,不僅UI不同,API也不一樣。而Trove的目標是抽象盡可能多的東西,對外提供統一的UI和API,盡量減少冗余實現,提升平台內聚。只要具備了實例、數據庫、用戶、配置、備份、集群、主從復制這些概念,不管是關系型還是非關系型數據庫,都能統一管理起來。從最新的Liberty版本發布的情況下,目前開源的主流關系型和非關系型數據庫也得到了支持,比如Mysql(包括Percona和MariaDB分支)、Postgresql、Redis、MongoDB、CouchDB、Cassandra等等。不過根據官方的介紹,目前只有Mysql是得到了充分的生產性測試,其他的還處於實驗性階段。

       3. 而第二點完全基於Openstack的,可以說是一個較大的創新。試想,假設你是一個雲計算服務商,如果現在要提供數據庫服務,只需要在原有平台軟件上升級與配置一下就行,其他什么都不需要,不需要采購數據庫服務器硬件,不需要規划網絡,不需要規划IDC,這是一種什么樣的感覺?Trove完全構建於Openstack原有的幾大基礎服務之上。打個比喻類似於Google著名的Bigtable服務是構建於GFS、Borg、Chubby等幾個基礎服務之上。所以,Trove實際上擁有了雲平台的一些基礎特性,比如容災隔離、動態調度、快速響應等能力,而且從研發的角度看,也大大減少了重復造輪子的現象。

 

    三、基本概念

       1. 數據庫實例(Instance):包含數據庫程序的openstack虛擬機,如果用戶創建了一個數據庫實例,那么他其實就創建了一台openstack虛擬機,並在該虛擬機上啟動了數據庫服務。

       2. Datastore:用來表示和存儲數據庫的類型、版本、虛擬機鏡像等信息。當用戶創建一個數據庫實例時需要指定Datastore.

       3. 配置組(Configuration Group):數據庫參數組成的集合。用戶可以將配置組應用到一個或多個數據庫實例上,因而避免了大量的重復操作。

 

    四、特點

       1. "按需"獲得數據庫服務器,配置所獲得的數據庫服務器或者數據庫服務器集群

       2. 自動化操作,自動的增、刪、改、備。

       3. 更好的資源利用,你可以根據業務量,自由的對數據庫實例進行伸縮。

 

二:架構

    一、核心架構

            

 

    二、組件詳解
       

       1. trove-api:用於操作請求的接收和分發操作提供 REST 風格的 API,同時與 trove-conductor 和 trove-taskmanager 通信,一些輕量級的請求,比如獲取實例狀態,實例數量等操作都是自身直接處理或訪問 trove。trove-conductor 和 trove-taskmanager處理比較重量級的操作。比如創建數據庫,創建備份等操作都是通過rpc傳遞給 trove-taskmanager,然后通過調用 nova、swift、neutron、cinder等組件來完成操作。

       2. trove-conductor:將 vm 內 trove-guestagent 發送的狀態信息保存到數據庫,與 trove-guestagent 的通信是通過rpc來實現的,trove-conductor 這個組件的目的是為了避免創建的數據庫的實例直接訪問數據庫,它是做為一個 trove-guestagent 將昨天寫入數據庫的中間件。

       3. trove-taskmanager:執行 trove 中大部分復雜的操作,請求者發送消息到 trove-taskmanager,trove-taskmanager 在請求者的上下文中調用相應的程序執行這些請求。taskmanager 處理一些操作,包括實例的創建、刪除,與其他服務如Nova、Cinder、Swift等的交互,一些更復雜的Trove操作如復制和集群,以及對實例的整個生命周期的管理。trov-taskmanager就像是其他openstak服務的客戶端,如nova,swift,cinder等,當要創建數據庫實例時就將請求發送給nova,讓nova去創建個實例,要備份的話就調用swift接口上傳備份。

       4. trove-guestagent:集成在vm鏡像里面,通過監聽rpc里面task manager發過來的指令,並在本地執行代碼完成數據庫任務,taskmanager將消息發送到guest agent,guest agent通過調用相應的程序執行這些請求。

 

   三、功能

     

       1. 動態resize能力:分為instance-resize和volume-resize,前者主要是實例運行的內存大小和cpu核數,后者主要是指數據庫分區對應的硬盤卷的大小。由於實例是跑在vm上的,而vm的cpu和memory的規格可以通過Nova來進行動態調整,所以調整是非常方便快捷的。另外硬盤卷也是由Cinder提供的動態擴展功能來實現resize。resize過程中服務會有短暫的中斷,是由於mysqld重啟導致的。

       2. 全量與增量備份:目前mysql的實現中,備份是由實例vm上的guestagent運行xtrabackup工具進行備份,且備份后的文件會存儲在Swift對象存儲中。從備份創建實例的過程則相反。由於xtrabackup強大的備份功能,所以Trove要做的只是做一些粘膠水的工作。

       3. 動態配置更新:目前支持實例的自定義配置,可以創建配置組應該到一組實例上,且動態attach到運行中的實例中生效。

       4. 一主多從的一鍵創建:在創建數據庫實例的API中,支持批量創建多個從實例,並以指定的實例做主進行同步復制。這樣就方便了從一個已有實例創建多個從實例的操作。而且mysql5.6版本之后的同步復制支持GTID二進制日志,使得主從實例之間關系的建立更加可靠和靈活,在failover處理上也更加快速。

       5. 集群創建與管理(percona/mariadb支持):Cluster 功能目前在 mysql原生版本暫時不支持,但是其兩個分支版本 percona和 mariadb基於 Galera庫實現的集群復制技術是支持的。另外Liberty版本的Trove也提供了對mongodb的集群支持。

 

三:常用操作

    一、實例、數據庫、數據庫用戶管理

        

 

    二、備份和集群管理

          

 


免責聲明!

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



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