之前在学习hadoop,spark的过程中,包括接下来的kafka,zookeeper用到的地方不少,特此记录zookeeper集群搭建过程。
环境:
VM搭建的三个虚拟机,均采用centos-6.8-64.iso
机器IP与名称对应关系如下:
192.168.152.192 master
192.168.152.193 slave1
192.168.152.194 slave2
1. 安装JDK,每台机器都要安装,请自行安装。
2. 先在一台机器上配置好相关文件再远程复制到其他机器上,期间用到SSH无密码互相访问,可以参考SSH无密码互相访问。
2.1 在master机器上进行如下操作:
[root@master] # mkdir /home/zookeeper
[root@master] # cd /home/master
[root@master] # wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
[root@master] # tar zxvf zookeeper-3.4.6.tar.gz -C /home/zookeeper
[root@master] # cd ../zookeeper
[root@master] # mkdir zkdata
[root@master] # touch zkdata/myid #用于存储每个机器的标志
[root@master] # mkdir zkdatalog #日志目录
进入zookeeper-3.4.6目录的conf目录下
[root@master] # cd zookeeper-3.4.6/conf
复制一份样本配置文件
[root@master] # cp zoo_sample.cfg zoo.cfg
[root@master] # vim zoo.cfg
修改以下内容:
tickTime=2000 #单位毫秒,服务器之间或者客户端与服务器之间的心跳间隔
initLimit=10 #初始化Follower最长时间:10 * 2000 ms
syncLimit=5 #Leader与Follower之间发送消息请求和应答时间长度:5 * 2000 ms
dataDir=/home/zookeeper/zkdata #日志存储路径
dataLogDir=/home/zookeeper/zkdatalog #事务日志存储路径
clientPort=12181 #客户端端口
server.1=192.168.152.192:12888:13888 #server后面的1表示zookeeper集群间的标志,可自定义
server.2=192.168.152.193:12888:13888 #server后面的2表示zookeeper集群间的标志,可自定义
server.3=192.168.152.194:12888:13888 #server后面的3表示zookeeper集群间的标志,可自定义
autopurge.snapRetainCount=15 #每次清除日志后保留的文件数目
autopurge.purgeInterval=1 #清除日志频率,单位小时
退出保存 :wq
因为本机地址为192.168.152.192所以把"1"写进/home/zookeeper/zkdata/myid文件里
[root@master] # echo "1" > /home/zookeeper/zkdata/myid
至此master机器上配置完毕,把配置好的zookeeper-3.4.6目录远程复制到slave1和slave2即可
2.2 切换到slave1,先创建必要的目录和文件
[root@slave1] # mkdir /home/zookeeper
[root@slave1] # mkdir /home/zookeeper/zkdata
[root@slave1] # touch /home/zookeeper/zkdata/myid
[root@slave1] # mkdir /home/zookeeper/zkdatalog
[root@slave1] # echo "2" > /home/zookeeper/zkdata/myid
2.3 切换到slave2,先创建必要的目录和文件
[root@slave2] # mkdir /home/zookeeper
[root@slave2] # mkdir /home/zookeeper/zkdata
[root@slave2] # touch /home/zookeeper/zkdata/myid
[root@slave2] # mkdir /home/zookeeper/zkdatalog
[root@slave2] # echo "3" > /home/zookeeper/zkdata/myid
2.4 回到master机器上实施远程复制命令
[root@master] # scp -r /home/zookeeper/zookeeper-3.4.6 slave1:/home/zookeeper
[root@master] # scp -r /home/zookeeper/zookeeper-3.4.6 slave2:/home/zookeeper
3 在三台机器上分别启动zkServer.sh脚本
[root@master] # cd /home/zookeeper/zookeeper-3.4.6/bin
[root@master] # ./zkServer.sh start
[root@slave1] # cd /home/zookeeper/zookeeper-3.4.6/bin
[root@slave1] # ./zkServer.sh start
[root@slave2] # cd /home/zookeeper/zookeeper-3.4.6/bin
[root@slave2] # ./zkServer.sh start
用zkServer.sh status查看状态如下格式
------------master------------
[root@master] #./zkServer.sh status
JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
------------slave1------------
[root@slave1] #./zkServer.sh status
JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: leader
------------slave2------------
[root@slave2] #./zkServer.sh status
JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
zookeeper集群每次启动时会根据算法自动选举出一个leader,当某一个机器挂了,只要存活机器数目超过一半就可以保证集群正常运行。