數(shù)據(jù)復(fù)制--主從

數(shù)據(jù)復(fù)制是指將同樣的數(shù)據(jù)存儲在不同的節(jié)點上氢橙,之間經(jīng)由網(wǎng)絡(luò)進行數(shù)據(jù)同步地来。數(shù)據(jù)復(fù)制的主要目的是:

  • 使用距離用戶近的節(jié)點服務(wù)用戶娜扇,以此降低網(wǎng)絡(luò)傳輸延遲铛嘱;
  • 提供更好的災(zāi)備能力,在某些節(jié)點失效的時候依舊能夠提供服務(wù)喊儡;
  • 提高對外的服務(wù)能力,增加服務(wù)吞吐量;

數(shù)據(jù)復(fù)制所要面對的主要問題是如何應(yīng)對數(shù)據(jù)的寫入操作范删,并同步到所有數(shù)據(jù)節(jié)點當中。目前主要的方式是主從架構(gòu):

  1. 在所有數(shù)據(jù)節(jié)點中選出一個主節(jié)點拷肌,負責處理客戶端的所有寫入請求到旦;
  2. 其他數(shù)據(jù)節(jié)點是從節(jié)點,當主節(jié)點的數(shù)據(jù)落庫之后巨缘,會將所有的數(shù)據(jù)變更以復(fù)制日志的形式添忘,經(jīng)由網(wǎng)絡(luò)傳輸發(fā)送到所有的數(shù)據(jù)從節(jié)點,從節(jié)點重現(xiàn)復(fù)制日志以完成正確的數(shù)據(jù)復(fù)制操作若锁;
  3. 數(shù)據(jù)庫主從庫都可以處理客戶端的查詢操作搁骑;

主從復(fù)制的機制被很多主流關(guān)系型數(shù)據(jù)庫所采用,比如MySQL, PostgreSQL等等又固。還有很多非關(guān)系數(shù)據(jù)庫也采用了這種機制仲器,比如MongoDB, RethinkDB等等。甚至被高可靠消息隊列Kafka仰冠,RabbitMQ采用乏冀。

數(shù)據(jù)復(fù)制:同步與異步

一個非常常見的場景:用戶修改了自己的賬戶信息,主節(jié)點返回了修改成功的響應(yīng)洋只。那么煤辨,此時的從節(jié)點的數(shù)據(jù)是否已經(jīng)完成了修改呢?


數(shù)據(jù)復(fù)制示例

上圖中的從節(jié)點1的復(fù)制是同步的:在完成數(shù)據(jù)復(fù)制之后才對客戶端返回修改成功的響應(yīng)木张;而從節(jié)點2的復(fù)制則是異步的:先返回客戶端修改成功的響應(yīng)众辨,之后才完成數(shù)據(jù)的真正復(fù)制操作。
需要注意的一點是舷礼,主節(jié)點的數(shù)據(jù)寫入成功并不能保證從數(shù)據(jù)節(jié)點的數(shù)據(jù)能夠完成數(shù)據(jù)復(fù)制鹃彻,很多因素可能會導(dǎo)致從數(shù)據(jù)節(jié)點的數(shù)據(jù)寫入失敗:從節(jié)點故障妻献,網(wǎng)絡(luò)傳輸問題等等蛛株。
同步復(fù)制機制能夠保證在客戶端獲得操作成功響應(yīng)的前提下,保證主從節(jié)點的數(shù)據(jù)一致性育拨,不存在主成功從失敗而導(dǎo)致臟數(shù)據(jù)出現(xiàn)的情況谨履;缺點在于客戶端需要等待從節(jié)點的響應(yīng),延長了整個請求響應(yīng)的過程熬丧,在從節(jié)點發(fā)生故障的時候會阻塞整個數(shù)據(jù)系統(tǒng)無法繼續(xù)響應(yīng)寫入請求笋粟。
鑒于系統(tǒng)容錯性的考慮,一般不會對于所有節(jié)點都采用同步復(fù)制的策略。在一些分布式系統(tǒng)中害捕,采用對于一個從節(jié)點采用同步復(fù)制策略其他采用異步策略绿淋,以此保證一個主節(jié)點的災(zāi)備節(jié)點,這種方式又叫做半同步尝盼。而在大多數(shù)系統(tǒng)中吞滞,異步復(fù)制策略是更常用的,在從節(jié)點發(fā)生故障的時候盾沫,依舊能夠?qū)ν馓峁┓?wù)裁赠,提升系統(tǒng)可用性。

