centos安装zookeeper集群 并设置开机启动

centos安装zookeeper集群 并设置开机启动

1.1 集群规划

在node21、node22和ode23三个节点上部署Zookeeper,三个节点都已安装jdk。

IP 节点名称 Zookeeper JDK
192.168.100.21 node21 Zookeeper JDK
192.168.100.22 node22 Zookeeper JDK
192.168.100.23 node23 Zookeeper JDk

1.2 解压安装

(1)解压zookeeper安装包到/opt/module/目录下

[[email protected] software]$ tar -zxvf zookeeper-3.4.12.tar.gz -C /opt/module/

(2)在/opt/module/zookeeper-3.4.12/这个目录下创建Data

[[email protected] zookeeper-3.4.12]# sudo mkdir  Data

(3)重命名/opt/module/zookeeper-3.4.12/conf这个目录下的zoo_sample.cfg为zoo.cfg

[[email protected] conf]# mv zoo_sample.cfg zoo.cfg

1.3 配置zoo.cfg文件

具体配置,修改dateDir,添加日志存放目录

dataDir=/opt/module/zookeeper-3.4.12/Data
dataLogDir=/opt/module/zookeeper-3.4.12/logs

末尾增加如下配置

server.1=node21:2888:3888
server.2=node22:2888:3888
server.3=node23:2888:3888

1.4 集群配置

(1)在/opt/module/zookeeper-3.4.12/Data目录下创建一个myid的文件

[[email protected] Data]# sudo touch myid

(2)编辑myid文件, 在文件中添加与server对应的编号:如 1   

[[email protected] Data]# vi myid

(3)拷贝配置好的zookeeper到其他机器上

[[email protected] module]# scp -r zookeeper-3.4.12/ [email protected]:/opt/module/
[[email protected] module]# scp -r zookeeper-3.4.12/ [email protected]:/opt/module/

并分别修改node22,node23中myid文件中内容为2、3

[[email protected] Data]# echo 2 > myid
[[email protected] Data]# echo 3 > myid

1.5 启动集群

(1)分别启动zookeeper

[[email protected] zookeeper-3.4.12]# bin/zkServer.sh start
[[email protected] zookeeper-3.4.12]# bin/zkServer.sh start
[[email protected] zookeeper-3.4.12]# bin/zkServer.sh start

(2)查看状态

centos安装zookeeper集群 并设置开机启动
[[email protected] zookeeper-3.4.12]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower
[[email protected] zookeeper-3.4.12]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower
[[email protected] zookeeper-3.4.12]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: leader
centos安装zookeeper集群 并设置开机启动

(3)停止zookeeper

[[email protected] zookeeper-3.4.12]$ bin/zkServer.sh stop

1.6 配置环境变量

[[email protected] zookeeper-3.4.12]$ sudo vi /etc/profile 
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.12
export PATH=$PATH:$ZOOKEEPER_HOME/bin

1.7zoo.cfg配置参数解读

Server.A=B:C:D。

A是一个数字,表示这个是第几号服务器;

B是这个服务器的ip地址;

C是这个服务器与集群中的Leader服务器交换信息的端口;

D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。

1)tickTime=2000:通信心跳数

tickTime:通信心跳数,Zookeeper服务器心跳时间,单位毫秒

Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。

它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)

2)initLimit=10:LF初始通信时限

集群中的follower跟随者服务器(F)与leader领导者服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。

投票选举新leader的初始化时间

Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。

Leader允许F在initLimit时间内完成这个工作。

3)syncLimit=5:LF同步通信时限

集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,

Leader认为Follwer死掉,从服务器列表中删除Follwer。

在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。

如果L发出心跳包在syncLimit之后,还没有从F那收到响应,那么就认为这个F已经不在线了。

4)dataDir:数据文件目录+数据持久化路径

保存内存数据库快照信息的位置,如果没有其他说明,更新的事务日志也保存到数据库。

 5)clientPort=2181:客户端连接端口

监听客户端连接的端口

二. 客户端命令行操作

1)启动客户端

[[email protected] zookeeper-3.4.12]$ zkCli.sh 

2)显示所有操作命令

centos安装zookeeper集群 并设置开机启动
[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
    stat path [watch]
    set path data [version]
    ls path [watch]
    delquota [-n|-b] path
    ls2 path [watch]
    setAcl path acl
    setquota -n|-b val path
    history 
    redo cmdno
    printwatches on|off
    delete path [version]
    sync path
    listquota path
    rmr path
    get path [watch]
    create [-s] [-e] path data acl
    addauth scheme auth
    quit 
    getAcl path
    close 
    connect host:port
centos安装zookeeper集群 并设置开机启动

3)查看当前znode中所包含的内容

