zookeeper集群安装及命令行操作

集群规划

服务器IP地址节点名称备注
192.168.56.41hadoop001zookeeper版本3.4.10
192.168.56.42hadoop002操作系统centos7
192.168.56.43hadoop003

环境准备

1、配置/etc/hosts

192.168.56.41 hadoop001
192.168.56.42 hadoop002
192.168.56.43 hadoop003

2、关闭防火墙和selinux

$ systemctl stop firewalld && systemctl disable firewalld

$ setenforce  0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

3、安装jdk

oracle-jdk下载地址:https://www.oracle.com/java/technologies/javase-downloads.html

$ tar -zxvf /vagrant/jdk-8u251-linux-x64.tar.gz -C /usr/local/

$ cat >> /etc/profile <<EOF
export JAVA_HOME=/usr/local/jdk1.8.0_251
export JRE_HOME=${JAVA_HOME}/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
EOF

$ source /etc/profile

zookeeper分布式安装

zookeeper官网:https://zookeeper.apache.org/

1、下载zookeeper

$ wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

2、准备安装目录

mkdir /opt/zookeeper
mkdir /opt/zookeeper/zkdata   # 数据目录(数据目录和日志目录生产环境建议放在非系统盘及性能较好磁盘)
mkdir /opt/zookeeper/zklogs   # 日志目录

3、解压安装

$ tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/zookeeper/

# 分发zookeeper目录到其他节点(hadooop002,hadoop003)
$ cd /opt
$ xsync zookeeper

4、配置服务器编号

在数据目录下创建myid文件,在文件中添加对应的编号(每个节点不同)

# hadoop001
$ echo 1 > /opt/zookeeper/zkdata/myid

# hadoop002
$ echo 2 > /opt/zookeeper/zkdata/myid

# hadoop003
$ echo 3 > /opt/zookeeper/zkdata/myid

5、配置zook.cfg文件(该文件是zookeeper配置文件)

# 1. 重命名/opt/zookeeper/zookeeper-3.4.10/conf/目录下zoo_sample.cfg为zoo.cfg
$ cp zoo_sample.cfg zoo.cfg

# 2. 添加修改如下配置
$ vi zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/zkdata
dataLogDir=/opt/zookeeper/zklogs
clientPort=2181
autopurge.snapRetainCount=128
autopurge.purgeInteval=24
server.1=hadoop001:2888:3888
server.2=hadoop002:2888:3888
server.3=hadoop003:2888:3888
    
# 3. 配置文件配置项说明
tickTime: zookeeper服务端和客户端通信时心跳的时间间隔,单位毫秒;也就是每tickTime毫秒就会发送一个心跳
initLimit: 集群中Follower和Leader之间初始连接时能最多容忍多少个心跳数;如果超过该数表示连接Leader失败
syncLimit: 集群中Leader和Follower之间的最大响应心跳数;如果超过该时间syncLimit*tickTime则Leader会            认为Follwer宕机。
dataDir: 快照文件的存储路径
dataLogDir: 事务日志存储路径,如果该参数没指定则默认存储在 dataDir 目录(建议指定不同目录)
clientPort: 客户端连接的端口
autopurge.snapRetainCount和autopurge.purgeInteval: 3.4.0之后新增参数,用于自动清理快照和日志;
          autopurge.snapRetainCount控制保留多少个最新的快照和日志文件(默认3个);                           autopurge.purgeInteval控制多长时间执行一次清理任务(单位小时,设置为0表示不清理)
server.x=[hostname]:nnnnn[:nnnnn]: 配置构成zookeeper集群的服务器;.x表示服务器编号(myid文件配置的);hostname配置服务器地址;之后两个nnnn表示端口号,第一个用于Follower与Leader之间通信,第二个用于Leader选举。

更多配置:https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_configuration

6、启动zookeeper

$ /opt/zookeeper/zookeeper-3.4.10/bin/zkServer.sh start

$ jps    # 查看进程
27909 QuorumPeerMain
27989 Jps

# 查看节点角色
$ /opt/zookeeper/zookeeper-3.4.10/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower

zkCli.sh命令行操作

1、 启动客户端

$ bin/zkCli.sh

2、查看所有操作命令

[zk: localhost:2181(CONNECTED) 0] help

3、查看当前znode中包含的信息

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

4、查看当前节点详细信息

[zk: localhost:2181(CONNECTED) 2] ls2 /
[zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

5、创建节点

用法:

create [-s] [-e] path data acl

-s:创建的是带序列号的节点,序列号用0填充节点路径。
-e:创建的是临时节点。
path:znode的路径,ZooKeeper中没有相对路径,所有路径都必须以'/'开头。
data:znode携带的数据。
acl:这个节点的ACL。

示例:

# 创建znode节点
[zk: localhost:2181(CONNECTED) 6] create /zktest zkdata001
# 创建子节点
[zk: localhost:2181(CONNECTED) 7] create /zktest/zkchild 001
# 创建临时节点(客户端退出后该节点即被删除)
[zk: localhost:2181(CONNECTED) 8] create -e /zktest/zkchild01 001
# 创建序列节点(会给znode自动加上序号)
[zk: localhost:2181(CONNECTED) 9] create -s /zktest/zkchild 111
Created /zktest/zkchild0000000003

6、查看节点数据和状态信息

[zk: localhost:2181(CONNECTED) 3] get /zktest/zkchild
001   # 节点数据
cZxid = 0x100000008
ctime = Thu Dec 10 14:25:43 CST 2020
mZxid = 0x100000008
mtime = Thu Dec 10 14:25:43 CST 2020
pZxid = 0x100000008
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

6、修改节点数据

[zk: localhost:2181(CONNECTED) 4] set /zktest/zkchild abc

7、监听节点数据的变化

# hadoop001节点上主从监听/zktest/zkchild数据变化
[zk: localhost:2181(CONNECTED) 0] get /zktest/zkchild watch
# 在hadoop002节点上修改/zktest/zkchild数据
[zk: localhost:2181(CONNECTED) 0] set /zktest/zkchild 123
# 观察hadoop001主机收到的数据变化的监听
[zk: localhost:2181(CONNECTED) 1] 
WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/zktest/zkchild

8、监听节点的子节点变化

# 在hadoop001节点监听/zktest节点的子节点变化
[zk: localhost:2181(CONNECTED) 1] ls /zktest watch
# 在hadoop002节点上为/zktest节点增加子节点
[zk: localhost:2181(CONNECTED) 1] create /zktest/node1 'node1'
# 观察hadoop001主机收到的节点变化的监听
[zk: localhost:2181(CONNECTED) 2] 
WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/zktest

9、删除节点

delete 删除节点;rmr 递归删除节点

[zk: localhost:2181(CONNECTED) 2] delete /zktest/zkchild
[zk: localhost:2181(CONNECTED) 3] rmr /zktest

10、查看节点状态

[zk: localhost:2181(CONNECTED) 6] stat /zookeeper
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

# 状态信息说明
1)czxid-创建节点的事务zxid
每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。
事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。
2)ctime - znode被创建的毫秒数(从1970年开始)
3)mzxid - znode最后更新的事务zxid
4)mtime - znode最后修改的毫秒数(从1970年开始)
5)pZxid-znode最后更新的子节点zxid
6)cversion - znode子节点变化号,znode子节点修改次数
7)dataversion - znode数据变化号
8)aclVersion - znode访问控制列表的变化号
9)ephemeralOwner- 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。
10)dataLength- znode的数据长度
11)numChildren - znode子节点数量
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值