采用伪集群模式,模拟线上的zookeeper集群;
1、下载需要的zookeeper版本,
进入linux需要安装的目录,cd /usr/local
wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz
解压到当前目录下,那么就在这里开始安装了
tar -zxvf zookeeper-3.4.5.tar.gz
2、为3个实例分别创建不同路径: mkdir -m 777 zookeeper01,mkdir -m 777 zookeeper02,mkdir -m 777 zookeeper03
拷贝刚才解压的zookeeper里面内容,到上面3个实例目录:
cp * -rf /usr/local/zookeeper01/
cp * -rf /usr/local/zookeeper02/
cp * -rf /usr/local/zookeeper03/
3、依次进入每个实例的下面conf路径,拷贝模板配置文件,然后修改:
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
注意,上面的 dataDir=/usr/local/zookeeper01/data 路径必须要有;
zookeeper02,zookeeper03以此类推创建拷贝配置文件,每个实例需要有自己设置的dataDir路径,不能重复,
zoo.cfg配置文件中的 server.*,代表的就是myid配置文件中的值,相对应,一会儿我们就要创建myid并且赋值;
例如,在zookeeper01实例中配置server.1=172.16.22.97:2888:3888,那么他的dataDir=/usr/local/zookeeper01/data路径下面
需要配置myid文件内容为1,
此外172.16.22.97代表ip地址,2888代表选择Leader的端口,3888代表zookeeper集群通信的端口;
4、在上面一步说到,配置的dataDir路径下面,创建myid文件,
echo 1 > /usr/local/zookeeper01/data/myid
echo 2 > /usr/local/zookeeper02/data/myid
echo 3 > /usr/local/zookeeper03/data/myid
5、基本配置完成,现在开始启动,各个zookeeper实例,进入到各个bin目录下,分别启动 ./zkServer.sh start
这里尝试启动失败,找一下原因;
去看一下日志文件:
vim /usr/local/zookeeper01/bin/zookeeper.out
上面说读取配置文件报错,我们再去看一下配置文件:
可能是 server.1=172.16.22.97:2888:3888,这一行后面,带了非法字符,删除后面多余部分即可,zookeeper02和zookeeper03实例可能也有相同配置问题,一起修改,重启:
去看日志,又报新的错:
说链接不上,3890端口服务,我们去启动刚才设置端口为3890服务的zookeeper03实例,
当去启动zookeeper03实例的时候,发现2081端口已经被占用了,因为我们在同一台机器上模拟搭建的,所以不能用一样的端口,然后去修改一下,zookeeper02实例的配置文件也需要修改,
zookeeper02的zoo.cfg改为 clientPort=2182,zookeeper03的zoo.cfg改为 clientPort=2183:
然后我们把3个zookeeper实例都启动起来:
从上面截图可以看到,zookeeper集群搭建好了,zookeeper03被选举成了leader,其他zookeeper01和zookeeper02是follower;
然后通过客户端登录一下,./zkCli.sh -server 172.16.22.97:2183,没问题可以登录:
如果你启动,还会遇到其他问题,例如配置文件中路径指定或者未创建问题,网络原因、java环境问题,或者防火墙等;