首頁 >資料庫 >mysql教程 >mysql fabric是什麼

mysql fabric是什麼

青灯夜游
青灯夜游原創
2023-04-03 15:43:191779瀏覽

MySQL Fabric是用來管理MySQL伺服器群的可擴充框架,是GPL的開源軟體;也就是說在符合GPL的規格下,使用者可以自由的使用和修改這個軟體。 mysql fabric是處理任何管理請求的進程;使用HA特性時可以讓此進程負責監視主伺服器並在發生故障時,開始故障轉移,將從伺服器升級成主伺服器。

mysql fabric是什麼

本教學操作環境: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要解決的問題

為什麼要做資料分片?當你的應用程式需要處理的表格大於1TB的資料時,Data Shard常常是 必須的。 這麼大的表,無論在查詢、更新的效率上,或是備份、更改結構所需要的 時間上,都會造 很大的問題。然而當你將這麼大的表分散到多個資料庫伺服器上, 又會使每一台資料庫服 務器都有可能是單一故障點。只要 有一台掛掉就會使整個系統 的操作發生問題。另一方面, 應用程式端的程式也會因為每個查詢都要依其查詢條件 (where子句的內容)分別指向不同的資料庫 而變得更加複雜。再者,當資料分片的 結構 改變時(例如增加一個資料庫),會使應用端的所有 程式都必須修改,從而導致 維護變得極為複雜。

為了解決應用程式複雜度增加的問題,有人在應用程式和資料庫伺服器之間增加 一個代理程式 (proxy)或成為switch,應用程式所有對資料庫的指令先送到proxy,再由 proxy判斷要轉到 哪個資料庫。下圖就是這個方案的示意圖。這也許可以解決應用程式 序難以維護的問題,但是 當應用程式端的數量增加,資料庫分片增加,或者係統壓力增 加時,這個switch會成為容量及性 能的瓶頸和單點故障(當它宕掉時,應用端找不到 資料庫),而且所有的資料庫指令均需要傳 兩次(先到switch再到資料庫)。每個查詢都會造成額外的負載。

mysql fabric是什麼

#MySQL Fabric的架構

MySQL Fabric採用不使用的做法,其架構如下圖所示。主要的特點是把switch合併到各應用端的connector中,以解決單一switch的單點故障和效能瓶頸。

mysql fabric是什麼

MySQL Fabric由三個部分構成:

1.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的從資料庫中找一個合適的提升為主伺服器。其他的從資料庫則轉向新的主資料庫繼續複製資料。

2. 資料庫伺服器場(database server farm)

#這是整個架構中的工作引擎,在傳統的資料庫應用中這是單一的MySQL資料庫,MySQL Fabric則是以多個資料庫支援大數據量表(TB級以上)和高可用性資料庫的需求。這些資料庫分成幾個高可用群組(HA Group),每個群組包含一個以上的資料庫伺服器,上圖中最下面的幾個灰色和淺藍色的方塊代表高可用群組。如果高可用群組中有多個資料庫,MySQL Fabric會挑選(使用指令mysqlfabric group promote指令)一個提升為主資料庫(Master),其他資料庫則成為從資料庫(Slave),從資料庫複製主資料庫的變化,完成設定同一高可用群組內的主從複製。以後,Fabric會定期件事這個主資料庫。當主資料宕掉之後,Fabric會從高可用群組內挑選一個提升為主資料庫,其他的資料庫會轉向這個新的主資料庫繼續複製。

另一方面,MySQL Fabric也會只是應用端的conector對這些主從資料庫做讀寫分離,當應用程式對資料庫做讀寫兼有的操作時,connector會將該指令提交給主資料庫.如果應用程式只會對資料庫進行讀取操作,且連線的read_only參數設定為“ON”,則所有的查詢均輪流傳送到這幾個資料庫。藉由讀寫分離,應用系統的資料處理能力得以增加。此外,如前所述,MySQL Fabric還能處理需要分割到多個資料庫伺服器的表格(sharding tables),每個高可用群組都可能存放shard table的部分資料。應用端的connector會將對shard table的指令依MySQL Fabric的管理節點的設定送到不同的高可用群組,這樣可使資料庫的容量隨著高可用群組的數量增加而成長。同時,對非拆分的表所下的指令和所有的DDL會由connector送到全域高可用群組(global group),全域高可用群組的主資料庫被MySQL Fabric設定為其他高可用群組的主資料庫。所有存拆分錶的高可用群組的主資料庫複製global group的變化,這麼一來其他高可用群組都有一份非分割表的資料。從而使得SQL中拆分錶對非分割表的JOIN操作變得更簡單。

3. Connector

應用系統在執行時,每個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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn