1.前置准备
JDK:zookeeper是基于java语言开发的,jdk必不可少
Zookeeper安装包:http://mirror.bit.edu.cn/apache/zookeeper/
(若是要在linux虚拟机部署集群效果,还得准备两台以上的虚拟机,在这里我准备三台,之前的博客有关于linux虚拟机的安装配置,可以围观)
2.解压并配置
tar -zxvf zookeeper-3.4.13.tar.gz
进入bin,复制zoo_sample.cfg生成zoo.cfg,然后编辑配置zoo.cfg(当然新建一个zoo.cfg空文件也行)
#复制文件
cp zoo_sample.cfg zoo.cfg
你可知道为什么一定要有这个zoo.cfg文件,来看zookeeper的启动脚本zkServer.sh
启动脚本调用了zkEnv.sh
(同在bin目录下)
进入zkEnv.sh
,可以看到又调用了一个zoo.cfg
文件
到这里就了解了一定要存在zoo.cfg文件才能让zookeeper正常启动
#进入文件编辑
vim zoo.cfg
#编辑增加
dataDir=/usr/local/zookeeper-3.4.13/data/
dataLogDir=/usr/local/zookeeper-3.4.13/datalogs/
server.1=192.168.1.66:2888:3888
server.2=192.168.1.67:2888:3888
server.3=192.168.1.68:2888:3888
相应地,要创建出dataDir和dataLogDir文件夹
mkdir /usr/local/zookeeper-3.4.13/data/
mkdir /usr/local/zookeeper-3.4.13/datalogs/
在新建的data文件夹下新建myid
文件,并写上对应的号数,也就是配置文件中server.n的n,如server.1就写上1
echo 1 > myid
(注:若是部署单机模式,则配置文件只留server.1)
3.拷贝
配置好这一台虚拟机之后就可以用scp命令将配置好的zookeeper拷贝至其他两台虚拟机,然后改下myid,这是每个zookeeper的标志
4.启动
分别启动三台虚拟机的zookeeper
./bin/zkServer.sh start
zookeeper集群有主从之分,我的启动顺序为1(66)–>2(67)–>3(68),那么问题来了,那一台才是leader?
可以查看zookeeper的状态
./bin/zkServer.sh status
答案是2(67)这台第二启动的zookeeper是leader,其他两台为follower。
zookeeper集群的机制是挂掉半数或者以上就不可用
- 当第一台zookeeper【1(66)】启动时,它给自己投票,1<3/2,这时的集群是不可用,处于 LOOKING。
- 当第二台zookeeper【2(67)】启动时,它给自己投票,2>3/2,这时集群可用,由于编号大于第一台zookeeper,选举胜出成为leader,第一台zookeeper成为follower。
- 当第三台zookeeper【3(68)】启动时,它给自己投票,由于第二台zookeeper已经成为leader,选举已经结束,所以它只能成为follower。