[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]

4)查看当前节点数据并能看到更新次数等数据

centos安装zookeeper集群 并设置开机启动
[zk: localhost:2181(CONNECTED) 2] ls2 /
[zookeeper]
cZxid = 0x0
ctime = Wed Dec 31 19:00:00 EST 1969
mZxid = 0x0
mtime = Wed Dec 31 19:00:00 EST 1969
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
centos安装zookeeper集群 并设置开机启动

5)创建普通节点

[zk: localhost:2181(CONNECTED) 3] create /opt "aa"
Created /opt
[zk: localhost:2181(CONNECTED) 4] create /opt/module "bb"
Created /opt/module

6)获得节点的值

centos安装zookeeper集群 并设置开机启动
[zk: localhost:2181(CONNECTED) 5] get /opt
aa
cZxid = 0x4100000004
ctime = Wed Jul 25 07:48:55 EDT 2018
mZxid = 0x4100000004
mtime = Wed Jul 25 07:48:55 EDT 2018
pZxid = 0x4100000005
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 2
numChildren = 1
[zk: localhost:2181(CONNECTED) 6] get /opt/module
bb
cZxid = 0x4100000005
ctime = Wed Jul 25 07:51:21 EDT 2018
mZxid = 0x4100000005
mtime = Wed Jul 25 07:51:21 EDT 2018
pZxid = 0x4100000005
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0
centos安装zookeeper集群 并设置开机启动

7)创建短暂节点

[zk: localhost:2181(CONNECTED) 7] create -e /app 8888           
Created /app
(1)在当前客户端是能查看到的
[zk: localhost:2181(CONNECTED) 8] ls /
[app, opt, zookeeper]
(2)退出当前客户端然后再重启启动客户端
[zk: localhost:2181(CONNECTED) 9] quit
[[email protected] zookeeper-3.4.12]$ bin/zkCli.sh
(3)再次查看根目录下短暂节点已经删除
[zk: localhost:2181(CONNECTED) 0] ls /
[opt, zookeeper]

8)创建带序号的节点

(1)先创建一个普通的根节点app
[zk: localhost:2181(CONNECTED) 1] create /app "app"
create /app "app"
(2)创建带序号的节点
[zk: localhost:2181(CONNECTED) 2] create -s /app/aa 888
Created /app/aa0000000000
[zk: localhost:2181(CONNECTED) 3] create -s /app/bb 888
Created /app/bb0000000001
[zk: localhost:2181(CONNECTED) 4] create -s /app/cc 888
Created /app/cc0000000002
如果原节点下有1个节点,则再排序时从1开始,以此类推。
[zk: localhost:2181(CONNECTED) 5] create -s /opt/aa 888
Created /opt/aa0000000001

9)修改节点数据值

centos安装zookeeper集群 并设置开机启动
[zk: localhost:2181(CONNECTED) 6] set /opt 999
cZxid = 0x4100000004
ctime = Wed Jul 25 07:48:55 EDT 2018
mZxid = 0x410000000e
mtime = Wed Jul 25 08:14:18 EDT 2018
pZxid = 0x410000000d
cversion = 2
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 2
centos安装zookeeper集群 并设置开机启动

10)节点的值变化监听

(1)在node22主机上注册监听/opt节点数据变化

[[email protected] ~]$ zkCli.sh 
[zk: localhost:2181(CONNECTED) 0] get /opt watch

(2)在node21主机上修改/opt节点的数据

[zk: localhost:2181(CONNECTED) 7] set /opt 777

(3)观察node22主机收到数据变化的监听

[zk: localhost:2181(CONNECTED) 1] 
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/opt

11)节点的子节点变化监听(路径变化)

(1)在node22主机上注册监听/opt节点的子节点变化

[zk: localhost:2181(CONNECTED) 2] ls /opt watch
[aa0000000001, module]

(2)在node21主机/opt节点上创建子节点

[zk: localhost:2181(CONNECTED) 8] create /opt/bb 666
Created /opt/bb

(3)观察node22主机收到子节点变化的监听

[zk: localhost:2181(CONNECTED) 3] 
WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/opt

12)删除节点

[zk: localhost:2181(CONNECTED) 9] delete /opt/bb

13)递归删除节点

[zk: localhost:2181(CONNECTED) 10] rmr /opt

14)查看节点状态

