1、准备工作
1.1、配置好jdk
1.2、下载zookeeper安装包
下载稳定版本:http://apache.fayea.com/zookeeper/
下载完成后,传到/apps/svr/目录中
2、安装
单机模式只适用于试验,开发,测试环境,生产环境不适合使用单机模式。
2.1、单机安装
2.1.1、解压
在下面的文件夹里解压
命令行:cd /apps/svr/
tar -xvf zookeeper-3.4.10.tar.gz
2.1.2、修改配置
在/apps/svr下创建一个文件夹叫zookeeper,并在zookeeper文件夹下再创建两个文件夹data和dataLog
复制conf目录下的zoo_sample.cfg,并命名为zoo.cfg
命令行:cp zoo_sample.cfg zoo.cfg
2.1.3、修改zoo.cfg文件
命令行:vi zoo.cfg
配置文件的说明:
(1)initLimit:这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒。
(2)syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒。
(3)server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
(4)2888端口号是服务之间通信的端口,而3888是zookeeper与其他应用程序通信的端口,而zookeeper是在hosts中已映射了本机的IP。
在上面的dataDir目录下(即/apps/svr/zookeeper/data)创建一个myid文件。将server.1对应的1写入myid中
命令行:touch myid
vi myid
2.1.4、启动
进入/apps/svr/zookeeper-3.4.10/bin目录
2.1.4.1、后台启动
命令行: ./zkServer.sh start
查看日志
命令行: tail -f zookeeper.out
命令行: ps -ef|grep zookeep
如图所示,配置成功
2.1.4.2、前台启动
命令行:./zkServer.sh start-foreground
2.1.5、使用客户端连接zk
如果是连接同一台主机上的zk进程,那么直接运行bin/目录下的zkCli.cmd(Windows环境下)或者zkCli.sh(Linux环境下),即可连接上zk。
2.2、集群安装
2.2.1 说明
单机模式的zk进程虽然便于开发与测试,但并不适合在生产环境使用。在生产环境下,我们需要使用集群模式来对zk进行部署。
【注意】 在集群模式下,建议至少部署3个zk进程,或者部署奇数个zk进程。如果只部署2个zk进程,当其中一个zk进程挂掉后,剩下的一个进程并不能构成一个法定的大多数。因此,部署2个进程甚至比单机模式更不可靠,因为2个进程其中一个不可用的可能性比一个进程不可用的可能性还大。
2.2.1、配置文件说明
在集群模式下,所有的zk进程可以使用相同的配置文件(是指各个zk进程部署在不同的机器上面),例如如下配置:
tickTime=2000
dataDir=/home/myname/zookeeper(需要修改)
clientPort=2181
initLimit=5
syncLimit=2
server.1=centos1:2888:3888
server.2=centos2:2888:3888
server.3=centos3:2888:3888
配置参数说明:
initLimit
ZooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。
当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间。
syncLimit
配置follower和leader之间发送消息,请求和应答的最大时间长度。
tickTime
tickTime则是上述两个超时配置的基本单位,例如对于initLimit,其配置值为5,说明其超时时间为 2000ms * 5 = 10秒。
server.id=host:port1:port2
其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。
host是该zk进程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口。
dataDir
其配置的含义跟单机模式下的含义类似,不同的是集群模式下还有一个myid文件。myid文件的内容只有一行,且内容只能为1 - 255之间的数字,这个数字亦即上面介绍server.id中的id,表示zk进程id。
【注意】 如果仅为了测试部署集群模式而在同一台机器上部署zk进程,server.id=host:port1:port2配置中的port参数必须不同。但是,为了减少机器宕机的风险,强烈建议在部署集群模式时,将zk进程部署不同的物理机器上面。
2.2.2、安装
2.2.2.1、解压和修改配置
首先配置好JDK,参考http://blog.csdn.net/yuhuan12321/article/details/77184887
- 在/apps/svr/下创建server1文件夹,把下载zookeeper安装包导入解压;
- 在/apps/svr/server1下创建一个文件夹叫zookeeper,并在zookeeper文件夹下再创建两个文件夹data和dataLog
- 复制/apps/svr/server1/zookeeper-3.4.10/conf目录下的zoo_sample.cfg,并命名为zoo.cfg
2.2.2.2、修改zoo.cfg文件
在/apps/svr/server1/zookeeper/data创建一个myid文件。将server.1对应的1写入myid中。另外两个,同理,改成2、3。
2.2.2.3、启动
1、三台机器分别启动
在/apps/svr/server1(2、3)/zookeeper-3.4.10/bin目录下输入
./zkServer.sh start
2、三台机器都启动完后
./zkServer.sh status
查看启动是否成功,三台机器会选择一台做为leader,另两台为follower
客户端命令
./zkCli.sh -server centos1:2181
(因为是集群,机器名随便选一台即可)