MySQL Fabric是用來管理MySQL伺服器群的可擴充框架,是GPL的開源軟體;也就是說在符合GPL的規格下,使用者可以自由的使用和修改這個軟體。 mysql fabric是處理任何管理請求的進程;使用HA特性時可以讓此進程負責監視主伺服器並在發生故障時,開始故障轉移,將從伺服器升級成主伺服器。
本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。
MySQL Fabric 簡介
#MySQL Fabric是用來管理 MySQL 伺服器群的擴充架構。
MySQL Fabric能「組織」多個MySQL資料庫,是應用系統將大於幾TB的資料表分散到多個資料庫,也就是資料分片(Data Shard)。在同一個分片內又可以含有多個資料庫,並且由Fabric自動挑選一個適合的作為主資料庫,其他的資料庫配置成從資料庫,來做主從複製。在主資料庫掛掉時,從各個從資料庫中挑選一個提升為主資料庫。之後,其他的從資料庫轉向新的主資料庫複製新的資料。注意:這裡說的「自動」是指由MySQL Fabric在背景完成,而不需要使用者手動更改配置。最重要的是,MySQL Fabric是GPL的開源軟體,也就是在符合GPL的規格下,你可以自由的使用和修改這個軟體。
Fabric框架實現了兩個特性:高可用性(high availablity)和使用資料分片的橫向擴展(sharding),這兩個特性既可以單獨使用,也可以結合使用。
這兩個特性都基於以下兩個層面實作:
mysql fabric 是處理任何管理請求的程序。使用 HA特性時,還可以讓此進程負責監視主伺服器並在發生故障時,開始故障轉移,將從伺服器升級成主伺服器。 MySQL Fabric-aware 連接器會將從 MySQL Fabric 取得的路由資訊儲存到快取中,然後憑藉該資訊將交易或查詢傳送給正確的 MySQL 伺服器。
高可用性
HA 群組由兩個或更多MySQL 伺服器組成;任何時刻,其中都有一台伺服器作為主伺服器(MySQL複製功能的主伺服器),其他伺服器則作為從伺服器(MySQL 複製功能的從伺服器)。 HA組的作用是確保該組中保存的資料始終可存取。 MySQL 的複製功能可透過複製來確保資料安全,MySQL Fabric 的高可用性解決方案在此基礎上提供了兩個必不可少的額外要素:
故障檢測和升級— MySQL Fabric 監視HA 組中的主伺服器,在主伺服器發生故障時選擇一個從伺服器並將其升級為主伺服器資料庫請求路由— 將寫入請求路由到主伺服器以及將讀取請求在各個從伺服器之間進行負載平衡的操作對應用是透明的,即使在故障轉移期間拓撲發生變化時也是如此
分片— 橫向擴展
當接近一個MySQL 伺服器(或HA 組)的容量或寫入效能極限時,MySQL Fabric 可在多個MySQL伺服器「群組」中對資料進行分區,從而支援資料庫伺服器橫向擴展。請注意,一個群組可以只包含一個 MySQL 伺服器,也可以是一個 HA 群組。管理員定義這些伺服器之間的資料分片方式;指定應將哪些表的列用作分片鍵,以及是使用HASH 映射還是RANGE 映射將這些鍵映射至正確的分片, 如果需要進一步分片, MySQL Fabric 可以分割現有分片;此外,還可以重新分配分片。
MySQL Fabric要解決的問題
為了解決應用程式複雜度增加的問題,有人在應用程式和資料庫伺服器之間增加 一個代理程式 (proxy)或成為switch,應用程式所有對資料庫的指令先送到proxy,再由 proxy判斷要轉到 哪個資料庫。下圖就是這個方案的示意圖。這也許可以解決應用程式 序難以維護的問題,但是 當應用程式端的數量增加,資料庫分片增加,或者係統壓力增 加時,這個switch會成為容量及性 能的瓶頸和單點故障(當它宕掉時,應用端找不到 資料庫),而且所有的資料庫指令均需要傳 兩次(先到switch再到資料庫)。每個查詢都會造成額外的負載。
#MySQL Fabric的架構
MySQL Fabric採用不使用的做法,其架構如下圖所示。主要的特點是把switch合併到各應用端的connector中,以解決單一switch的單點故障和效能瓶頸。
MySQL Fabric由三個部分構成:
是一個python腳本,是整個架構的核心。
MySQL Fabric管理節點主要的功能是管理整個資料庫伺服器場(Database Server Farm),它啟動時會找/etc/mysql/fabric.cnf這個設定文件,由它指定fabric背後當成存放Server Farm架構和配置之repository的MySQL資料庫位置、連接埠和連線帳號等資訊。
Fabric在初始化時(執行mysqlfabric manage setup指令),會在MySQL資料庫上開一個schema(通常是名稱為fabric的database),存放Server Farm的配置相關信息,如哪些伺服器群組由哪些資料庫構成,各伺服器群組中的主從伺服器分別是哪些,等等。
MySQL Fabric節點在設定設定時,會對Server Farm中各資料庫下達建立主從複製的指令(上圖的紅色線條)。
在正常運作時定期ping各群組的主伺服器,當發現主資料庫沒有正常運作時,它會啟動故障轉移程序,在該server farm的從資料庫中找一個合適的提升為主伺服器。其他的從資料庫則轉向新的主資料庫繼續複製資料。
#這是整個架構中的工作引擎,在傳統的資料庫應用中這是單一的MySQL資料庫,MySQL Fabric則是以多個資料庫支援大數據量表(TB級以上)和高可用性資料庫的需求。這些資料庫分成幾個高可用群組(HA Group),每個群組包含一個以上的資料庫伺服器,上圖中最下面的幾個灰色和淺藍色的方塊代表高可用群組。如果高可用群組中有多個資料庫,MySQL Fabric會挑選(使用指令mysqlfabric group promote指令)一個提升為主資料庫(Master),其他資料庫則成為從資料庫(Slave),從資料庫複製主資料庫的變化,完成設定同一高可用群組內的主從複製。以後,Fabric會定期件事這個主資料庫。當主資料宕掉之後,Fabric會從高可用群組內挑選一個提升為主資料庫,其他的資料庫會轉向這個新的主資料庫繼續複製。
應用系統在執行時,每個SQL指令都會經由connector傳送到資料庫。 MySQL Fabric所搭配的connector和一般使用單機的MySQL資料庫一樣,只是在較新版的connector是fabric aware connector多了一些能處理資料庫伺服器場(database server farm)的功能。使他們能在建立資料庫連線時,以XML-RPC協定檢查MySQL Fabric的管理節點中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以後的版本,Fabric的Java程式和一般對單機MySQL的查詢的Java程式差不多,只是在建立database connection object時database connection URL不是指向資料庫,改為指向MySQL Fabric管理節點(伺服器的IP和連接埠通常是32274)。
當查詢的表時全域表(不做table shard)或DDL(例如建表或改表結構)時,建立connection object的要加上''fabricServerGroup="參數,之後透過這個connection object所下的SQL指令會送到Global Group的主資料庫,再由資料庫複製到其他的高可用群組(shard)中。
如果SQL指令要操作的表時分區表(shard table),則建立connection object時要在參數加上''fabricShardTable="參數,之後透過這個connection object所下的SQL指令會根據MySQL Fabric設定的分錶(shard)原則送到各分區(shard)的高可用組。
這樣一來,應用程式對這些shard table下的SQL指令時,不需要在SQL中判斷要送到哪個資料庫,完全由connector在建立資料庫連線時向MySQL Fabric所查到的server farm的設定資訊(哪個資料庫屬於哪個shard group,各shard table的分割原則等)決定。而且這個配置在建立主連線後就緩存在Connector所在的應用端。
這樣,每次下SQL指令時就不需要重複查詢MySQL Fabric管理節點,而依存於應用端的分錶配置直接送到正確的資料庫.而應用程式的效率不會因為做了表格的拆分而有任何降低。
【相關推薦:mysql影片教學】
以上是mysql fabric是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!