在linux操作系统上 搭建zookeeper
一、准备工作
centos6.5服务器一台(如果需要搭建集群环境,至少需要三台)
zookeeper-3.4.6.tar.gz安装包一个
https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/(zookeeper下载网址)
安装zookeeper之前需要先安装jdk,否则无法正常使用。
二、搭建zookeeper的单机环境
1).解压zookeeper的tar包到指定目录下
tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local
2).对解压后的目录进行重命名
mv zookeeper-3.4.6 zookeeper3.4
3).对zoo_sample.cfg文件重命名为zoo.cfg文件
#进入zookeeper的解压目录conf目录中
cd /usr/local/zookeeper3.4/conf
#对zoo_sample.cfg文件进行重命名,zookeeper启动会加载zoo.cfg文件
mv zoo_sample.cfg zoo.cfg
4).修改zoo.cfg文件中的内容
#修改数据存放目录 dataDir=/usr/local/zookeeper3.4/data
5).进入zookeeper的bin目录,启动zookeeper
#进入zookeeper的bin目录
cd /usr/local/zookeeper3.4/bin
#启动zookeeper服务
./zkServer.sh start
#查看zookeeper的启动状态
./zkServer.sh status
启动成功后,我们对zoo.cfg文件中的几个参数做一个简单的了解:
Zookeeper 客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。
tickTime=2000
集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)
initLimit=10
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
syncLimit=5
Zookeeper保存数据的目录
dataDir=/usr/local/zookeeper3.4/data
客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
clientPort=2181
三、搭建zookeeper的集群环境
zookeeper集群要求,服务器个数为奇数。
现在启动三台服务器,版本都是centos6.5
- 安装jdk
- 按照单机版的方式 安装zookeeper
- 关闭三台机器的防火墙
三台服务器的ip地址分别为192.168.95.129/192.168.95.130/192.168.95.131
1).修改zoo.cfg文件(三台服务器都要修改)
server.1=192.168.95.129:2888:3888
server.2=192.168.95.130:2888:3888
server.3=192.168.95.131:2888:3888
2).在zookeeper的data目录下,创建myid文件
注意:我们刚才修改zoo.cfg文件增加的配置信息格式为 server.?=ip:port:port
其中?号为一个数字,此时myid文件中的内容就是?号这个数字。
例如在192.168.95.129这台服务器中myid文件的内容就是数字1
192.168.95.130这台服务器中myid文件的内容就是数字2
192.168.95.131这台服务器中myid文件的内容就是数字3
#进入data目录下
cd /usr/local/zookeeper3.4/data
#创建myid文件,并且编辑文件中的内容
vi myid
注意:三台服务器都要修改,修改之后就可以重新zookeeper了
3).启动三台服务器的zookeeper服务
启动之后查看zookeeper服务的状态
Mode:leader代表主节点
Mode:follower代表从节点
为什么zookeeper的节点配置的个数必须是奇数个?
zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的
如果有2个zookeeper,那么只要有1个死了zookeeper就不能用了,因为1没有过半,所以2个zookeeper的死亡容忍度为0。 如果有3个zookeeper,一个死了,还剩下2个正常的,过半了,所以3个zookeeper的容忍度为1
容忍度就是允许挂掉几台zk,还能保证集群对外正常工作。
通过下边这个图,可以发现一个情况。
(N-1)/2 的结果取整就是zk允许出现故障机器的最大数。那么N如果是zk的节点数,最好为奇数