OLTP應用之MySQL架構選型
在我們下定決心將企業核心應用從企業級資料庫遷移到開來源資料庫產品、使用本地磁碟代替共用儲存之前。我覺得我們必須要面對並回答以下幾個問題之後才能真正的將開源進行到底,將想法付諸於實踐。下面我們來看一下我們在將OLTP應用遷移到MySQL資料庫之上之前,我們必須要回答的幾個問題:
(1) 允許在極端情況下備庫接管服務後,資料存在暫時的不一致嗎(主從架構下在主庫crash後可能存在部分寫操作沒有及時同步的備庫的問題)?
(2) MySQL資料庫在資料庫故障時應用服務也將中斷3-30s,這樣的情境是否能夠接受?
(3) 我們對資料庫的可擴充性、吞吐能力、回應時間及使用者體驗是否有較高的要求?
只有回答了如上三個問題,以下3類OLTP類型的MySQL架構設計方案,才能真正的具備可參考性與實際意義。下面我們來扒一扒筆者目前考慮到適合OLTP應用開源解決方案。
方案一、多主同步複製方案PXC
PXC,即Percona Xtradb Cluster,它採用Galera引擎,可以實現多個節點間的資料同步複製以及讀寫並且可保障資料庫的服務高可用及資料一致性。其架構如下所示:
一、PXC的優點
(1)資料同步複製
(2)多個可同時讀寫節點,但需要事先進行分庫分表,讓各個節點分別寫不同的表或者庫
(3)可以保證資料嚴格一致性
(4)適合讀多寫少的業務系統
二、PXC的缺點
(1)不支援XA事務
(2)叢集輸送量/效能取決於響應最慢的節點,事務效率與主從架構相比低了不止一個數量級
(3)需要調整
(4)只支援InnoDB引擎
(5)所有表都要有主鍵
(6)不允許大事務產生
(7)不支援LOCK TABLE等顯式鎖操作
(8)存在寫衝突,鎖衝突、死結問題較多,不能解決熱點更新問題,可擴充性差
(9)如果並發事務量很大的話,官方建議採用InfiniBand網路,降低因網路延遲帶來的瓶頸
(10)需要引入多個第三方外掛程式,整合複雜度高
方案二、主從複製方案MHA
MHA即Master High Availability Manager and Tools for MySQL是一個MySQL高可用管理工具,目的在於維持Master主庫的高可用性及資料的一致性。其最大特點是可以修複多個Slave之間的差異日誌,最終使所有Slave保持資料一致,然後從中選擇一個Slave資料庫作為新的Master,並將其它Slave指向它。
其架構如下,請參考:
一、MHA的優點
1.自動監控Master容錯移轉、故障後節點之間的資料同步
2.不會有效能損耗,適用於任何儲存引擎
3.具備自動資料補償能力,在主庫異常崩潰時能夠最大程度的保證資料的一致性
4.可實現同城應用層級雙活
二、MHA的缺點
1.如果主伺服器硬體故障或無法通過ssh訪問,進行容錯移轉可能導致丟失當前資料
2.切換時間較長,整個切換時間大約需要9-12s
方案三、主主複製方案MM
利用MySQL原生支援主從單向複製、主主雙向複製,該架構解決了主庫單點及寫瓶頸等問題。其架構如下,請參考:
一、MM架構優點
1.支援快速切換,一般3s之內即可切換到備機
2.組態管理簡單、不需要第三方外掛程式
二、MM架構缺點
1.如果資料庫伺服器硬體故障可能導致丟失當前操作資料
關於以上方案的總結
(一)對於PXC架構,其優點很多但缺點同時也非常的明顯,其核心優勢就是保證了各節點資料的一致性,劣勢就是其在可擴充性、鎖衝突、寫擴大方面存在問題,PXC為了保證資料的一致性其要求每個節點都要將資料寫入到磁碟才算完成,這樣就存在一個效率問題。也就是說每個事務的回應時間依賴於整個叢集最慢的節點,且其對網路品質要求非常高。另一個問題就是我們需要考慮清楚,我們的開源的方向在哪裡?是跟著一個小眾分支開源社區Percona,還是跟著主流MySQL官方開源社區發展的問題。
(二)對於MHA架構其優點就是通過MHA外掛程式解決主庫的單點問題及因主庫掛掉後盡量保證接管的從庫與宕機後的主庫的資料一致性且資料的同步功能是原生的,其缺點就是在主庫故障切換後不能保證資料零丟失,其實這裡更準確的說法不應該是資料丟失應該主庫與從庫資料不一致。
在以下情況MHA可以保證接管後的節點與主庫資料時一致性的:
(1)在不發生硬體故障的情況下是可以從修複後的主庫找回資料並由DBA手動補回備庫,最終實現資料的一致性;
(2)若只是資料庫故障,MHA具備將所有已落實的資料自動同步到備庫從而實現資料的零丟失;
(3)直接使用MySQL的半同步機制,兩階段交易認可來保證資料的一致性,這個方法與PXC的實現方式相似
(三)對於MM雙主架構其優缺點與MHA相似,都是採用MySQL原生的資料同步機制。不同之處就是MM架構在主故障時切換時間更短,缺點就是產生資料不一致的可能性更多一下。另外在MM架構中我們也可以嘗試引入MHA資料補償工具來盡量降低在主備切換時導致的資料不一致性問題或者直接使用MySQL的半同步機制來保證資料一致性。
http://www.bkjia.com/PHPjc/1095031.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1095031.htmlTechArticleOLTP應用之MySQL架構選型 在我們下定決心將企業核心應用從企業級資料庫遷移到開來源資料庫產品、使用本地磁碟代替共用儲存之前。我覺得我...