存儲高可用的本質(zhì)就是通過冗余來實現(xiàn),這就必然涉及到數(shù)據(jù)之間的復(fù)制,如下四點是我們做設(shè)計的時候必須要考慮到的問題:
1.數(shù)據(jù)如何復(fù)制
2.各個節(jié)點的職責(zé)
3.如何應(yīng)對復(fù)制延遲
4.如何應(yīng)對復(fù)制中斷
以下針對業(yè)界一些通用的方案做一些整理
主備復(fù)制:
主備的優(yōu)點就是設(shè)計簡單腾誉,無需考慮狀態(tài)居夹。幾乎所有的存儲系統(tǒng)都提供了主備復(fù)制策略,缺點就備機只有在故障的時候才有用惊完,浪費硬件成本。故障后還需要人工干預(yù)恢復(fù),無法自動恢復(fù)螟深。
主從復(fù)制:
和主備的區(qū)別就是從機提供讀操作。對外提供查詢服務(wù)烫葬,因為從機也對外提供服務(wù)那么我們就必須在數(shù)據(jù)復(fù)制時候進行一定的監(jiān)控界弧,當(dāng)延遲過高時候凡蜻,需要人工干涉解決。
主從與主備相比具有如下優(yōu)勢:
1.主從復(fù)制在主機故障時垢箕,讀的相關(guān)業(yè)務(wù)不受影響划栓。
2.從機也對外提供服務(wù),發(fā)揮了硬件性能
但是也存在缺點条获,就是引入了新的復(fù)雜度忠荞,主要體現(xiàn)在客戶端需要感知主從關(guān)系,并將不同的操作發(fā)給不同的機器進行處理(mybatis插件)
主備倒換與主存倒換:
主備和主從方案存在兩個共性問題:
1.主機故障后帅掘,無法提供寫服務(wù)
2.如果主機無法恢復(fù)委煤,需要人工指定新的主機角色。
要實現(xiàn)一個完善的倒換方案修档,我們需要考慮如下幾個關(guān)鍵的設(shè)計點:
(1)主備狀態(tài)判斷:
狀態(tài)傳遞的渠道碧绞,是相互連接還是三方仲裁
狀態(tài)檢測的內(nèi)容,如機器是否掉電吱窝,進程是否存在讥邻,響應(yīng)是否緩慢等
(2)倒換決策:
倒換時機-什么情況下備機或從機升級為主機(三分鐘連續(xù)重啟三次,響應(yīng)超過三秒等等策略)
倒換策略-原來的主機恢復(fù)后是做從機還是繼續(xù)倒換為主機癣诱?
自動程度-是否需要人工確認
(3)數(shù)據(jù)沖突解決:
比如新增數(shù)據(jù)的主鍵沖突计维,必須要分析現(xiàn)有的業(yè)務(wù)場景做出一定的應(yīng)對
常見的架構(gòu)
1.互聯(lián)式
相比主備架構(gòu)在此基礎(chǔ)上多了狀態(tài)傳遞的通道,客戶端為了在倒換后正常訪問撕予,因為主備之間共享一個對客戶端來說唯一的IP地址鲫惶,比如虛擬IP。這種策略的劣勢主要表現(xiàn)在如果主機沒有故障实抡,但是狀態(tài)通道故障了欠母,那么備機會升級為主機,那么就有可能出現(xiàn)雙主機的情況吆寨。
2.中介式
通常的zookeeper是比較常用的中介
3.模擬式
核心思想就是主機和備機之間模擬讀寫操作來探測主機的狀態(tài)赏淌,這種方案實現(xiàn)起來較為簡單,成本低啄清,因為基于HTTP連接所以狀態(tài)信息比較匱乏六水,比如不能檢測cpu負載、i/o負載等辣卒。
主主復(fù)制
這種方案兩臺機器都提供讀寫服務(wù)掷贾,這種方案一般處理業(yè)務(wù)上可以覆蓋,可丟失的數(shù)據(jù)荣茫,比如session想帅,論壇的草稿數(shù)據(jù)等。
數(shù)據(jù)分區(qū)
指將數(shù)據(jù)按照一定的規(guī)則進行分區(qū)啡莉,不同分區(qū)分布在不同的地理位置上港准,規(guī)避地理災(zāi)害造成的數(shù)據(jù)丟失問題旨剥。通常有如下三種策略
1.集中式(北京,上海浅缸,廣州)-----西安備份中心 特點擴展容易轨帜,成本高
2.互備式(北京-上海,上海-----廣州) 特點設(shè)計擴展麻煩疗杉,成本低
3.獨立式(北京-天津阵谚,上海-杭州) 特點擴展容易,成本高
存儲高可用主要面臨的是數(shù)據(jù)一致性如何保障的問題烟具。分布式事務(wù)算法主要的目的是為了保證分散在多個節(jié)點的數(shù)據(jù)統(tǒng)一提交或回滾,以滿足ACID的要求;而分布式一致性算法主要的目的是為了保證同一份數(shù)據(jù)在多個節(jié)點上的一致性奠蹬,以滿足CAP中的CP要求朝聋。了解這些算法可以參考筆者所寫的《從零開始學(xué)架構(gòu)、從paxos到zookeeper》讀書筆記五:分布式系統(tǒng)基本理論一文囤躁。