Windows下部署 ZooKeeper(集群)

先看单机ZooKeeper部署:Windows下部署 ZooKeeper(单机)
        在集群模式下,建议至少部署3个ZooKeeper服务,或者部署奇数个ZooKeeper服务。如果只部署2个ZooKeeper服务,当其中一个ZooKeeper服务挂掉后,剩下的一个服务并不能构成一个quorum的大多数。因此,部署2个服务甚至比单机模式更不可靠,因为2个服务其中一个不可用的可能性比一个服务不可用的可能性还大。
        如果ZooKeeper拥有5台服务器,那么在最多2台服务器出现故障后,整个服务还可以正常使用。所谓的ZooKeeper容错是指,当宕掉几个ZooKeeper服务器之后,剩下的个数必须大于宕掉的个数,也就是剩下的服务数必须大于n/2,ZooKeeper才可以继续使用,无论奇偶数都可以选举leader。5台机器最多宕掉2台,还可以继续使用,因为剩下3台大于5/2。为什么说最好为奇数个,是在以最大容错服务器个数的条件下,会节省资源,比如,最大容错为2的情况下,对应的ZooKeeper服务数,奇数为5,而偶数为6,也就是6个ZooKeeper服务的情况下最多能宕掉2个服务,所以从节约资源的角度看,没必要部署6(偶数)个ZooKeeper服务。
        集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。也就是说如果有2个ZooKeeper,那么只要有1个宕掉了ZooKeeper就不能用了,因为1没有过半,所以2个zookeeper的死亡容忍度为0;同理,要是有3个ZooKeeper,一个宕掉了,还剩下2个正常的,过半了,所以3个ZooKeeper的容忍度为1;同理多列举几个:2->0;3->1;4->1;5->2;6->2会发现一个规律,2n和2n-1的容忍度是一样的,都是n-1,所以为了更加高效,何必增加那一个不必要的ZooKeeper呢。
1、把 ZooKeeper 解压、复制到三个文件夹中

2、修改三个文件夹中 config 下的 zoo.cfg
node-1:
#这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
tickTime=2000
        #这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒
initLimit=10
        #这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒
syncLimit=5
#保存数据的目录
dataDir=./data
        #日志文件的位置
        #dataLogDir=./zkLog
#客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
clientPort=2181
#server.A=B:C:D
#A为表示第几号服务器,即myid写的值,而且是数值类型,其主要也是用于选举leader的值之一
#B为当前机器的ip地址
#C为这个服务器与集群中的 Leader 服务器交换信息的端口
#D为数据交换端口,比如选举leader时的端口
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883
node-2:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=./data
clientPort=2182
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883
node3:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=./data
clientPort=2183
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883
3、在三个文件夹 ./data 目录下均创建文件名为 myid 的文件,文件内容为上边配置文件中 server. 后面的数值,例如 node-1 的 myid:
4、启动三台Zookeeper,分别进入 Zookeeper bin 目录,双击运行:zkServer.cmd
注意:启动第一台和第二台打印出的错误,是在等待后面机器启动。