您的位置:首页 > 其它

Windows下zookeeper的伪集群搭建

2017-08-10 13:25 302 查看
    昨天快下班时突然收到boss的通知,让我学习一下zookeeper,说公司近期会有些分布式的项目工作。作为一只吃不饱穿不暖想买啥都买不起,工资一发就全都贡献给房租的实习生,怎敢不好好学?幸好boss还很人性化的给了我几篇博客让我学习,我激动地打开一看,好家伙,全是Linux系统的,可是明明让我在windows上用啊,于是便结合网上搜索到的博文,写下这篇语言较为通俗,用词较为不专业《Windows下zookeeper的伪群搭建》,可供大家查阅,更为了自己深化记忆、理清头绪。如有错误希望大家及时指出。

一、zookeeper是什么?

         看了百度前6页关于zookeeper的介绍,整合一下通俗解释一下:zookeeper的中文直译就是“动物园管理员”。动物园里有很多动物,打个比方有喜欢寒冷的企鹅啊北极熊啊,也有喜欢干燥炎热斑马啊非洲象啊,他们肯定是不能生活在同一个园区环境下的,为了动物们的健康,所以需要“动物园管理员”把他们分类进行管理。映射到项目中,系统越来越庞大、性能急剧下降,分布式系统是个绝佳的选择。而各个子系统就像动物园中的各种动物,为了使各个子系统正常为用户提供统一的服务,这时需要一种起到“管理员”功能的机制,这便就是现在广为使用的Zookeeper(动物园管理员)。

二、zookeeper的集群

    我们假设ZooKeeper集群当中一共有5台服务器,5台服务器连通在一起,客户端有分别连在不同的zookeeper服务器上。如果当数据通过客户端1,在第一台服务器上做了一次数据变更,他会把这个数据的变化同步到其他所有的服务器,同步结束之后,那么其他的客户端都会获得这个数据的变化。需要注意的是,集群中服务器的数量一定要是单数(2n+1,所以我们模拟集群的时候是模拟3台服务器)。

   大体了解之后,话不多说,直接进入搭建伪群的步骤。

三、Windows下的zookeeper伪群的搭建

   必备:jdk(建议使用1.7及其以上系统)

   zookeeper的运行需要我们在已经配好jdk环境的前提下,也就是环境变量里的path以及JAVA_HOME

1.下载

   zookeeper的下载  一般用3.4.8就可以了

2. 安装

   下载完成后直接解压就好。



3.开始正式搭建了!!

-3.1复制zkServer.cmd

   我们在进入bin文件夹,复制3份zkServer.cmd,分别命名为zkServer-1.cmd、zkServer-2.cmd、zkServer-3.cmd。



-3.2复制zoo.cfg

   返回到zookeeper解压后的根目录,进入conf文件夹,会看到一个zoo_sample.cfg的文件,这是zookeeper自带的模板配置,现在,我们把它复制三份,分别命名为zoo1.cfg、zoo2.cfg、zoo3.cfg。然后我们返回到上一步创建的zkServer-X.cmd中(X是1、2、3数字),以文本形式打开,添加一行这样的代码

set ZOOCFG=C:\zookeeper_workspace\zookeeper-3.4.8\conf\zoo1.cfg

这段代码“=”右侧便是你刚才创建的zooX.cfg的路径。一定要记得对应着修改,比如你Server-1.cmd里面,就改成zoo1.cfg的路径,依次对应。



-3.3修改zoo.cfg

以文本形式打开cfg,大家可以先把我的代码复制过去。 真正需要修改的只有dataDir的路径和clientPort以及Server里的ip地址

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper_workspace/log/1
clientPort=2181
server.1=172.18.126.135:2887:3887
server.2=172.18.126.135:2888:3888
server.3=172.18.126.135:2889:3889


    

    tickTime的这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

    initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒。

    syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime的时间长度,总的时间长度就是 2*2000=4 秒。

    dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。在此强调的是:注意是左斜杠/,而我们可能从地址栏复制过来的时候是右斜杠\,一定要修改过来!

    clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。每个zooX.cfg的该属性不同!

    server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

注意:

一定要修改dataDir的路径,使路径使存在的。我的dataDir路径目录如下图:



-3.4 添加myid文件(关键!!)

许多Linux系统下zookeeper的博文无法再windows下正常运行就是因为在Windows下,我们需要这一步。

在上一步中dataDir路径中所对应的文件夹里,比如我这里就是C:\zookeeper_workspace\log下分别有名为1、2、3的文件夹,在

每个文件夹下新建一个myid文件,(记得!不要有拓展名!),每个myid文件里只写一个数字,1文件夹里就写1,2文件夹里就写2,3

文件夹里就写3。实际myid的值是zoo.cfg文件里定义的server.A项A的值。

4.运行!!
    以上任务都做好之后,我们就可以试着运行了。双击zkServer-1.cmd运行。
如果闪退,没关系,我们打开zkServer-X.cmd的最后一行添加pause 就好,可以让屏幕不关闭,我们看一下报错。
如果是这样的报错,就说明还是myid出的问题。


等到确保myid无误之后。在此运行zkServer-1,此时你发现可能还是有错的,这是因为你的后两个服务器还没有启动,接着运行zkServer-2   (zkServer-1保持开启状态),你会发现日志中的报错少了很多,当你再运行zkServer-3,你会发现....没有报错了!!恭喜你!运行成功!!

--------------------------------------------------------------------------------------------------------------------------------------------------

总体而言,zookeeper的伪群搭建就是这样。

参考:

http://blackproof.iteye.com/blog/2039040

http://blog.csdn.net/tswisdom/article/details/41522069
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: