天天看点

分布式助手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]