本文小編為大家詳細介紹“MySQL fabric的概念是什么”,內容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“mysql fabric的概念是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
為東川等地區(qū)用戶提供了全套網頁設計制作服務,及東川網站建設行業(yè)解決方案。主營業(yè)務為成都做網站、網站建設、外貿營銷網站建設、東川網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
MySQL Fabric是一個用于管理MySQL服務器群的可擴展框架,是GPL的開源軟件;也就是說在符合GPL的規(guī)范下,用戶可以自由的使用和修改這個軟件。mysql fabric是處理任何管理請求的進程;使用HA特性時可以讓此進程負責監(jiān)視主服務器并在發(fā)生故障時,開始故障轉移,將從服務器升級成主服務器。
MySQL Fabric 簡介
MySQL Fabric是一個用于管理 MySQL 服務器群的可擴展框架。
MySQL Fabric能“組織”多個MySQL數據庫,是應用系統(tǒng)將大于幾TB的表分散到多個數據庫,即數據分片(Data Shard)。在同一個分片內又可以含有多個數據庫,并且由Fabric自動挑選一個適合的作為主數據庫,其他的數據庫配置成從數據庫,來做主從復制。在主數據庫掛掉時,從各個從數據庫中挑選一個提升為主數據庫。之后,其他的從數據庫轉向新的主數據庫復制新的數據。注意:這里說的“自動”是指由MySQL Fabric在后臺完成,而不需要用戶手動更改配置。最重要的是,MySQL Fabric是GPL的開源軟件,也就是在符合GPL的規(guī)范下,你可以自由的使用和修改這個軟件。
Fabric框架實現(xiàn)了兩個特性:高可用性(high availablity)和使用數據分片的橫向擴展(sharding),這兩個特性既可以單獨使用,也可以結合使用。
這兩個特性都基于以下兩個層面實現(xiàn):
mysql fabric 是處理任何管理請求的進程。使用 HA特性時,還可以讓此進程負責監(jiān)視主服務器并在發(fā)生故障時,開始故障轉移,將從服務器升級成主服務器。MySQL Fabric-aware 連接器把從 MySQL Fabric 獲取的路由信息存儲到緩存中,然后憑借該信息將事務或查詢發(fā)送給正確的 MySQL 服務器。
高可用性
HA 組由兩個或更多個 MySQL 服務器組成;任何時刻,其中都有一臺服務器作為主服務器(MySQL復制功能的主服務器),其他服務器則作為從服務器(MySQL 復制功能的從服務器)。HA組的作用就是確保該組中保存的數據始終可訪問。MySQL 的復制功能可通過復制來確保數據安全,MySQL Fabric 的高可用性解決方案在此基礎上提供了兩個必不可少的額外要素:
故障檢測和升級 — MySQL Fabric 監(jiān)視 HA 組中的主服務器,在主服務器發(fā)生故障時選擇一個從服務器并將其升級為主服務器數據庫請求路由 — 將寫入請求路由到主服務器以及將讀取請求在各個從服務器之間進行負載均衡的操作對應用是透明的,即使在故障轉移期間拓撲發(fā)生變化時也是如此
分片 — 橫向擴展
當接近一個 MySQL 服務器(或 HA 組)的容量或寫入性能極限時,MySQL Fabric 可在多個 MySQL服務器“組”中對數據進行分區(qū),從而支持數據庫服務器橫向擴展。請注意,一個組可以只包含一個 MySQL 服務器,也可以是一個 HA 組。管理員定義這些服務器之間的數據分片方式;指定應將哪些表的列用作分片鍵,以及是使用 HASH 映射還是 RANGE 映射將這些鍵映射至正確的分片, 如果需要進一步分片,MySQL Fabric 可以拆分現(xiàn)有分片;此外,還可以重新分配分片。
MySQL Fabric要解決的問題
為什么做數據分片?當你的應用需要處理的表大于1TB的數據時,Data Shard常常是 必須的。 這么大的表,無論在查詢、更新的效率上,或者是備份、更改結構所需要的 時間上,都會造 成 很大的問題。然而當你將這么大的表分散到多個數據庫服務器上, 又會使每一臺數據庫服 務器都有可能是單個故障點。只要 有一臺掛掉就會使整個系統(tǒng) 的操作發(fā)生問題。另一方面, 應用端的程序也會因為每個查詢都要依其查詢條件 (where子句的內容)分別指向不同的數據庫 而變得更加復雜。再者,當數據分片的 結構 改變時(例如增加一個數據庫),會使應用端的所有 程序都必須修改,從而導致 維護變得極為復雜。
為了解決應用程序復雜度增加的問題,有人在應用程序和數據庫服務器之間增加 一個代理 (proxy)或者成為switch,應用程序所有對數據庫的指令先送到proxy,再由 proxy判斷要轉到 哪個數據庫。下圖就是這個方案的示意圖。這也許可以解決應用程 序難以維護的問題,但是 當應用端的數量增加,數據庫分片增加,或者系統(tǒng)壓力增 加時,這個switch會成為容量及性 能的瓶頸和單點故障(當它宕掉時,應用端找不到 數據庫),而且所有的數據庫指令均需要傳 兩次(先到switch再到數據庫)。每個查詢都會造成額外的負荷。
MySQL Fabric的架構
MySQL Fabric采用不用的做法,其架構如下圖所示。主要的特點是把switch合并到各應用端的connector中,以解決單一switch的單點故障和性能瓶頸。
MySQL Fabric由三個部分構成:
是一個python腳本,是整個架構的核心。
MySQL Fabric管理節(jié)點主要的功能是管理整個數據庫服務器場(Database Server Farm),它啟動時會找/etc/mysql/fabric.cnf這個配置文件,由它指定fabric背后當成存放Server Farm架構和配置之repository的MySQL數據庫位置、端口和連接賬號等信息。
Fabric在初始化時(執(zhí)行mysqlfabric manage setup命令),會在MySQL數據庫上開一個schema(通常是名稱為fabric的database),存放Server Farm的配置相關信息,如哪些服務器組由哪些數據庫構成,各服務器組中的主從服務器分別是哪些,等等。
MySQL Fabric節(jié)點在設置配置時,會對Server Farm中各數據庫下達建立主從復制的命令(上圖的紅色線條)。
在正常運行時定期ping各組的主服務器 ,當發(fā)現(xiàn)主數據庫沒有正常運行時,它會啟動故障轉移程序,在該server farm的從數據庫中找一個合適的提升為主服務器。其他的從數據庫則轉向新的主數據庫繼續(xù)復制數據。
這是整個架構中的工作引擎,在傳統(tǒng)的數據庫應用中這是單一的MySQL數據庫,MySQL Fabric則是以多個數據庫支持大數據量表(TB級以上)和高可用性數據庫的需求。這些數據庫分成幾個高可用組(HA Group),每個組包含一個以上的數據庫服務器,上圖中最下面的幾個灰色和淺藍色的方塊代表高可用組。如果高可用組中有多個數據庫,MySQL Fabric會挑選(使用命令mysqlfabric group promote命令)一個提升為主數據庫(Master),其他數據庫則成為從數據庫(Slave),從數據庫復制主數據庫的變化,完成設定同一高可用組內的主從復制。以后,F(xiàn)abric會定期件事這個主數據庫。當主數據宕掉之后,F(xiàn)abric會從高可用組內挑選一個提升為主數據庫,其他的數據庫會轉向這個新的主數據庫繼續(xù)復制。
另一方面,MySQL Fabric也會只是應用端的conector對這些主從數據庫做讀寫分離,當應用程序對數據庫做讀寫兼有的操作時,connector會將該指令提交給主數據庫。如果應用程序只會對數據庫進行讀操作,且連線的read_only參數設置為“ON”,則所有的查詢均輪流傳送到這幾個數據庫。借助讀寫分離,應用系統(tǒng)的資料處理能力得以增加。此外,如前面所述,MySQL Fabric還能處理需要拆分到多個數據庫服務器的表(sharding tables),每一個高可用組都可能存放shard table的部分數據。應用端的connector會將對shard table的指令依MySQL Fabric的管理節(jié)點的設定送到不同的高可用組,這樣可使數據庫的容量隨著高可用組的數量增加而增長。同時,對非拆分的表所下的指令和所有的DDL會由connector送到全局高可用組(global group),全局高可用組的主數據庫被MySQL Fabric設置為其他高可用組的主數據庫。所有存拆分表的高可用組的主數據庫復制global group的變化,這么一來其他高可用組都有一份非拆分表的資料。從而使得SQL中拆分表對非拆分表的JOIN操作變得更簡單。
應用系統(tǒng)在運行時,每個SQL指令都會經由connector發(fā)送到數據庫。MySQL Fabric所搭配的connector和一般使用單機的MySQL數據庫一樣,只是在較新版的connector是fabric aware connector多了一些能處理數據庫服務器場(database server farm)的功能。使他們能在建立數據庫連接時,以XML-RPC協(xié)議檢查MySQL Fabric的管理節(jié)點中server farm的配置,然后通過該連接下的查詢可依fabric的指示送到適合的數據庫。
如此一來,常見的database shard方案中可能造成性能瓶頸的proxy放到connector中,從而解決了這個問題。目前MySQL Fabric支持的技術有java、python、PHP,即Connector/J、Connector/Python和Connector/PHP都是Fabric-aware。
以java為例,JDBC driver必須是Connector/J 5.1.30以后的版本,F(xiàn)abric的Java程序和一般對單機MySQL的查詢的Java程序差不多,只是在建立database connection object時database connection URL不是指向數據庫,改為指向MySQL Fabric管理節(jié)點(服務器的IP和端口通常是32274)。
當查詢的表時全局表(不做table shard)或DDL(例如建表或改表結構)時,建立connection object的要加上''fabricServerGroup="參數,之后通過這個connection object所下的SQL指令會送到Global Group的主數據庫,再由數據庫復制到其他的高可用組(shard)中。
如果SQL命令所要操作的表時分區(qū)表(shard table),則建立connection object時要在參數加上''fabricShardTable="參數,之后通過這個connection object所下的SQL命令會根據MySQL Fabric所設定的分表(shard)原則送到各分區(qū)(shard)的高可用組。
這樣一來,應用程序對這些shard table下的SQL指令時,不需要在SQL中判斷要送到哪個數據庫,完全由connector在建立數據庫連接時向MySQL Fabric所查到的server farm的配置信息(哪個數據庫屬于哪個shard group,各shard table的拆分原則等)所決定。而且這個配置在建立主連接后就緩存在Connector所在的應用端。
這樣,在每次下SQL指令時就不需要重復查詢MySQL Fabric管理節(jié)點,而依存于應用端的分表配置直接送到正確的數據庫。而應用程序的效率不會因為做了表的拆分而有任何降低。
讀到這里,這篇“mysql fabric的概念是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文題目:mysqlfabric的概念是什么
瀏覽路徑:http://muchs.cn/article30/gcicpo.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站建設、企業(yè)網站制作、網站設計、外貿建站、Google、手機網站建設
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)