快速搭建zookeeper集群
Posted wzxmt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速搭建zookeeper集群相关的知识,希望对你有一定的参考价值。
ZooKeeper是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以Standalone模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。ZooKeeper是作为分布式协调服务,是不需要依赖于Hadoop的环境,也可以为其他的分布式环境提供服务。
zookeeper有单机、伪集群、集群三种部署方式,可根据自己对可靠性的需求选择合适的部署方式。下边对这三种部署方式逐一进行讲解。
一、单机安装
1.1 下载
进入要下载的版本的目录,选择.tar.gz文件下载,这里我们选择最新版
下载链接:http://archive.apache.org/dist/zookeeper/
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5.tar.gz
1.2 安装
使用tar解压要安装的目录即可
这里以解压到/usr/local,实际安装根据自己的想安装的目录修改(注意如果修改,那后边的命令和配置文件中的路径都要相应修改)
tar xf apache-zookeeper-3.5.5.tar.gz -C /usr/local/src/ ln -s /usr/local/src/apache-zookeeper-3.5.5 /usr/local/zookeeper
1.3 配置
在主目录下创建data和logs两个目录用于存储数据和日志:
mkdir -p /usr/local/zookeeper/data,logs
在conf目录下新建zoo.cfg文件,写入以下内容保存:
vim /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs clientPort=2181
1.4 启动和停止
进入bin目录,启动、停止、重启分和查看当前节点状态(包括集群中是何角色)别执行:
cd /usr/local/zookeeper1/bin/ && ./zkServer.sh stop cd /usr/local/zookeeper1/bin/ && ./zkServer.sh restart cd /usr/local/zookeeper1/bin/ && ./zkServer.sh status
二、伪集群模式
伪集群模式就是在同一主机启动多个zookeeper并组成集群,下边以在10.0.0.11主机上创3个zookeeper组集群为例。将通过第一大点安装的zookeeper,复制成zookeeper1/zookeeper2/zookeeper3三份。
2.1 zookeeper1配置
zookeeper1配置文件修改如下:
vim /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000 dataDir=/usr/local/zookeeper1/data dataLogDir=/usr/local/zookeeper1/logs clientPort=2181 initLimit=5 syncLimit=2 server.1=10.0.0.11:2888:3888 server.2=10.0.0.11:4888:5888 server.3=10.0.0.11:6888:7888
zookeeper1的data/myid配置如下:
echo ‘1‘ > data/myid
2.2 zookeeper2配置
zookeeper2配置文件conf/zoo.cfg修改如下:
vim /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000 dataDir=/usr/local/zookeeper2/data dataLogDir=/usr/local/zookeeper2/logs clientPort=3181 initLimit=5 syncLimit=2 server.1=10.0.0.11:2888:3888 server.2=10.0.0.11:4888:5888 server.3=10.0.0.11:6888:7888
zookeeper2的data/myid配置如下:
echo ‘2‘ > data/myid
2.3 zookeeper3配置
zookeeper3配置文件conf/zoo.cfg修改如下:
vim /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000 dataDir=/usr/local/zookeeper3/data dataLogDir=/usr/local/zookeeper3/logs clientPort=4181 initLimit=5 syncLimit=2 server.1=10.0.0.11:2888:3888 server.2=10.0.0.11:4888:5888 server.3=10.0.0.11:6888:7888
zookeeper3的data/myid配置如下:
echo ‘3‘ > data/myid
最后使用1.4的命令把三个zookeeper都启动即可,启动顺序随意没要求。
三、集群模式
集群模式就是在不同主机上安装zookeeper然后组成集群的模式;下边以在10.0.0.11/137/138三台主机为例。将第1.1到1.3步中安装好的zookeeper打包复制到137和138上,并都解压到同样的目录下。
3.1 conf/zoo.cfg文件修改
三个zookeeper的conf/zoo.cfg修改如下:
vim /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs clientPort=2181 initLimit=5 syncLimit=2 server.1=10.0.0.11:2888:3888 server.2=10.0.0.12:2888:3888 server.3=10.0.0.13:2888:3888
#2888端口号是zookeeper服务之间通信的端口,而3888是zookeeper与其他应用程序通信的端口,对于137和138,由于安装目录都是zookeeper所以dataDir和dataLogDir不需要改变,又由于在不同机器上所以clientPort也不需要改变
所以此时137和138的conf/zoo.cfg的内容与136一样即可。
3.2 data/myid文件修改
136 data/myid修改如下:
echo ‘1‘ > data/myid
137 data/myid修改如下:
echo ‘2‘ > data/myid
138 data/myid修改如下:
echo ‘3‘ > data/myid
最后使用1.4的命令把三个zookeeper都启动即可,启动顺序随意没要求。
四、 验证Zookeeper集群是否安装成功。
可以验证一下是否启动成功:
ps -ef | grep zookeeper
4.1分别在3台虚拟机上查看zookeeper的状态。
/usr/bin/zookeeper/bin/zkServer.sh status
4.2连接其中一台的zookeeper
/usr/local/zookeeper/bin/zkCli.sh -server 10.0.0.12:2181
4.3写入数据
create /test data
4.4再连接另外一台的zookeeper
/usr/local/zookeeper/bin/zkCli.sh -server 10.0.0.13:2181
4.5如果能获取到刚才写入的数据,则Zookeeper集群安装成功。
get /test
五、报错及处理
应用连接zookeepr报错:Session 0x0 for server 10.0.0.11/10.0.0.11: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 /10.0.0.11:3888;这应该只是组成集群的137节点未启动,到137启动起来zk即会正常。
以上是关于快速搭建zookeeper集群的主要内容,如果未能解决你的问题,请参考以下文章
Java开发快速上手!docker搭建zookeeper集群