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

1.1 集群规划

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

IP节点名称ZookeeperJDK
192.168.100.21node21ZookeeperJDK
192.168.100.22node22ZookeeperJDK
192.168.100.23node23ZookeeperJDk

1.2 解压安装

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

[admin@node21 software]$ tar -zxvf zookeeper-3.4.12.tar.gz -C /opt/module/

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

[admin@node21 zookeeper-3.4.12]# sudo mkdir  Data

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

[admin@node21 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的文件

[admin@node21 Data]# sudo touch myid

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

[admin@node21 Data]# vi myid

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

[admin@node21 module]# scp -r zookeeper-3.4.12/ admin@node22:/opt/module/
[admin@node21 module]# scp -r zookeeper-3.4.12/ admin@node23:/opt/module/

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

[admin@node22 Data]# echo 2 > myid
[admin@node23 Data]# echo 3 > myid

1.5 启动集群

(1)分别启动zookeeper

[admin@node21 zookeeper-3.4.12]# bin/zkServer.sh start
[admin@node22 zookeeper-3.4.12]# bin/zkServer.sh start
[admin@node23 zookeeper-3.4.12]# bin/zkServer.sh start

(2)查看状态

复制代码
[admin@node21 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
[admin@node22 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
[admin@node23 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
复制代码

(3)停止zookeeper

[admin@node21 zookeeper-3.4.12]$ bin/zkServer.sh stop

1.6 配置环境变量

[admin@node21 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)启动客户端

[admin@node21 zookeeper-3.4.12]$ zkCli.sh 

2)显示所有操作命令

复制代码
[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
复制代码

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

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

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

复制代码
[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
复制代码

5)创建普通节点

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

6)获得节点的值

复制代码
[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
复制代码

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
[root@node21 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)修改节点数据值

复制代码
[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
复制代码

10)节点的值变化监听

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

[admin@node22 ~]$ 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)查看节点状态

复制代码
[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
复制代码

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/



2安装启动测试

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

2.1上载压缩文件并解压

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

如图:

    

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

        cd    /opt/zookeeper

执行解压命令:

        tar    -zxvf    zookeeper-3.4.10.tar.gz

如图:

      

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

如图:

     

      上面的命令生成了zoo.cfg

      如图:

 

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

2.3安装JDK

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

http://blog.csdn.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

如图:

    

2.5查看zookeeper的状态

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

          cd    /opt/zookeeper/zookeeper-3.4.10/bin

 

    执行命令查看zookeeper状态:

        ./zkServer.sh    status

如图:

    

standalone 是单机模式。

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

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

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

          cd    /etc/rc.d/init.d

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

         touch    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,编辑文件的命令用vi和vim都行。如果不会使用vi和vim命令,直接在本地把文件编辑好,然后用远程工具上载上去都行,不过需要注意的是如果本地用的windows系统,需要把文件转为UNIX格式。转换工具有很多,例如使用Notepad++

         如图:

  

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

3.2 执行一系列命令

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

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

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

       chkconfig  --add   zookeeper

如图:

     

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

       chkconfig  --list

如图:

      

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

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

      reboot

方法一

查看zookeeper的状态

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

       service  zookeeper   status

 如图:

   

方法二

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

   lsof  -i:2181

如图:

     

方法三

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

netstat   -lntup

如图:

     

 

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.csdn.net/detail/pucao_cug/9834762

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值