一、下载安装包
访问zookeeper的官网下载地址,我这里下载的时候最新版本是3.6.2,大家也可以通过点击下面的超链接去下载。 zookeeper 3.6.2
二、安装
1、环境准备
ZooKeeper的运行需要依赖于JDK环境,所以我们需要先安装JDK,本人安装的是JDK1.8,至于如何安装,请自行百度,这里默认大家已经具备这个技能了。 接下来就是ZooKeeper软件,本人使用的是3.6.2版本 现将我本机上传后的软件截图如下,下图中红色的两个文件就是jdk和zookeeper的安装软件
2、上传安装包到服务器
至于上传安装包到服务器上有多种方式,本人使用xftp工具上传到服务器上,大家也可以使用rz命令进行安装包的上传,如果还未安装rz的同学可以通过yum源来进行rz安装,具体安装命令如下:
代码语言:javascript复制yum -y install lrzsz
执行完上述的安装命令后效果如下:
安装完成后,在命令行输入rz,会弹出文件选择框,如下图所示:
3、解压缩安装包
执行如下命令解压jdk安装包
代码语言:javascript复制tar -zxvf jdk-8u121-linux-x64.tar.gz
执行如下命令解压zookeeper安装包
代码语言:javascript复制tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz
三、配置
1、配置环境变量
配置JAVA_HOME环境变量,执行如下脚本,打开.bash_profile文件
代码语言:javascript复制cd #执行该命令是为了让控制台跳转到用户的家目录,也可以使用cd ~是同样的效果
vi .bash_profile
打开.bash_profile文件后,追加如下内容:
代码语言:javascript复制export JAVA_HOME=/root/jdk1.8.0_121 #添加JAVA_HOME环境变量
export PATH=$PATH:$JAVA_HOME/bin #添加Java的bin目录到PATH环境变量中
追加后的效果如下图所示:
配置完成后执行如下命令生效
代码语言:javascript复制source .bash_profile
接下来按同样的方法配置ZOOKEEPER_HOME环境变量,这里就不再做详细的描述,直接把配置好的文件内容展示如下:
代码语言:javascript复制# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export KUBECONFIG=/etc/kubernetes/admin.conf
export JAVA_HOME=/root/jdk1.8.0_121
export PATH=$PATH:$JAVA_HOME/bin
export ZOOKEEPER_HOME=/root/apache-zookeeper-3.6.2-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin
2、配置软件运行服务器列表
进入zookeeper解压目录下的conf目录
代码语言:javascript复制cd $ZOOKEEPER/conf
我们可以看到3个文件,其中有个zoo_sample.cfg文件,这是官方提供的配置样例文件,我们把这个拷贝一份重新命名为zoo.cfg
代码语言:javascript复制cp zoo_sample.cfg zoo.cfg
然后我们打开zoo.cfg进行配置文件的修改
代码语言:javascript复制vi zoo.cfg
打开后的zoo.cfg文件内容显示如下:
代码语言:javascript复制tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/zookeeper
clientPort=2181
配置文件详解:
配置项 | 默认值 | 配置描述 |
---|---|---|
tickTime | 2000 | Zookeeper服务器之间或客户端之间维持心跳的时间间隔,单位是毫秒 |
initLimit | 10 | Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔(当已经超过 10 个心跳的时间也就是(ticktime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败,总的时间长度就是:10*2000 = 20s) |
syncLimit | 5 | 这个配置项表示Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是:5*2000 = 10s |
dataDir | /tmp/zookeeper | 官方默认是在临时路径下,所以必须要更改到其他目录下,如:/var/zookeeper |
clientPort | 2181 | 这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求 |
至此只完成了ZooKeeper的默认配置的调整,我们要运行ZooKeeper,需要确定运行机器的台数,本人这里使用三台机器,所以需要在zoo.cfg配置文件底部增加三台服务器的配置,配置格式为
代码语言:javascript复制server.序号=IP:内部同步端口:选举端口
示例如下:
代码语言:javascript复制server.1=192.168.100.6:2888:3888
server.2=192.168.100.7:2888:3888
server.3=192.168.100.8:2888:3888
3、配置数据目录
根据上一节的配置项dataDir的值,我们创建对应的目录,本人这里配置的是/var/zookeeper,所以就在/var目录下创建一个zookeeper目录
代码语言:javascript复制mkdir -p /var/zookeeper
4、配置myid
zookeeper需要给每台运行的机器一个自身的标识号,所以在配置项dataDir目录下创建一个myid文件,里面只需写上给当前机器的编号即可,这个编号值来源与zoo.cfg文件中配置的内容,如192.168.100.6是属于server.1的配置项的,所以192.168.100.6的myid的内容需要配置为1,这里我截一下我本机的图片好加强一下理解:
四、运行
ZooKeeper的运行方式有多种,我们可以通过运行zkServer.sh来进行查看
代码语言:javascript复制zkServer.sh
输出
代码语言:javascript复制ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfg
Usage: /root/apache-zookeeper-3.6.2-bin/bin/zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|version|restart|status|print-cmd}
我们可以看到选项有start|start-foreground|stop|version|restart|status|print-cmd这些,我们先按前台启动方式(start-foreground)运行一下zookeeper,这样好观察一下zookeeper的日志输出
按照规划的3台服务器,我们先从192.168.100.6开始启动,进入$ZOOKEEPER_HOME/bin目录下,输入命令:
代码语言:javascript复制zkServer.sh start-foreground
运行结果如下:
会有类似这样的报错,这是正常的,我们当初配置了3台服务器,目前才启动了一台,这些异常是无法连接另外两台而抛出的异常,把另外两台启动后这些异常就消失了。 接下来我们启动192.168.100.7服务器上的zookeeper,结果如下:
上图也出现了类似的异常,是无法连接第三台服务器导致的
另外,我们也可以看到服务已经正常启动了,图中红色框选的内容描述的是192.168.100.7服务器上的zookeeper被选为了Leader角色,192.168.100.6服务器上的zookeeper则作为Follower角色,目前192.168.100.8还未启动,但是zookeeper却已经能正常提供服务了,这是因为zookeeper内部采用过半通过的原则,总共3台服务器,启动了2台,系统则认为服务已经是OK的了,可以对外正常提供服务了,接下来我们还是把192.168.100.8上的zookeeper服务也启动起来,启动结果如下:
没有任何错误,到此zookeeper就全部启动完成了。
五、测试
运行完成后接下来就是检查运行情况了,我们这里就检查下各个服务器的角色吧,分别在192.168.100.6服务器上运行如下脚本:
代码语言:javascript复制zkServer.sh status
运行结果如下:
由上面的三张图可以看出,192.168.100.7的角色是Leader,其他都是Follower。 最后,我们在三台服务器中的任意一台上运行zkCli.sh看看是否能成功连接ZooKeeper,运行结果如下:
当看到Welcome to ZooKeeper就说明连接成功了。