一.什麼是高可用性:
高可用性=可靠性,它的本質就是通過技術和工具提高可靠性,儘可能長時間保持資料可用和系統執行,實現高可用性的原則,首先要消除單點故障,其次通過冗餘機制實現快速恢復,還有就是實現容錯。
二.我們在考慮資料庫的高可用方案時,應該考慮幾個方面:
1.若資料庫發生了當機或者意外中斷等故障,能夠儘快恢復資料庫的可用性,儘可能的減少停機時間,保證業務不會因為資料庫的中斷而中斷
2.用作備份,只讀副本等功能的非主流節點的資料應該和主節點的資料實時或者始終保持一致
3.當業務發生資料庫切換的時候,切換前後的資料庫的內容應該保持一致,不會因為資料缺失或者資料不一致而影響業務
三.高可用方案:
1.主從複製:詳情參考https://www.cnblogs.com/xiuercui/p/13416638.html
2.半同步複製
3.MHA+多節點叢集
MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,該軟體由兩部分組成:MHA Manager(管理節點)和MHA Node(資料節點)。
- MHA Manager: 可以單獨部署在一臺獨立的機器上管理多個master-slave叢集,也可以部署在一臺slave節點上。
- MHA Node: 行在每臺MySQL伺服器上。
MHA Manager會定時探測叢集中的master節點,當master出現故障時,它可以自動將最新資料的slave提升為新的master,然後將所有其他的slave重新指向新的master。整個故障轉移過程對應用程式完全透明。
MHA Node執行在每臺MySQL伺服器上,主要作用是切換時處理二進位制日誌,確保切換儘量少丟資料。
MHA也可以擴充套件到如下的多節點叢集:
優點:
- 可以進行故障的自動檢測和轉移;
- 可擴充套件性較好,可以根據需要擴充套件MySQL的節點數量和結構;
- MySQL發生不可用的概率相對更低
缺點:
- 邏輯較為複雜,發生故障後排查問題,定位問題更加困難;
- 資料一致性仍然靠原生半同步複製保證,仍然存在資料不一致的風險;
- 可能因為網路分割槽發生腦裂現象;
4.MGR
MySQL官方推薦的一款高可用叢集方案MySQL Group Replication,基於Paxos協議的狀態機複製,徹底解決了基於傳統的非同步複製和半同步複製中資料一致性問題無法保證的情況,也讓MySQL資料庫涉及的領域更廣,開啟網際網路金融行業的大門。
MGR提供了高可用分散式MySQL資料庫服務,它可以實現伺服器自動故障轉移,分散式容錯能力,支援多主更新的架構,自動重配置()加入/移除節點,崩潰等),並且可以自動偵測和處理衝突。
MGR適用的場景包括:
(1)彈性複製:複製架構下,伺服器的數量動態增加或縮減時,使影響降到最低。
(2)分片高可用:使用者可以利用MGR實現單一分片的高可用,每個分片都具有一個複製組。
(3)主從複製的替代選擇:可以使用單主模式避免發生衝突檢測,以替代傳統的主從複製。
下圖為MGR的架構圖:
下邊分別介紹裡邊的內容:
MySQL Group Replication外掛
該外掛主要負責:
- 維護分散式執行內容
- 偵測和處理衝突
- 處理分散式叢集的恢復(偵測成員的變化,在必要時作為貢獻者提供資料,在必要時收集狀態)
- 推送事務給其他組員
- 接受其他成員的事務並處理
- 決定事務最終的結果(提交/回滾)
5.zookeeper+proxy
Zookeeper使用分散式演算法保證叢集資料的一致性,使用zookeeper可以有效的保證proxy的高可用性,可以較好的避免網路分割槽現象的產生。
優點:
- 較好的保證了整個系統的高可用性,包括proxy、MySQL;
- 擴充套件性較好,可以擴充套件為大規模叢集;
缺點:
- 資料一致性仍然依賴於原生的mysql半同步複製;
- 引入zk,整個系統的邏輯變得更加複雜;