这里我以zookeeper3.4.10.tar.gz来演示安装,安装到/usr/local/soft目录下。
一.单机版配置
1.安装和配置
#1.下载
wget http://apache.fayea.com/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
#2.解压
tar -zxvf zookeeper3.4.10.tar.gz
#3.在zookeeper-3.4.10/conf目录下创建目录:
mkdir data
mkdir logs
#4.将zookeeper3.4.10/conf目录下的zoo_sample.cfg 文件拷贝一份,命名为为zoo.cfg
cp zoo_sample.cfg zoo.cfg
#5.修改zoo.cfg配置文件
vim zoo.cfg
#修改为上面创建的目录
dataDir=/usr/local/soft/zookeeper-3.4.10/data
#【该配置项为优化项,用于单独存放事务日志。参考官方文档】
dataLogDir=/usr/local/soft/zookeeper-3.4.10/logs
说明:
dataDir是快照存储的目录。配置文件中已经明确说明不要使用/tmp来存储,/tmp在这里仅仅是为了演示的目的。
dataLogDir是一个优化项,可以参考官方说明:优化
大致意思是:指明一个明确的事务日志目录可以在更新时降低延迟。默认的事务日志存放位置与data快照和myid文件存放位置相同。使用dataLogDir参数就可以指定一个不同的目录。
2.配置环境变量(可选)
配置环境变量后,则可在bin目录之外直接使用相应的命令。
#打开配置
vim /etc/profile
#在文件尾加入以下内容
export ZOOKEEPER_HOME=/usr/local/soft/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin
#刷新配置
source /etc/profile
3.启动(不要使用root用户启动)
#启动
zkServer.sh start
#停止
zkServer.sh stop
#查看运行状态
zkServer.sh status
运行状态中standalone表明当前为单节点模式。
4.设置开机启动(可选。生产环境下需要)
设置开机启动有两种方式,分别对应/etc/rc.d目录下的init.d目录和rc.local文件。
说明: 由于linux建立了软链接init.d -> rc.d/init.d,rc.local -> rc.d/rc.local的缘故,所以/etc/rc.d/init.d可以简写为/etc/init.d,同样/etc/rc.d/rc.local可简写为/etc/rc.local
①方式一:开机启动脚本
该方式类似于windows的’启动’目录,里面的批处理文件会在系统启动后自动运行。对应/etc/rc.d/init.d目录。
打开/etc/rc.d/rc.local文件,加入以下内容
#以非root用户来启动脚本
su - 用户名 -c '/usr/local/soft/zookeeper-3.4.10/zkServer.sh start'
然后,重启试试。
②方式二:开机自启动服务服务
另一种是做成开机自启动服务,这类似于windows中的系统服务,这些服务会在系统启动时自动启动。对应/etc/rc.d/rc.local文件。
#进入/etc/rc.d/init.d目录
cd /etc/rc.d/init.d
#创建zookeeper文件(每个服务对应一个文件),并授予执行权限
touch zookeeper
chomod +x zookeeper
#编辑zookeeper文件(创建zookeeper服务)
vim zookeeper
加入如下内容(这里使用的是root用户)
#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
case $1 in
start) su root /usr/local/soft/zookeeper-3.4.10/bin/zkServer.sh start;;
stop) su root /usr/local/soft/zookeeper-3.4.10/bin/zkServer.sh stop;;
status) su root /usr/local/soft/zookeeper-3.4.10/bin/zkServer.sh status;;
restart) su root /usr/local/soft/zookeeper-3.4.10/bin/zkServer.sh restart;;
*) echo "require start|stop|status|restart" ;;
esac
#将zookeeper服务添加到开机启动项
chkconfig –add zookeeper
#查看开机自启项中是否已有zookeeper服务
chkconfig --list
#重启系统试试
#测试服务
service zookeeper start/stop/restart/status
二、配置参数说明
1.tickTime:
Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。
tickTime=2000
2.initLimit:Leader-Follow初始通信时限
集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。启动有快有慢,超过该值则认为启动失败。
initLimit=5
3.syncLimit:LF同步通信时限
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
syncLimit=2
4.dataDir:数据文件目录
Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
dataDir=/home/michael/opt/zookeeper/data
5.clientPort:客户端连接端口
客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
clientPort=2181
6.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
这个配置项的书写格式比较特殊,规则如下:
server.N=YYY:A:B
server.1=test05:2888:3888
server.2=test06:2888:3888
server.3=test07:2888:3888
三、集群版配置
为了高可用,通常会配置zookeeper集群。Zookeeper集群中只要有过半的节点是正常的情况下,那么整个集群对外就是可用的。正是基于这个特性,要将ZK集群的节点数量要为奇数(2n+1:如3、5、7个节点)较为合适。
以下是由三台zookeeper组成的集群的配置。
1.添加配置
只需要在前面单机配置的基础上,在配置文件追加如下内容
#服务器编号,服务器地址,Leader-Follow通信端口,选举端口
server.1=test01:2888:3888
server.2=test02:2888:3888
server.3=test03:2888:3888
说明:服务器地址可以直接写成ip形式,但推荐使用了ip与主机名绑定形式。
只需在/etc/hosts文件中添加:
# zookeeper servers
192.168.8.88 test01
2.验证集群
分别启动三个zookeeper节点,查看运行状态。
zkServer.sh status
如果集群正常,则三台zookeeper都不再是standalone模式,而是会有一个leader模式和两个follower模式。其中leader是由zookeeper的选举策略选举产生的。