在Zookeeper概述中简单介绍了Zookeepr,工欲善其事,必先利其器。那么本文就介绍如何安装Zookeeper。
Zookeeper有三种安装方式:单机模式、集群模式、伪集群模式。
单机模式
单机模式表示只运行在一台服务器上,适合测试环境; 安装步骤如下:
一、下载ZooKeeper
二、解压
三、在conf目录下创建一个配置文件zoo.cfg
tickTime=2000 dataDir=/Users/zdandljb/zookeeper/data dataLogDir=/Users/zdandljb/zookeeper/dataLog clientPort=2181
这里涉及到的参数会在后文统一介绍
四、启动ZooKeeper的Server
sh bin/zkServer.sh start
, 如果想要关闭,输入:zkServer.sh stop
五、检查是否启动成功
启动后使用命令echo ruok | nc localhost 2181
检查 Zookeeper 是否已经在服务。如果正常启动将输出imok
我在启动zookeeper的时候出现了闪退,于是我在zkServer用记事本打开,在最后加上pause,保存,然后再启动,查看闪退的原因。错误信息如下:
错误是找不到或者无法加载主类,这时有些人说看一下jdk配置是否正确,我也查看了我的jdk配置,配置是没有问题的。还有的说把jdk配置放在最前面,也试了,不能解决问题。我的jdk是1.8.0版本的。我想到可能是zookeeper的版本太高造成的。于是把zookeeper的版本从3.4.6降低到3.3.6,然后启动zookeeper,成功启动。
不管是使用3.4.6还是使用3.3.6版本,记得在conf文件夹下面做一件事情,就是把zoo_sample.cfg拷贝一份,写成了zoo.cfg,同时在里面添加一些信息(矩形标出部分):
集群模式
Zookeeper 不仅可以单机提供服务,同时也支持多机组成集群来提供服务。
安装步骤和单机模式类似,只是配置不太一样。这里以三台机器为例
一、分别在不同的机器上下载并解压Zookeeper
二、创建myid文件
在每台机器上都创建一个myid文件。文件的内容只有一个数字。
server1机器的内容为:1 server2机器的内容为:2 server3机器的内容为:3
三、在conf目录下创建一个配置文件zoo.cfg
tickTime=2000 dataDir=/Users/zdandljb/zookeeper/data dataLogDir=/Users/zdandljb/zookeeper/dataLog
clientPort=2181
initLimit=5
syncLimit=2
server.1=server1:2888:3888
server.2=server2:2888:3888
server.3=server3:2888:3888
伪集群模式
实际上 Zookeeper 还支持另外一种伪集群的方式,也就是可以在一台物理机上运行多个 Zookeeper 实例
一、安装Zookeeper
建了3个文件夹,server1 server2 server3,然后每个文件夹里面解压一个zookeeper的下载包
二、创建myid文件
进入data目录,创建一个myid的文件,里面写入一个数字,server1,就写一个1,server2对应myid文件就写入2,server3对应myid文件就写个3
三、在conf目录下创建一个配置文件zoo.cfg
tickTime=2000 dataDir=/Users/zdandljb/zookeeper/data dataLogDir=xxx/zookeeper/server1/
clientPort=2181
initLimit=5
syncLimit=2
server.1=server1:2888:3888
server.2=server2:2889:3889
server.3=server3:2890:3890
为了防止端口冲突,要配置不同的端口号。
常用参数
dataDir:用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里。
dataLogDir:用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争。
tickTime:心跳时间,为了确保client-server连接存在的,以毫秒为单位,最小超时时间为两个心跳时间。
clientPort:客户端监听端口。
initLimit:初始化连接时最长能忍受多少个心跳时间间隔数
syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度
server.x=[hostname]:nnnnn[:nnnnn]
配置集群里面的主机信息,其中:
①server.x:server.x的x要写在myid文件中,决定当前机器的id,
②第一个port用于连接leader,
③第二个用于leader选举。
④如果electionAlg为0,则不需要第二个port。
⑤hostname也可以填ip。
伪集群模式安转时,后面连着的2个端口3个server都不要一样,否则端口冲突。
electionAlg
用于选举的实现的参数:
1:LeaderElection
2:AuthFastLeaderElection
3:FastLeaderElection
zookeeper默认使用FastLeaderElection进行Leader选举
原文链接:http://www.hollischuang.com/archives/1277