zookeeper的三要素:html
一、一致,可以保证数据的一致性node
二、有头,始终有一个leader,node/2+1个节点有效,就能正常工做apache
三、数据树,树状结构且每一个树必须有数据vim
操做系统:CentOS Linux release 7.2.1511 (Core)服务器
JDK版本:1.8.0_121tcp
具体安装jdk的配置请参见本人的博客http://www.javashuo.com/article/p-wcvtxxkr-cm.html中关于jdk安装部分的内容,本文假设jdk已经安装好了ide
服务器 oop
192.168.1.101;性能
192.168.1.102;ui
192.168.1.103;
2. 下载zookeeper
下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/
利用wget下载并解压zookeeper3.4.12,当前在192.168.1.101机器上操做
cd /opt/software wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz #下载zookeeper3.4.12到当前目录 tar -xzvf zookeeper-3.4.12.tar.gz -C /opt/software #解压zookeeper到当前目录 cd zookeeper-3.4.12 #进入zookeeper3.4.12目录
3. 配置zookeeper3.4.12
mv /opt/software/zookeeper-3.4.12/conf/zoo_sample.cfg /opt/software/zookeeper-3.4.12/conf/zoo.cfg vim /opt/software/zookeeper-3.4.12/conf/zoo.cfg
先把dataDir=/tmp/zookeeper注释,而后将下面四行代码添加到文件末尾,添加如下内容:
dataDir=/opt/software/zookeeper-3.4.12/data dataLogDir=/opt/software/zookeeper-3.4.12/log server.1=192.168.1.101:2888:3888 server.2=192.168.1.102:2888:3888 server.3=192.168.1.103:2888:3888
#server.1 这个1是服务器的标识也能够是其余的数字, 表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里 #192.168.1.101为集群里的IP地址,第一个端口是master和slave之间的通讯端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉以后进行新的选举的端口默认是3888
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 port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 # the directory where the snapshot is stored. dataDir=/opt/software/zookeeper-3.4.12/data dataLogDir=/opt/software/zookeeper-3.4.12/log server.1=192.168.1.101:2888:3888 server.2=192.168.1.102:2888:3888 server.3=192.168.1.103:2888:3888
配置文件说明:
#tickTime: 这个时间是做为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每一个 tickTime 时间就会发送一个心跳。 #initLimit: 这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户链接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中链接到 Leader 的 Follower 服务器)初始化链接时最长能忍受多少个心跳时间间隔数。
当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器尚未收到客户端的返回信息,那么代表这个客户端链接失败。总的时间长度就是 5*2000=10 秒 #syncLimit: 这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是5*2000=10秒 #dataDir: 快照日志的存储路径 #dataLogDir: 事物日志的存储路径,若是不配置这个那么事物日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多 #clientPort: 这个端口就是客户端链接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。修改他的端口改大点
#autopurge.purgeInterval 这个参数指定了日志清理频率,单位是小时,须要填写一个1或更大的整数,默认是0,表示不开启本身清理功能。
#autopurge.snapRetainCount 这个参数和上面的参数搭配使用,这个参数指定了须要保留的文件数目。默认是保留3个。
4.建立myid文件
mkdir -p /opt/software/zookeeper-3.4.12/data #建立数据目录,该目录在zoo.cfg中配置 cd /opt/software/zookeeper-3.4.12/data #上面配置的zookeeper数据保存目录 touch myid #建立myid文件 echo "1">>myid #往myid中写入1,对应server.X={IP}:2888:3888 中的x数字
5. 将上面在192.168.1.101机器上配置好的zookeeper复制到102,103两台机器上去
scp -r /opt/software/zookeeper-3.4.12/ 192.168.1.102:/opt/software/ #将配置好的zookeeper复制到192.168.1.102 scp -r /opt/software/zookeeper-3.4.12/ 192.168.1.103:/opt/software/ #将配置好的zookeeper复制到192.168.1.103
修改102,103机器上/opt/software/zookeeper-3.4.12/data/myid为对应的值
192.168.1.102:
cd /opt/software/zookeeper-3.4.12/data rm -f ./myid echo "2">>myid #往myid中写入2,对应server.X={IP}:2888:3888 中的x数字,此处为2
192.168.1.103:
cd /opt/software/zookeeper-3.4.12/data rm -f ./myid echo "3">>myid #往myid中写入3,对应server.X={IP}:2888:3888 中的x数字,此处为3
6. 开放zookeeper端口
firewall-cmd --zone=public --add-port=2888/tcp --permanent #添加2888防火墙例外 firewall-cmd --zone=public --add-port=3888/tcp --permanent #添加3888防火墙例外 firewall-cmd --zone=public --add-port=2181/tcp --permanent #添加2181防火墙例外 firewall-cmd --reload #重启防火墙
注意:若是所在机器上防火墙没有关闭,上面的操做天天机器都须要作;有些hadoop或CDH集群安装的时候要求把防火墙关闭的,若是已经关闭了防火墙的,能够跳过该步骤,不用执行。
7. 添加环境变量
vim /etc/profile
在文件最后添加:
# zookeeper export ZK_HOME=/opt/software/zookeeper-3.4.12 export PATH=$ZK_HOME/bin:$PATH
使环境变量生效:
source /etc/profile
注意:三台机器都要作这个操做。
8. 启动zookeeper
8.1启动
zkServer.sh start #三台机器都要作此操做,不然经过zkServer.sh status查看启动状态时,
#可能会有Error contacting service. It is probably not running.错误信息。
#具体查看能够在$ZK_HOME/zookeeper.out查看详细的日志信息
8.2 查看状态
zkServer.sh status #查看当前机器的zookeeper状态
192.168.1.101
[root@zoo101 zookeeper-3.4.12]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/software/zookeeper-3.4.12/bin/../conf/zoo.cfg Mode: follower
192.168.1.102
[root@zoo102 zookeeper-3.4.12]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/software/zookeeper-3.4.12/bin/../conf/zoo.cfg Mode: leader
192.168.1.103
[root@zoo103 zookeeper-3.4.12]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/software/zookeeper-3.4.12/bin/../conf/zoo.cfg Mode: follower
9. 客户端链接zookeeper
zkCli.sh -server 192.168.1.101:2181
若是出现以下内容,则代表zookeeper已经安装成功
参考: