ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Zookeeper(二):环境搭建和Shell使用

2020-04-21 23:56:32  阅读:242  来源: 互联网

标签:node Shell zk zook Zookeeper CONNECTED path root 搭建


环境搭建

  • Zookeeper的安装依赖JDK1.7以上环境

  • 使用版本:3.6
  • 部署计划:

node-1部署1个;node-2部署2个

node-1

#创建ins目录,上传到该目录
[root@node-1 usr]# mkdir ins
#创建zook目录,
[root@node-1 usr]# mkdir zook
#解压到zook目录
[root@node-1 ins]# tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz -C /usr/zook/
#定位到zook目录后,修改文件名
[root@node-1 zook]# mv apache-zookeeper-3.6.0-bin/  zk-standalone-model
[root@node-1 zook]# ls
zk-standalone-model
#创建软链接
[root@node-1 zook]# ln -s zk-standalone-model zookeeper3.6
#进入zookeeper根目录的conf文件夹
[root@node-1 zookeeper3.6]# cd conf/
[root@node-1 conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
#把默认配置文件修改为配置文件--启用默认配置
[root@node-1 conf]# mv zoo_sample.cfg zoo.cfg
#修改配置文件
[root@node-1 zook]# vim ./zookeeper3.6/conf/zoo.cfg
​
#修改结果:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
#备份和日志路径
dataDir=/usr/zook/zookeeper3.6/zk/data1
dataLogDir=/usr/zook/zookeeper3.6/zk/log1
# the port at which the clients will connect
clientPort=2182
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
server.1=node-1:2287:3387
server.2=node-2:2288:3388
server.3=node-2:2289:3389
​
#创建备份目录
[root@node-1 zookeeper3.6]# mkdir zk
[root@node-1 zookeeper3.6]# cd zk
[root@node-1 zk]# mkdir data1
[root@node-1 zk]# mkdir log1
#在data文件夹中增加myid文件
#myid写服务器名称,即zoo.cf中服务器server.后面的名称
[root@node-1 zk]# echo 1 > data1/myid
​
​
​
#添加环境变量
## zookeeper
export ZOOKEEPER_HOME=/usr/zook/zookeeper3.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin

 


node-2

#创建ins目录,上传到该目录
[root@node-1 usr]# mkdir ins
#创建zook目录,
[root@node-1 usr]# mkdir zook
#解压到zook目录
[root@node-1 ins]# tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz -C /usr/zook/
#定位到zook目录后,修改文件名
[root@node-2 zook]# mv apache-zookeeper-3.6.0-bin/  zk-pseudo-distributed
#创建软链接
[root@node-1 zook]# ln -s zk-pseudo-distributed zookeeper3.6
#进入zookeeper根目录的conf文件夹
[root@node-2 zookeeper3.6]# cd conf
#把默认配置文件修改为zoo2配置文件
[root@node-2 conf]# cp zoo_sample.cfg zoo2.cfg
​
#修改配置文件
[root@node-2 conf]# vim zoo2.cfg
​
#修改结果:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
#备份和日志路径
dataDir=/usr/zook/zookeeper3.6/zk/data2
dataLogDir=/usr/zook/zookeeper3.6/zk/log2
# the port at which the clients will connect
clientPort=2182
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
server.1=node-1:2287:3387
server.2=node-2:2288:3388
server.3=node-2:2289:3389
​
​
​
#复制为zoo3
[root@node-2 conf]# cp zoo2.cfg zoo3.cfg
#修改zoo3文件,只需要修改以下内容
[root@node-2 conf]# vim zoo3.cfg
dataDir=/usr/zook/zookeeper3.6/zk/data3
dataLogDir=/usr/zook/zookeeper3.6/zk/log3
# the port at which the clients will connect
clientPort=2183
​
#创建zookeeper备份文件目录
[root@node-2 zookeeper3.6]# mkdir zk
[root@node-2 zookeeper3.6]# cd zk/
[root@node-2 zk]# mkdir data2
[root@node-2 zk]# mkdir data3
[root@node-2 zk]# mkdir log2
[root@node-2 zk]# mkdir log3
#在data文件夹中增加myid文件
#myid写服务器名称,即zoo2.cf中服务器server.后面的名称
[root@node-2 zk]# echo 2 > data2/myid
[root@node-2 zk]# cat data2/myid
2
[root@node-2 zk]# echo 3 > data3/myid
[root@node-2 zk]# cat data3/myid
3
​
#添加环境变量
## zookeeper
export ZOOKEEPER_HOME=/usr/zook/zookeeper3.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin
​
#生效环境变量即可

 


测试

node-1
#启动zookeeper
[root@node-1 zk]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/zook/zookeeper3.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
#查看进程
[root@node-1 zk]# jps
#QuorumPeerMain就是Zookeeper的进程
79719 QuorumPeerMain
79734 Jps
1656 TFAMain

 

node-2

[root@node-2 conf]# zkServer.sh start zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /usr/zook/zookeeper3.6/bin/../conf/zoo2.cfg
Starting zookeeper ... STARTED
[root@node-2 conf]# zkServer.sh start zoo3.cfg
ZooKeeper JMX enabled by default
Using config: /usr/zook/zookeeper3.6/bin/../conf/zoo3.cfg
Starting zookeeper ... STARTED
[root@node-2 conf]# jps
79797 QuorumPeerMain
1668 TFAMain
79819 Jps
79759 QuorumPeerMain



#该命令可以查看zookeeper启动状态,注意一定要全部启动以后再查看,会有个选举的行为。
[root@node-1 conf]# zkServer.sh status zoo.cfg
ZooKeeper JMX enabled by default
Using config: /usr/zook/zookeeper3.6/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
[root@node-2 conf]# zkServer.sh status zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /usr/zook/zookeeper3.6/bin/../conf/zoo2.cfg
Client port found: 2182. Client address: localhost.
Mode: follower
[root@node-2 conf]# zkServer.sh status zoo3.cfg
ZooKeeper JMX enabled by default
Using config: /usr/zook/zookeeper3.6/bin/../conf/zoo3.cfg
Client port found: 2183. Client address: localhost.
Mode: follower


#Zookeeper停止进程
[root@node-1 bin]# ./zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /usr/zook/zookeeper3.6/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

 


配置文件参数说明

# zk中的基本时间单元(以毫秒为单位),很多时间参数都会参考该值
tickTime=2000
# 集群初始化时候,机器初始化时间过期值(tickTime的倍数)
initLimit=10
# 服务器和客户端之间请求和应答的时间间隔(tickTime的倍数)
syncLimit=5
#zk的数据保存目录,以及myid和pid的保存目录。默认为/tmp/zookeeper,一般都需要修改
dataDir=/usr/zook/zookeeper3.6/zk/data2
#zk操作日志保存目录,默认就是dataDir,一般设置为不一样的。
dataLogDir=/usr/zook/zookeeper3.6/zk/log2
# 客户端和zk集群交互的端口号,默认为2181
clientPort=2182
# 每个客户端IP的最大连接数,默认不限制(不设置或者设置为0)。当设置后,会限制单个客户端(IP)的最大并发连接数。
#maxClientCnxns=10
# 最小会话过期时间,默认为2*tickTime。
#minSessionTimeout=60
#最大会话过期时间,默认为20*tickTime。会话过期时间是在创建客户端连接的时候指定的。
#maxSessionTimeout
#server.A=B:C:D; A是一个数字,表示是第几号服务器,配置在dataDir文件夹中的myid文件中;B是对应服务器的IP地址;C是服务器与集群中的leader交换信息的端口;D是用来执行leader选举时服务器的通信端口。
server.1=node-1:2287:3387
server.2=node-2:2288:3388
server.3=node-2:2289:3389

 

Zookeeper Shell命令

Zookeeper的命令主要由bin目录下的zkServer.sh(zkServer.cmd)和zkCli.sh(zkCli.cmd)构成.

  • zkServer命令是进行集群管理/zk服务管理.

    • 集群zk服务的启动、停止、状态查看

  • zkCli命令是zookeeper提供的shell客户端。

    • 进行zookeeper客户端操作,进行诸如创建、删除、查看等操作。

 

zkServer命令

  • 命令格式为: zkServer.sh command [parameters] [config]

    • command支持start, start-foreground, stop, status, restart, upgrade和print-cmd。最常用命令是start, stop和status这三个命令

    • parameters是给定config额外的信息,该值给定的信息会覆盖config文件中定义的配置信息,一般不给定,直接在config里配置好就可以了。比如zkServer.sh start -server ip:port [config]

    • config是给定启动该命令对应的cfg配置文件的路径地址信息,默认为$ZOOKEEPER_HOME/conf/zoo.cfg。

zkCli命令

  • 命令格式为: zkCli.sh [parameters]

    • parameters指定需要连接的zk服务器相关信息,包括服务器ip地址、端口号、会话过期时间、是否只读等信息。列如:zkCli.sh -server ip:port -timeout xxx -r。

    • 直接输入zkCli.sh,不携带任何参数即可连接上zk服务器(本地),当看到下列结果的时候表示连接成功:

WATCHER::
​
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
​

 

也可以指定服务器连接:

[root@node-1 conf]# zkCli.sh -server node-2:2182
Connecting to node-2:2182
#......
WATCHER::
​
WatchedEvent state:SyncConnected type:None path:null
#这样就可以连接上客户端了
[zk: node-2:2182(CONNECTED) 0]

 


zkCli shell命令

  • 进入zkCli shell以后

1.help命令

获取帮助文档,常用命令注释见下文

[zk: node-2:2182(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
        addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
        addauth scheme auth
        #关闭当前连接。
        close
        config [-c] [-w] [-s]
        #修改连接节点
        connect host:port
        #创建znode
        create [-s] [-e] [-c] [-t ttl] path [data] [acl]
        #删除节点(要先删除子节点)
        delete [-v version] path
        deleteall path [-b batch size]
        delquota [-n|-b] path
        # 获取节点信息
        get [-s] [-w] path
        getAcl [-s] path
        getAllChildrenNumber path
        getEphemerals path
        #显示执行了多少命令,并给出每个历史命令的编号。redo命令可以根据历史命令的编号重新调用这些命令
        history
        listquota path
        ls [-s] [-w] [-R] path
        #是否打印信息
        printwatches on|off
        #退出ZooKeeper的交互式命令行。
        quit
        reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
        redo cmdno
        removewatches path [-c|-d|-a] [-l]
        set [-s] [-v version] path data
        setAcl [-s] [-v version] [-R] path acl
        setquota -n|-b val path
        # 获取节点状态信息
        stat [-w] path
        sync path
        version

 


2.connect命令

修改连接节点

[zk: node-2:2182(CONNECTED) 1] connect node-2:2183
WATCHER::
​
WatchedEvent state:SyncConnected type:None path:null
​
[zk: node-2:2183(CONNECTED) 2]
​

 

3.ls

显示path下的znode名称列表。

  • 命令格式为: ls path [watch] 或者 ls [-w] path

  • watch 如果为true,那么表示进行watch监控,会对下一次得添加和删除操作做一个监控并输出结果(见下create命令的测试)。

  • 和Hadoop一样,没有cd操作,只能使用绝对路径查看

[zk: node-2:2183(CONNECTED) 2] ls /
[zookeeper]
[zk: node-2:2183(CONNECTED) 3] ls /zookeeper
[config, quota]
[zk: node-2:2183(CONNECTED) 4] ls /zookeeper/quota
[]
#'ls path [watch]'旧版本使用,笔者使用3.6,已经修改为ls [-w] path
[zk: node-2:2183(CONNECTED) 8] ls / true
'ls path [watch]' has been deprecated. Please use 'ls [-w] path' instead.
[test, zookeeper]
[zk: node-2:2183(CONNECTED) 9] ls -w /
[test, zookeeper]
​

 

4.create

在zk服务器中创建znode,默认创建为永久节点。

  • 命令格式为:create [-s] [-e] path data acl

  • 其中-s创建一个顺序节点,-e创建一个临时节点。

  • path节点的路径,data节点数据(字符串),acl节点的权限列表(可不给定)。

#开启该路径的监控
[zk: node-2:2183(CONNECTED) 9] ls -w /
[test, zookeeper]
#创建文件夹t,有watch结果
[zk: node-2:2183(CONNECTED) 10] create /t ""
​
WATCHER::
​
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/
Created /t
#创建文件夹tt,没有watch结果
[zk: node-2:2183(CONNECTED) 11] create /tt ""
Created /tt
​

 

创建顺序节点
  • 顺序节点其实就是zk在创建节点时,自动在给定的节点名称后面加一个流水号

#当前节点已经有tt
[zk: node-2:2183(CONNECTED) 12] ls /
[t, test, tt, zookeeper]
#再创建tt是无法执行的
[zk: node-2:2183(CONNECTED) 14] create /tt ""
Node already exists: /tt
#这时候可以创建顺序节点
[zk: node-2:2183(CONNECTED) 15] create -s /tt ""
Created /tt0000000003
[zk: node-2:2183(CONNECTED) 17] create -s /tt ""
Created /tt0000000004
[zk: node-2:2183(CONNECTED) 18] create -s /tt ""
Created /tt0000000005
#zk就会创建节点并自动添加流水号
[zk: node-2:2183(CONNECTED) 19] ls /
[t, test, tt, tt0000000003, tt0000000004, tt0000000005, zookeeper]

 

创建临时节点
#创建临时节点
[zk: node-2:2183(CONNECTED) 20] create -e /testtmp "tmp"
Created /testtmp
#创建顺序临时节点
[zk: node-2:2183(CONNECTED) 22] create -s -e /testtmp "tmp"
Created /testtmp0000000007
[zk: node-2:2183(CONNECTED) 24] ls /
[t, test, testtmp, testtmp0000000007, tt, tt0000000003, tt0000000004, tt0000000005, zookeeper]
#临时节点无法创建子节点
[zk: node-2:2183(CONNECTED) 25] create -e /testtmp/t
Ephemerals cannot have children: /testtmp/t
​
#重新登录后临时节点就没了
[zk: node-2:2182(CONNECTED) 0] ls /
[t, test, tt, tt0000000003, tt0000000004, tt0000000005, zookeeper]
​

 

5.get/set

获取/设置节点得数据

  • get命令是获取节点数据,set是设置节点数据。

  • get命令格式为: get [-s] [-w] path

    • -w 表示监控节点的删除和更新操作

    • -s 表示显示所有状态信息

  • set命令格式为: set path data

    • data数据为字符串类型。

get
[zk: node-2:2182(CONNECTED) 0] get /test
​
[zk: node-2:2182(CONNECTED) 1] get -s /test
​
cZxid = 0x400000006
ctime = Mon Apr 13 20:12:00 PDT 2020
mZxid = 0x400000006
mtime = Mon Apr 13 20:12:00 PDT 2020
pZxid = 0x400000006
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 0
​

 

 

 

set
[zk: node-2:2182(CONNECTED) 2] set /test "new value"
[zk: node-2:2182(CONNECTED) 3] get /test
new value

 

6.delete

删除节点

#删除空节点
[zk: node-2:2182(CONNECTED) 11] delete /test
Node not empty: /test
#删除非空节点
[zk: node-2:2182(CONNECTED) 12] deleteall /test

 

问题解决

1.8080端口被占用

zookeeper最近的版本中有个内嵌的管理控制台是通过jetty启动,也会占用8080 端口。

修改在zoo.cfg中修改AdminServer的端口:

admin.serverPort=``8888

标签:node,Shell,zk,zook,Zookeeper,CONNECTED,path,root,搭建
来源: https://www.cnblogs.com/renzhongpei/p/12748970.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有