MySQL內部開發人員如何看待MySQL組複製?
MySQL因為高性能、可擴展性和可用性被廣泛應用於Web應用程序,成為支持高流量社交媒體、電商應用程序以及快速成長企業的IT平台基礎。在MySQL 5.7.17版本中,MySQL Group Replication可在Oracle Cloud上使用,並為MySQL資料庫提供本機內置高可用性。
為了更深入地了解MySQL Group Replication的優點和用例,我們很高興採訪了MySQL Group Replication的團隊負責人Nuno Carvalho,並從他的視角來解讀組複製。
問:Nuno,可以簡單介紹一下自己及現在從事的工作內容?
Nuno:加入MySQL之前,我是葡萄牙米尼奧大學的研究生和研究員,工作重點是設計和實現提高分散式系統可擴展性的技術。五年前,作為MySQL Replication團隊的開發人員加入Oracle,並且有機會參與組複製的任務。
目前,我是Oracle的首席軟體工程師和MySQL複製服務團隊負責人,團隊負責MySQL Group Replication插件。
問:您是如何理解MySQL Replication?為什麼它會是MySQL的流行功能?
Nuno:MySQL複製是一種在幾個伺服器之間傳播數據的簡單有效的方法,有三個主要目標:
可用性:通過將數據複製到多個位置來避免單點故障問題。
可伸縮性:應用程序可以通過向副本發送讀取操作並允許主伺服器僅處理寫入操作來提供更多請求。
克服單一伺服器限制:所有大用戶都將達到他們的數據不再適合單個伺服器的程度。解決方案是在多個伺服器之間對數據進行分片,並且需要複製來處理數據流,以便有效地進行切分。
MySQL複製非常容易設置並且性能非常好,因此MySQL開發人員和DBA喜歡使用此功能來擴展,並為其MySQL環境提供高可用性。
問:現有的MySQL複製已經是一個很好的解決方案,那麼是什麼觸發了MySQL Group Replication的發展?
Nuno:MySQL複製是非同步複製,因此為了避免傳統MySQL複製和新MySQL組複製之間的混淆,我將推動現有的MySQL複製——「MySQL非同步複製」向前發展。
如前所述,許多MySQL開發人員和DBA都使用MySQL非同步複製進行擴展,即使用主伺服器處理所有寫入和讀取操作的副本。在這種情況下,如果因為某種原因主伺服器出現故障或需要關閉以進行維護或升級,那麼DBA必須手動將主伺服器故障轉移到其中一個副本,將寫入流量定向到新主伺服器,並配置所有副本。一旦先前失敗的伺服器再次重新聯機,DBA必須手動將伺服器添加回複製拓撲並進行適當配置。
如果只有一個主副本和兩個副本,這不是一個大問題,但考慮到拓撲中有數十個或數百個副本甚至多個複製層的情況:手動處理所有這些任務就變得非常複雜,而且容易出錯。
隨著MySQL用戶數量的增長,MySQL對業務關鍵型應用程序的使用以及它在組織內的佔用空間也在增長。具有容錯MySQL系統的請求成為客戶以及Oracle MySQL工程團隊的高優先順序工作。也因此,我的團隊開始了創建MySQL組複製的工作。
問:很高興能夠聽到產品開發背後的故事,其實今天的主題是:什麼是MySQL Group Replication以及它是如何工作的?
Nuno:MySQL Group Replication是一個MySQL資料庫插件,它使開發人員和DBA能夠創建彈性、高可用性、容錯複製拓撲。它是一種管理一組伺服器並將其呈現為單個伺服器的機制,因為同一組中的所有伺服器執行相同的操作並具有相同的數據。擁有相同數據集的多個副本可以最大限度地降低丟失數據的風險。
MySQL Group Replication可以在兩種模式下運行:
1.單主模式:在這種模式下,一次只有一台伺服器接受更新,因此它幾乎就像是任何一台伺服器的直接替代品,但具有內置的高可用性。在主伺服器發生故障的情況下,該組會自動選擇新的主伺服器,並且服務不會中斷,因為所有操作都在後台進行。
2.多主模式:在此模式下,所有伺服器都可以接受更新,即使它們是同時發布的。內置的組成員資格服務使組的視圖保持一致,並且在任何給定的時間點都可用於所有伺服器。伺服器可以離開或加入組,視圖也會相應更新。在伺服器意外離開組的情況下,內置故障檢測機制將檢測此事件並通知組視圖已更改。當伺服器加入時,該組將通過分散式恢復階段,以便在處理請求之前向組提供更新。所有這些操作都是自動完成的,無需人工干預。
問:MySQL Group Replication與其他MySQL複製機制有何不同?
Nuno:MySQL組複製雖然在外觀和使用感受方面與單個伺服器相同,但它在傳輸層中有一個全新的實現。
MySQL非同步複製在主伺服器與其輔助伺服器之間是典型TCP連接,並且這些操作不協調。
例如,如果一個主伺服器有兩個輔助伺服器,那麼確保數據同時複製到兩個輔助伺服器並不簡單,處理故障對於管理員來說也會是一個非常複雜的過程。
另一方面,MySQL Group Replication基於Paxos實現,它確保所有伺服器以相同的順序接收相同的數據集。這允許我們在組之間建立邏輯時鐘,因此可以根據該時鐘控制所有操作,例如實時組成員資格或單主模式中的主要選舉。通過這種實現,使得MySQL Group Replication與典型的MySQL非同步複製相比,在耐用性方面表現更好。
問:MySQL Group Replication如何幫助DBA?
Nuno:當使用MySQL非同步複製時,DBA負責在計算機出現故障或主伺服器的計劃維護期間手動處理故障和轉移主要故障。通過MySQL Group Replication中的內置組成員資格管理,自動管理任務,有效避免故意刪除成員或因計算機故障而導致的意外刪除。
MySQL Group Replication提供數據一致性保證、衝突檢測和節點故障檢測以及與資料庫故障轉移相關的操作,無需手動干預或自定義工具。發生問題時,該組可以管理必要的故障轉移並自行修復。
以上是自動化DBA任務的重要一步。使用MySQL Group Replication,DBA不僅可以節省在計劃維護期間手動配置必要故障轉移所需的時間。更重要的是,它消除了DBA在壓力災難恢復期間正確配置故障轉移和其他必要設置的負擔。由於故障轉移過程是自動進行的,因此在伺服器發生故障時,故障轉移時間會顯著縮短。
對於MySQL非同步複製,當主伺服器發生故障時,故障轉移完成需要5秒到1分鐘或更長時間,具體取決於工作負載以及檢測到主要故障的方式。使用MySQL Group Replication,如果一組伺服器中的某個伺服器出現故障,則組會立即自動處理故障轉移。
問:開發人員如何從MySQL Group Replication中受益?
從開發人員的角度來看,使用單主模式實現MySQL組複製的最佳部分是在應用程序級別,幾乎不需要進行任何更改,只需對代碼進行少量的更改就可以為應用程序提供更高的可用性。當底層基礎架構從單個伺服器移動到由MySQL Group Replication管理的一組伺服器時,可以輕鬆調整現有應用程序,開發人員可以期待InnoDB,Performance Schema以及其他MySQL組件的常見行為。
考慮嘗試MySQL Group Replication的開發人員的快速說明:由於架構中的分散式方式,事務可能會因為並發操作之間的衝突而在提交時回滾。例如,如果您有一個三人組,當兩個事務並行發布到兩個不同的伺服器並且它們觸及同一行時,其中一個將回滾,只有一個將被提交。這是開發人員在使用組複製替換單個伺服器時應注意的差異。
Group Replication為開發人員提供的另一個好處是保證耐用性。MySQL Group Replication只有在到達組中的大多數伺服器時才會確認提交。因此,即使某些伺服器發生故障,數據也不會丟失,因為大多數伺服器已經擁有它。這對開發人員來說真的非常重要。
問:MySQL用戶的反饋如何?
Nuno:MySQL Group Replication自2016年12月起才開始普遍使用,因此我們的大多數用戶要麼是在測試此功能,要麼是在他們的試驗計劃中使用它。到目前為止,我們已經聽到了那些早期採用者的大量積極反饋。他們特別喜歡這個功能的易於使用和部署,幾乎不需要在應用程序中進行任何更改。我們還收到了來自用戶非常有用的信息,我們正在使用它來使MySQL Group Replication更加強大和用戶友好。
問:現在,MySQL群組複製也可以在Oracle MySQL雲服務中使用。通過在雲中使用此功能,您可以預見哪些額外的好處?
Nuno:在Oracle MySQL雲服務中提供MySQL組複製最大和最直接的好處是用戶可以在一個地方集中所有需要的東西。只需點擊幾下,我們的用戶就可以通過最佳配置在最佳硬體上訪問最新、最強大的MySQL複製技術。最終用戶將能夠輕鬆創建彈性、高可用性、容錯的MySQL複製部署。
我之前提到的有關MySQL Group Replication的所有強大功能,一些DBA可能非常感興趣,但嘗試卻會猶豫,因為他們必須購買五台機器並部署,才能體驗擁有5人小組的好處,考慮到僅購買和配置五台機器以測試MySQL Group Replication所需的時間和金錢,這個想要嘗試的想法就可能熄火了。另一方面,在Oracle MySQL Cloud Service中使用MySQL Group Replication,整個過程變得非常簡單。DBA只需要點擊幾個按鈕並在Oracle Cloud中請求五個MySQL實例,該服務就可以在幾分鐘內完成,比獲取和配置五個物理伺服器快得多!
問:用戶期待未來的增強功能?
Nuno:目前我們正在為MySQL Group Replication進行兩個性能增強方面的工作:第一個方面是使啟用MySQL Group Replication時的性能開銷或影響最小化;另一個方面是進一步增加一個組中可以支持的成員數量。
※25年磨一劍 華為CloudLink新品驚艷亮相
※8種手動和自動備份MySQL資料庫的方法
TAG:IT168企業級 |