centos安装zookeeper集群 并设置开机启动
[zk: localhost:2181(CONNECTED) 14] stat /app
cZxid = 0x4100000009
ctime = Wed Jul 25 08:09:56 EDT 2018
mZxid = 0x4100000009
mtime = Wed Jul 25 08:09:56 EDT 2018
pZxid = 0x410000000c
cversion = 3
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 3
centos安装zookeeper集群 并设置开机启动

15)退出客户端

[zk: localhost:2181(CONNECTED) 17] quit 

 

1下载Zookeeper

2安装启动测试

       2.1上载压缩文件并解压

      2.2新建 zookeeper配置文件

      2.3安装JDK

      2.4启动zookeeper

      2.5查看zookeeper的状态

3将ZooKeeper设置为开机启动(可选)

      3.1在init.d目录下新建脚本文件

                 3.1.1文件内容的第一种方案(推荐)

                 3.1.2文件内容的第二种方案

                 3.1.3其他说明

      3.2执行一系列命令

      3.3执行测试看是否开机启动

4报错及解决

      4.1service zookeeper does not support chkconfig

      4.2 Error contacting service. It is probably not running

5本博文相关的下载

 

 关键字:CentOS7  zookeeper3.4.10   java

1下载Zookeeper

      地址:http://mirror.bit.edu.cn/apache/zookeeper/


centos安装zookeeper集群 并设置开机启动

2安装启动测试

          说明:(以下操作都是使员管理员账号进行的)

2.1上载压缩文件并解压

        这里使用的是CentOS7的操作系统。在opt目录下新建一个名为zookeeper的目录,将下载得到的zookeeper-3.4.10.tar.gz文件上载上去。

如图:

    centos安装zookeeper集群 并设置开机启动

进入到该目录下,命令是:

        cd    /opt/zookeeper

执行解压命令:

        tar    -zxvf    zookeeper-3.4.10.tar.gz

如图:

      centos安装zookeeper集群 并设置开机启动

2.2新建zookeeper配置文件

         Zookeeper需要一个名为zoo.cfg的配置文件,我们解压后,得到的是官方的示例文件,名为zoo_sample.cfg,这个文件在zookeeper根目录的conf子目录下。如果我们想使用默认配置,直接将该文件复制并且改名即可。里面可以配置端口号,是否启用集群等等,这里不展开,直接执行cp复制重命名。

命令是:

     cp    /opt/zookeeper/zookeeper-3.4.10/conf/zoo_sample.cfg        /opt/zookeeper/zookeeper-3.4.10/conf/zoo.cfg

如图:

     centos安装zookeeper集群 并设置开机启动

      上面的命令生成了zoo.cfg

      如图:

 centos安装zookeeper集群 并设置开机启动

         说明:zoo.cfg里可以配置东西,如果希望搭建zookeeper集群,请看该博文:

2.3安装JDK

           在Linux上安装JDK都是一样的,虽然我们这里用的是CentOS7的操作系统,但是依然可以按照在Unbuntu上安装JDK的方法来安装,请参考该博文:

http://blog.****.net/pucao_cug/article/details/68948639

         说明:你可的JDK安装路径和ZooKeeper安装路径可以和我的不一样,但是如果你的路径和我一样的话,在本博文第三章节,将ZooKeeper设置为开机启动的相关配置中,你可以不用修改那些配置内容,直接复制使用。

2.4启动zookeeper

  进入到zookeeper的bin目录下,命令:

         cd    /opt/zookeeper/zookeeper-3.4.10/bin

执行zkServer.sh脚本进行启动,命令是:

        ./zkServer.sh   start

如图:

    centos安装zookeeper集群 并设置开机启动

2.5查看zookeeper的状态

     如果此时不在zookeeper的bin 目录下,先进入到该目录下:

          cd    /opt/zookeeper/zookeeper-3.4.10/bin

 

    执行命令查看zookeeper状态:

        ./zkServer.sh    status

如图:

    centos安装zookeeper集群 并设置开机启动

standalone 是单机模式。

3将ZooKeeper设置为开机启动(可选)

3.1在init.d目录下新建脚本文件

    进入到/etc/rc.d/init.d目录下,命令是:

          cd    /etc/rc.d/init.d

   新建一个名为zookeeper的文件,命令是:

         touch    zookeeper

如图:

      centos安装zookeeper集群 并设置开机启动

3.1.1文件内容的第一种方案(推荐)

           使用vim命令修改文件内容,文件内容的写法有很多,除了上面的第一种方案,用下面的这种也可以:

