MariaDB:真正的實時同步資料庫,mysql要小心了

2019-06-28     hello架構

一、背景介紹

無論是採用binlog或者GTID的方式,其本質都是通過I/O_thread和sql_thread的形式進行的同步,因為無法避免複製延遲而飽受詬病,基於上述MariaDB引入了Galera Cluster來解決此問題。

二、Galera Cluster介紹

Galera Cluster與傳統的複製方式不同,不通過I/O_thread和sql_thread進行同步,而是在更底層通過wsrep實現文件系統級別的同步,可以做到幾乎實時同步,而其上的MySQL對此一無所知

這就要求MySQL能夠調用wsrep提供的API來完成,在Mariadb10.1之前的版本,支持Galera Cluster的版本是與Mariadb分開發行的,其版本名稱就成為Mariadb-Galera,Mariadb10.1以後的版本中MariaDB Galera Cluste不再單獨發行,而是以galera-25.3.12-2.el7.x86_64包的形式出現方面都強過MySQL。

MariaDB Galera Cluster主要功能

同步複製:真正的multi-master,即所有節點可以同時讀寫資料庫自動的節點成員控制,失效節點自動被清除新節點加入數據自動複製真正的並行複製,行級用戶可以直接連接集群,使用感受上與MySQL完全一致

MariaDB Galera Cluster的優缺點

1.優勢:

  • 因為是多主,所以不存在Slavelag(延遲)
  • 不存在丟失事務的情況
  • 同時具有讀和寫的擴展能力
  • 更小的客戶端延遲
  • 節點間數據是同步的,而Master/Slave模式是異步的,不同slave上的binlog可能是不同的

2.缺點:

  • 加入新節點時開銷大,需要複製完整的數據
  • 不能有效地解決寫擴展的問題,所有的寫操作都發生在所有的節點
  • 有多少個節點,就有多少份重複的數據
  • 由於事務提交需要跨節點通信,即涉及分布式事務操作,因此寫入會比主從複製慢很多,節點越多,寫入越慢,死鎖和回滾也會更加頻繁
  • 對網絡要求比較高,如果網絡出現波動不穩定,則可能會造成兩個節點失聯,Galera Cluster集群會發生腦裂,服務將不可用

還有一些地方存在局限:

  1. 僅支持InnoDB/XtraDB存儲引擎,任何寫入其他引擎的表,包括mysql.*表都不會被複製。但是DDL語句可以複製,但是insert into mysql.user(MyISAM存儲引擎)之類的插入數據不會被複製
  2. Delete操作不支持沒有主鍵的表,因為沒有主鍵的表在不同的節點上的順序不同,如果執行select … limit …將出現不同的結果集
  3. LOCK/UNLOCK TABLES/FLUSH TABLES WITH READ LOCKS不支持單表所鎖,以及鎖函數GET_LOCK()、RELEASE_LOCK(),但FLUSH TABLES WITH READ LOCK支持全局表鎖
  4. General Query Log日誌不能保存在表中,如果開始查詢日誌,則只能保存到文件中
  5. 不能有大事務寫入,不能操作wsrep_max_ws_rows=131072(行),且寫入集不能超過wsrep_max_ws_size=1073741824(1GB),否則客戶端直接報錯
  6. 由於集群是樂觀鎖並發控制,因此,在commit階段會有事務衝突發生。如果兩個事務在集群中的不同節點上對同一行寫入並提交,則失敗的節點將回滾,客戶端返回死鎖報錯
  7. XA分布式事務不支持Codership Galera Cluster,在提交時可能會回滾
  8. 整個集群的寫入吞吐量取決於最弱的節點限制,集群要使用同一的配置

三、 MariaDB與Mysql的對比

1.MariaDB發展趨勢和更新頻率

畢竟基於MySQL創始人領銜開發的MariaDB資料庫,肯定是知道MYSQL資料庫存在的弱項,然後提供更好的兼容性和擴展性,我們基本上完全可以將MYSQL資料庫建議到MariaDB資料庫中,而且MariaDB發展速度和升級速度遠遠優先。

2.MySQL封閉且發展緩慢

由於MySQL在被收購之後更新速度與性能的優化非常的緩慢,而且是閉源的,完全沒有Oracle之外的人參與進來,很多需要解決的問題都沒有升級進去,反之很多公司雖然也有利用自己開發的分支Mysql版本。

3.MariaDB的特點和優勢

MariaDB基於事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用了Percona的 XtraDB,InnoDB的變體,MariaDB默認的存儲引擎是Aria,不是MyISAM。Aria可以支持事務,但是默認情況下沒有打開事務支持,因為事務支持對性能會有影響。MariaDB是一個採用Maria存儲引擎的MySQL分支版本,是由原來 MySQL 的作者Michael Widenius創辦的公司所開發的免費開源的資料庫伺服器。

4.MariaDB與MySQL對比

這個直觀的區別在於MariaDB能夠快速的查詢和處理數據,且占用資源相對是少於MySQL資料庫的,而且在運行速度、以及支持對 Unicode 的排序問題優於MYSQL資料庫。

文章來源: https://twgreatdaily.com/EuCBQWwB8g2yegNDEf1f.html