Zookeeper的安装
Zookeeper单机环境安装
前置准备
Zookeeper的运行依赖JDK,需要预先安装。JDK怎样安装请参照Linux分类专栏中的文章;
下载zookeeper-3.4.6.tar.gz压缩包
首先要下载Zookeeper,网址是:https://archive.apache.org/dist/zookeeper
搜索网址,如下图:
把下载的zookeeper放到linux系统中
把Window中的zookeeper-3.4.6.tar.gz安装包,移动到linux系统中,如下图:
在linux系统中解压zookeeper安装包
然后在Xshell远程连接云服务器的窗口中,使用tar -zxvf zookeeper-3.4.6.tar.gz解压此压缩包,如下图:
在linux系统中解压zookeeper安装包后需要配置环境变量
# 1.linux中的环境变量是在/etc/profile文件中配置的
vim /etc/profile
# 2.在/etc/profile文件中追加这两句代码如下图
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.6
export PATH=$ZOOKEEPER_HOME/bin:$PATH
# 3.使环境变量生效,如下图:
source /etc/profile
配置好环境变量如果直接启动zookeeper会出错
zookeeper启动使用的默认的配置文件是zookeeper的安装目录下的conf目录下的zoo.cfg文件,因此如果启动zookeeper的时候,系统找不到zoo.cfg配置文件,会出错,如下图:
在zookeeper安装目录下的conf目录中生成zoo.cfg配置文件
zookeeper的配置文件默认是它的安装目录下的conf目录下的zoo_sample.cfg文件,如下图:
但在启动zookeeper安装目录下的bin目录下的zkServer.sh的时候,默认会寻找zookeeper安装目录下的conf目录下的名字是zoo.cfg的配置文件,如果找不到此配置文件就会出错,因此我们需要把zoo_sample.cfg复制一份,并且复制的这一份文件的名字必须是zoo.cfg,这样才能启动zkServer.sh成功,复制zoo.cfg成功后,如下图:
启动zookeeper
若conf目录下存在zoo.cfg配置文件,启动zookeeper的时候,可以成功启动,如下图:
zkServer.sh的其它命令
Zookeeper搭建集群环境
解压三份zookeeper的安装目录
zookeeper搭建集群环境,如果在公司,需要用三台云服务器,但测试的时候只有一台云服务器,所以需要在一台云服务器上解压三份zookeeper.tar.gz,以此来模拟三个云服务器,如下图:
分别创建存放zk数据信息的目录data和存放zk日志的目录logs
解压生成zookeeper1,zookeeper2,zookeeper3之后,分别在这三个文件夹里面创建data目录和logs目录,其中data目录是用来存放zk的一些数据信息的,比方说myid文件,而logs目录是用来存放zk的日志文件的,比方说zookeeper.out文件,如下图:
在每个zk安装目录的data目录下写myid文件
生成data目录之后,你需要在这个目录里面写一个myid文件,zookeeper1安装目录的data文件夹下的myid文件里面填写的内容是1,其它两个zk安装目录对应的myid文件里面填写的内容分别是2,3,如下图:
指明日志文件zookeeper.out的生成位置为logs目录
怎样指明日志文件zookeeper.out的输出位置呢?如下图:
复制zoo_sample.cfg,得到名字是zoo.cfg的配置文件
mv zoo_sample.cfg zoo.cfg:复制一份zoo_sample.cfg文件并且命名为zoo.cfg
每一个zk安装目录的conf文件夹下,都需要一个名字是zoo.cfg的配置文件,但是默认情况下只有名字是zoo_sample.cfg的配置文件,因此需要把这份文件复制一份,如下图:
zoo.cfg配置文件里面需要配置的内容,以及每个部分的功能
zoo.cfg下面默认有六个属性,他们分别是:1.tickTime,2.initLimit,3.syncLimit,4.dataDir,5.clientPort,6.dataLogDir
下面我们来对这六个属性做详细的分析
1.tickTime:通信心跳时间,单位毫秒
tick翻译成中文的话就是滴答滴答的意思,连起来就是滴答滴答的时间,寓意心跳间隔,单位是毫秒,系统默认是2000毫秒,也就是间隔两秒心跳一次。
tickTime的意义:客户端与服务器或者服务器与服务器之间维持心跳,也就是每个tickTime时间就会发送一次心跳。通过心跳不仅能够用来监听机器的工作状态,还可以通过心跳来控制Flower跟Leader的通信时间,默认情况下FL的会话时常是心跳间隔的两倍。
2.initLimit
集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
3.syncLimit
集群中flower服务器(F)跟leader(L)服务器之间的请求和答应最多能容忍的心跳数。
4.dataDir
该属性对应的目录是用来存放myid信息跟一些版本,日志,跟服务器唯一的ID信息等。
5.clientPort
zookeeper默认的端口号是2181,客户端会连接这个端口,zookeeper可以通过这个端口接收来自客户端发送的请求
6.dataLogDir
该属性对应的目录是用来存放zk对应的日志文件的,如zookeeper.out日志文件
集群搭建的时候,zoo.cfg配置文件中都需要写些什么东西呢?让我们一起看一下,如下图:
指定环境变量,开启特定的zk,踩坑Error contacting service. It is probably not running.
怎样开启zookeeper2服务呢?有三个zk安装目录,那么问题来了,你到底要把环境变量的值设置成哪个安装目录呢?答案是,你想开启谁,就把环境变量设置成谁,如下图:
如果想要开启zookeeper3服务,那么环境变量就要设置为export ZOOKEEPER_HOME=/opt/zookeeper3,接着去zookeeper3对应的bin目录下执行zkServer.sh start命令,这样就可以开启zookeeper3服务了。
这里我想要提示一下,开启不同的zk服务之前,只进入对应zk的bin目录下执行zkServer.sh start命令是不行的,这样的话,无论你在哪个zk的bin目录下,你最后打开的都是环境变量对应的zk,问题如下图:
说了这么多,咱们来实际操作一下,比如你想要开启zookeeper1服务,要怎么开启呢?首先需要把zookeeper1安装目录的位置设置成环境变量,如下图:
接着要执行source /etc/profile命令让环境环境变量的配置文件生效;
最后进入zookeeper1目录对应的bin目录下,执行zkServer.sh start命令,开启zookeeper1,如下图:
接下来,开启zookeeper2,如下图:
最后开启zookeeper3,如下图:
查看zookeeper1,zookeeper2,zookeeper3的状态
成功启动zookeeper1,zookeeper2,zookeeper3之后,让我们看一下它三个的状态,如下图: