zookeeper有单机、伪集群、集群三种部署方式,可根据本身对可靠性的需求选择合适的部署方式。下边对这三种部署方式逐一进行讲解。html
进入要下载的版本的目录,选择.tar.gz文件下载linux
下载连接:http://archive.apache.org/dist/zookeeper/apache
使用tar解压要安装的目录便可,以3.4.5版本为例app
这里以解压到/usr/myapp,实际安装根据本身的想安装的目录修改(注意若是修改,那后边的命令和配置文件中的路径都要相应修改)socket
tar -zxf zookeeper-3.4.5.tar.gz -C /usr/myapp
在主目录下建立data和logs两个目录用于存储数据和日志:ui
cd /usr/myapp/zookeeper-3.4.5
mkdir data mkdir logs
在conf目录下新建zoo.cfg文件,写入如下内容保存:spa
tickTime=2000 dataDir=/usr/myapp/zookeeper-3.4.5/data dataLogDir=/usr/myapp/zookeeper-3.4.5/logs clientPort=2181
进入bin目录,启动、中止、重启分和查看当前节点状态(包括集群中是何角色)别执行:rest
./zkServer.sh start ./zkServer.sh stop ./zkServer.sh restart
./zkServer.sh status
伪集群模式就是在同一主机启动多个zookeeper并组成集群,下边以在192.168.220.128主机上创3个zookeeper组集群为例。日志
将经过第一大点安装的zookeeper,复制成zookeeper1/zookeeper2/zookeeper3三份code
zookeeper1配置文件conf/zoo.cfg修改以下:
tickTime=2000 dataDir=/usr/myapp/zookeeper1/data dataLogDir=/usr/myapp/zookeeper1/logs clientPort=2181 initLimit=5 syncLimit=2 server.1=192.168.220.128:2888:3888 server.2=192.168.220.128:4888:5888 server.3=192.168.220.128:6888:7888
zookeeper1的data/myid配置以下:
echo '1' > data/myid
zookeeper2配置文件conf/zoo.cfg修改以下:
tickTime=2000 dataDir=/usr/myapp/zookeeper2/data dataLogDir=/usr/myapp/zookeeper2/logs clientPort=3181 initLimit=5 syncLimit=2 server.1=192.168.220.128:2888:3888 server.2=192.168.220.128:4888:5888 server.3=192.168.220.128:6888:7888
zookeeper2的data/myid配置以下:
echo '2' > data/myid
zookeeper3配置文件conf/zoo.cfg修改以下:
tickTime=2000 dataDir=/usr/myapp/zookeeper3/data dataLogDir=/usr/myapp/zookeeper3/logs clientPort=4181 initLimit=5 syncLimit=2 server.1=192.168.220.128:2888:3888 server.2=192.168.220.128:4888:5888 server.3=192.168.220.128:6888:7888
zookeeper3的data/myid配置以下:
echo '3' > data/myid
最后使用1.4的命令把三个zookeeper都启动便可,启动顺序随意没要求。
集群模式就是在不一样主机上安装zookeeper而后组成集群的模式;下边以在192.168.220.128/129/130三台主机为例。
将第1.1到1.3步中安装好的zookeeper打包复制到129和130上,并都解压到一样的目录下。
三个zookeeper的conf/zoo.cfg修改以下:
tickTime=2000 dataDir=/usr/myapp/zookeeper-3.4.5/data dataLogDir=/usr/myapp/zookeeper-3.4.5/logs clientPort=2181 initLimit=5 syncLimit=2 server.1=192.168.220.128:2888:3888 server.2=192.168.220.129:2888:3888 server.3=192.168.220.130:2888:3888
对于129和130,因为安装目录都是zookeeper-3.4.5因此dataDir和dataLogDir不须要改变,又因为在不一样机器上因此clientPort也不须要改变
因此此时129和130的conf/zoo.cfg的内容与128同样便可。
128 data/myid修改以下:
echo '1' > data/myid
129 data/myid修改以下:
echo '2' > data/myid
130 data/myid修改以下:
echo '3' > data/myid
最后使用1.4的命令把三个zookeeper都启动便可,启动顺序随意没要求。
如下命令无论是单机、伪集群、集群模式都适用;伪集群和集群模式随便链接其中一个zookeeper便可。
进入zookeeper的bin目录,使用zkCli链接zookeeper:
./zkCli.sh # 默认链接localhost:2181,如需指定ip和端口可以使用以下形式 # ./zkCli.sh -server 192.168.220.128:2181
如下是zkCli中的简单命令使用示例,总的而言zookeeper的组织结构相似于linux的目录结构:
# 查看全部支持的命令。其实输入任一条不支持的命令都会打印帮助 help # 查看目录下有哪些节点。以根目录为例 ls / # 建立一个节点。 # 加-s表示建立顺序节点,即会自动在给定的路径后面再加上一个数字串,保证路径不重复。 # 默认是持久节点,加-e是临时节点 create /example_path "example_data" # 查看节点内容 # 返回第一行便是节点的内容,若是第一行空白或null那就说明该节点建立时就没有值 # 后续的cZxid到numChildren都是该节点的一些属性信息;其中numChildren标识该节点下有多少个子节点 get /example_path # 删除一个没有子节点的节点 delete /example_path # 递规删除节点及其全部子节点 rmr /example_path # 退出zkCli quit
应用链接zookeepr报错:Session 0x0 for server 192.168.220.128/192.168.220.128:2181,unexpected error,closing socket connection and attempting reconnect;
先看端口可否telnet通,若是通则使用./zkServer.sh status查看zk是否确实已启动,没启查看bin/zookeeper.out中的报错。
bin/zookeeper.out中报错:“zookeeper address already in use”;显然端口被占用,要么是其余进程占用了配置的端口,要么是上边配置的clientPort和server中的端口有重复。
bin/zookeeper.out中报错:Cannot open channel to 2 at election address /192.168.220.130:3888;这应该只是组成集群的130节点未启动,到130启动起来zk即会正常。
参考:
http://coolxing.iteye.com/blog/1871009
https://zookeeper.apache.org/doc/r3.4.10/zookeeperStarted.html