[dubbo实战] dubbo+zookeeper伪集群搭建

    zookeeper做为注册中心,服务器和客户端都要访问,若是有大量的并发,确定会有等待。因此能够经过zookeeper集群解决。html

1、为何须要zookeeper呢?mongodb

   大部分分布式应用须要一个主控、协调器或者控制器来管理物理分布的子进程。目前,大多数都要开发私有的协调程序,缺少一个通用机制,协调程序的反复编写浪费,且难以造成通用、伸缩性好的协调器,zookeeper提供通用的分布式锁服务,用以协调分布式应用。因此说zookeeper是分布式应用的协做服务。
服务器

2、zookeeper的工做原理并发

   核心原理是原子广播,这个机制保证了各个server之间的同步,实现这个机制的协议叫作Zab协议,它有两种模式:恢复和广播模式。分布式

   当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,恢复模式就结束了。ide

    一旦zookeeper内部同步好了后,就能够开始广播信息了,这时候当一个server加入zookeeper服务中,它会在恢复模式下启动,而且同步状态,同步结束后它也参与广播消息。测试

3、集群搭建准备spa

1.我用了三个zookeeper服务,分别是zookeeper-1,zookeeper-2,zookeeper-3
code

2.在每一个zookeeper下添加data和log文件server

3.配置zoo.cfg文件

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=E:/zookeeper/zookeeper-1/data
# the directory where the log
dataLogDir=E:/zookeeper/zookeeper-1/log 
# the port at which the clients will connect
clientPort=2181
#Clusters
server.1=192.168.24.140:2888:3888
server.2=192.168.24.140:2889:3889
server.3=192.168.24.140:2890:3890
  每一个zookeeper的端口配置都应该不一样,分别是2181,2182,2183

4.在data文件添加myid文件,而且里面的内容分别为:1,2,3

5.在dubbo项目中,provider和consumer的xml文件中修改zookeeper的地址,以下:

<!-- 本机 伪集群 测试 -->     
    <dubbo:registry  protocol="zookeeper"  address="192.168.24.140:2181,192.168.24.140:2182,192.168.24.140:2183"  />

4、测试

    先分别启动zookeeper,而后依次启动服务和客户端。启动服务的时候会看到链接到哪一个zookeeper上了。为了测试集群的特性,好比客户端启动后zookeeper-1提供服务,我关掉它,那么程序就继续发起链接,接着可能zookeeper-2提供服务。

   由于如今有三台服务器,因此要求至少有2台正常启动才能运行正常。那么zookeeper-2也关闭,那程序不会链接zookeeper-3,一直报错,提示no further connection。

   上面说了停掉某个服务,zookeeper内部会选举出下一个leader来,它内部存在投票选举机制。这里很少说了。就像mongodb集群,会根据心跳机制选出主服务器。

   接下来的测试,我继续打开zookeeper-1或zookeeper-2,能正常提供服务。把zookeeper-3关闭,若是zookeeper-1和zookeeper-2从新启动成功后,也是能提供服务的。内部在恢复模式下同步状态。