設(shè)立新主節(jié)點

有時系統(tǒng)需要設(shè)立新主節(jié)點的操作來接替崩潰的主節(jié)點工作赴精,設(shè)立新主節(jié)點的主要問題是要保證新主節(jié)點已經(jīng)保有最新的數(shù)據(jù)佩捞。整個過程分以下幾步:

  1. 抽取主節(jié)點最近時間點的快照;
  2. 將上面的快照拷貝到新的數(shù)據(jù)節(jié)點中祖娘;
  3. 新數(shù)據(jù)節(jié)點向主節(jié)點請求快照之后的數(shù)據(jù)變更操作失尖;
  4. 新數(shù)據(jù)節(jié)點完成變更操作同步之后,就可以接替之前主節(jié)點的工作了渐苏;

應(yīng)對節(jié)點崩潰

在一個擁有大量節(jié)點的分布式系統(tǒng)中掀潮,任何節(jié)點崩潰都應(yīng)被當做常規(guī)事件來應(yīng)對。在主從架構(gòu)中琼富,一般分為主節(jié)點和從節(jié)點兩種情況仪吧。
從節(jié)點:主節(jié)點一般會儲存快照和操作日志兩種備份日志,在從節(jié)點重新啟動之后鞠眉,根據(jù)斷開時間長短采用快照+操作日志或者單純操作日志的數(shù)據(jù)恢復(fù)方式薯鼠。
主節(jié)點:主節(jié)點崩潰之后所做的工作就有一點多了:設(shè)立新的主節(jié)點來處理客戶端請求,從節(jié)點需要接受新主節(jié)點所發(fā)送的數(shù)據(jù)同步操作械蹋。一般分為以下幾步:

  1. 確定主節(jié)點確實崩潰宕機出皇。一般采用的是在一定時間(比如30秒)內(nèi)無法對外產(chǎn)生任何響應(yīng)。
  2. 產(chǎn)生一個新的主節(jié)點哗戈。這里涉及到不同的選主算法郊艘。
  3. 重新配置系統(tǒng)設(shè)置,包括系統(tǒng)接受客戶端請求到主節(jié)點的路由配置唯咬,從節(jié)點到主節(jié)點之間的路由配置纱注。在舊的主節(jié)點恢復(fù)之后要正確的進行一個從節(jié)點的工作。

變更操作日志

這里主要說一下WAL(write-ahead log)胆胰。

  • 在日志型存儲引擎中(LSM-Tree)狞贱,日志就是數(shù)據(jù)存儲的主要形式,后臺按照一定策略進行日志壓縮和垃圾回收蜀涨;
  • 在B樹型數(shù)據(jù)存儲中瞎嬉,數(shù)據(jù)變更會先寫入WAL中蝎毡,保證即使在寫入B樹索引過程中發(fā)生崩潰也不會丟失數(shù)據(jù);
    需要注意的是WAL是物理級別的日志佑颇,與數(shù)據(jù)存儲引擎的類型和版本強依賴顶掉。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末草娜,一起剝皮案震驚了整個濱河市挑胸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宰闰,老刑警劉巖茬贵,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異移袍,居然都是意外死亡解藻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門葡盗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來螟左,“玉大人,你說我怎么就攤上這事觅够〗罕常” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵喘先,是天一觀的道長钳吟。 經(jīng)常有香客問我,道長窘拯,這世上最難降的妖魔是什么红且? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮涤姊,結(jié)果婚禮上暇番,老公的妹妹穿的比我還像新娘。我一直安慰自己思喊,他們只是感情好壁酬,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著搔涝,像睡著了一般厨喂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庄呈,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天蜕煌,我揣著相機與錄音,去河邊找鬼诬留。 笑死斜纪,一個胖子當著我的面吹牛贫母,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盒刚,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼腺劣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了因块?” 一聲冷哼從身側(cè)響起橘原,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涡上,沒想到半個月后趾断,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡吩愧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年芋酌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雁佳。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡脐帝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出糖权,到底是詐尸還是另有隱情堵腹,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布温兼,位于F島的核電站秸滴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏募判。R本人自食惡果不足惜荡含,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望届垫。 院中可真熱鬧释液,春花似錦、人聲如沸装处。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妄迁。三九已至寝蹈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間登淘,已是汗流浹背箫老。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留黔州,地道東北人耍鬓。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓阔籽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親牲蜀。 傳聞我的和親對象是個殘疾皇子笆制,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容