[plain] view plain copy
  1. #!/bin/bash  
  2. #chkconfig: 2345 10 90  
  3. #description: service zookeeper  
  4. export   JAVA_HOME=/opt/java/jdk1.8.0_121  
  5. export   ZOO_LOG_DIR=/opt/zookeeper/log  
  6. ZOOKEEPER_HOME=/opt/zookeeper/zookeeper-3.4.10  
  7. su    root    ${ZOOKEEPER_HOME}/bin/zkServer.sh      "$1"  


3.1.2文件内容的第二种方案

       使用vim命令修改文件内容,文件内容是:

[plain] view plain copy
  1. #!/bin/bash  
  2. #chkconfig: 2345 10 90  
  3. #description: service zookeeper  
  4. export    JAVA_HOME=/opt/java/jdk1.8.0_121  
  5. export     ZOO_LOG_DIR=/opt/zookeeper/log  
  6. ZOOKEEPER_HOME=/opt/zookeeper/zookeeper-3.4.10  
  7. case  "$1"   in  
  8.           start)  su  root   ${ZOOKEEPER_HOME}/bin/zkServer.sh   start;;  
  9.           start-foreground)  su  root  ${ZOOKEEPER_HOME}/bin/zkServer.sh    start-foreground;;  
  10.           stop)  su  root   ${ZOOKEEPER_HOME}/bin/zkServer.sh   stop;;  
  11.           status)  su root  ${ZOOKEEPER_HOME}/bin/zkServer.sh    status;;  
  12.           restart)  su root   ${ZOOKEEPER_HOME}/bin/zkServer.sh   restart;;  
  13.           upgrade)su root   ${ZOOKEEPER_HOME}/bin/zkServer.sh   upgrade;;  
  14.           print-cmd)su root   ${ZOOKEEPER_HOME}/bin/zkServer.sh   print-cmd;;  
  15.           *)  echo  "requirestart|start-foreground|stop|status|restart|print-cmd";;  
  16. esac  



3.1.3 其他说明

          注意1:新建文件的命令是touch,编辑文件的命令用vivim都行。如果不会使用vivim命令,直接在本地把文件编辑好,然后用远程工具上载上去都行,不过需要注意的是如果本地用的windows系统,需要把文件转为UNIX格式。转换工具有很多,例如使用Notepad++

         如图:

  centos安装zookeeper集群 并设置开机启动

         注意2:两个方案中的文件头部#注释的部分不能少,而且文件中诸如JDK路径,zookeeper路径都需要修改为你自己的。

3.2 执行一系列命令

  为新建的/etc/rc.d/init.d/zookeeper文件添加可执行权限,命令是:

       chmod  +x  /etc/rc.d/init.d/zookeeper

 把zookeeper这个脚本添加到开机启动项里面,命令是:

       chkconfig  --add   zookeeper

如图:

     centos安装zookeeper集群 并设置开机启动

  如果想看看是否添加成功,命令是:

       chkconfig  --list

如图:

      centos安装zookeeper集群 并设置开机启动

3.3执行测试看是否开机启动

  使用命令重启机器,命令是:

      reboot

方法一

查看zookeeper的状态

 重启机器,然后不手动启动zookeeper的情况下,执行命令:

       service  zookeeper   status

 如图:

   centos安装zookeeper集群 并设置开机启动

方法二

   查看2181端口是否启用,执行命令:

   lsof  -i:2181

如图:

     centos安装zookeeper集群 并设置开机启动

方法三

   查看网络状态,执行命令:

netstat   -lntup

如图:

     centos安装zookeeper集群 并设置开机启动

 

4报错及解决

4.1 service zookeeper does not support chkconfig

        执行chkconfig  --add  zookeeper报错

        servicezookeeper does not support chkconfig

        问题原因和解决:

         /etc/rc.d/init.d/ zookeeper脚本中头部没有添加下面这几句话(description可以随便写):

[plain] view plain copy
  1. #!/bin/bash  
  2. #chkconfig:2345 10 90  
  3. #description:service zookeeper  


4.2Error contacting service. It is probably not running

       执行service  zookeeper  status报错

     JMX enabled by default

     Usingconfig: /opt/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg

     Errorcontacting service. It is probably not running.

 

        问题原因和解决:

            /etc/rc.d/init.d/ zookeeper没有配置对,请看3.1.1和3.1.2的配置,里面必须要有export  JAVA_HOME这一句话,后面的路径是你自己的JDK安装路径。

           至于export    ZOO_LOG_DIR=/opt/zookeeper/log这一句的话可有可无,意思是指定zookeeper的启动日志存放目录,如果该目录不存在,你必须手动创建一个。

5本博文相关的下载

        上面这些东西要么可以从网上下载到,或者可以从这里下载,包括配置文件。

下载地址是:http://download.****.net/detail/pucao_cug/9834762