天天看點

分布式助手Zookeeper(五)

[b][color=olive][size=large]散仙在上篇文章分享了關于使用zookeeper來完成配置同步的功能,那麼本篇,散仙依舊是模拟實作一個基于zookeeper怎麼解決單點故障的案例。

單點故障問題,在分布式系統中是一個很有可能發生的場景,比如說在Hadoop2.x之前的HDFS的NameNode和MapReduce的JobTracker的單點故障,當然這個問題已經在Hadoop2.x中得到解決,解決的方式,大部分是基于Zookeeper來實作的。另外一個例子,在Hbase中的Hmaster的單點問題,也是使用Zookeeper解決的。

下面,我們先來看下,簡單的實作圖:

[/size][/color][/b]

[img]http://dl2.iteye.com/upload/attachment/0091/8824/c987ca1e-6042-367a-9031-d7a8da5f654c.jpg[/img]

[b][color=green][size=large]總結流程如下:

[table]

|序号|描述

|1|創捷父節點類型為Persistent

|2|創捷子節點類型為ephemeral + sequential

|3|用戶端啟動時建立子節點

|4|序列号最小的子節點選為master,其他

子節點都是slave

|5|每個slave偵聽序列号比它小的子節點中

最大的子節點的NodeDeleted事件

|6|一旦NodeDeleted事件被觸發,該slave

用戶端會重新標明偵聽對象,如果不存

在可偵聽對象,該slave自動晉升成

master

[/table]

[/size][/color][/b]

[b][color=olive][size=large]代碼,如下:[/size][/color][/b]

[b][size=large][color=olive]散仙起了,3個用戶端,作為模拟Slave,本機上的一個eclipse,一個Myeclipse,和伺服器上的一個Myeclipse來實作,模拟單點故障,自動切換的功能。

初始狀态截圖如下:

[/color][/size][/b]

[img]http://dl2.iteye.com/upload/attachment/0091/8845/5902d1e4-afdb-3bc7-b529-ac6af16a5935.jpg[/img]

[b][color=olive][size=large]散仙停掉,2的監聽後發生的變化,如下:[/size]

[/color][/b]

[img]http://dl2.iteye.com/upload/attachment/0091/8858/e2c86580-ee07-3cce-ac54-c67b835d7ad4.jpg[/img]

[b][color=olive][size=large]最後,散仙停掉A節點的Master,模拟Master當機。[/size]

[img]http://dl2.iteye.com/upload/attachment/0091/8863/23569909-020e-3ddc-8bb1-95f844e00c2c.jpg[/img]

[size=large]到此,散仙已經模拟實作了主從單點故障的自動切換,使用Zookeeper可以非常簡單可靠的來完成這個功能,當然,我們在這裡隻是模拟的簡單實作,真正的單點問題的實作,肯定要比散仙的這個要複雜的多,在這裡隻是提供給大家一個解決的思路。

最後,感謝各位道友能夠堅持看完,文章若有不足之處,歡迎指正交流!

[/size][/color][/b]