zookeeper入门及进阶

入门

zk是一个分布式的协调服务框架.

特点

  • 分布式集群,一个leader,多个follower
  • 半数以上节点存活,就可正常服务
  • 每个server的数据一致
  • 每次数据更新要么成功,要么失败

数据模型

在这里插入图片描述

安装

1. 将zookeeper-3.4.10.tar.gz上传到/root中
2. 解压
   [root@mypc01 ~]# tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/local/
3. 更名zookeeper
   [root@mypc01 ~]# cd /usr/local/
   [root@mypc01 local]# mv zookeeper-3.4.10 zookeeper
4. 配置环境变量
   [root@mypc01 local]# vi  /etc/profile
   .........省略......
   export ZOOKEEPER_HOME=/usr/local/zookeeper
   export PATH=$ZOOKEEPER_HOME/bin:$PATH
5. 使当前会话生效
   [root@mypc01 local]# source /etc/profile

集群搭建

以三台机器为例

[root@mypc01 local]# cd ./zookeeper/conf/               
[root@mypc01 conf]# cp  zoo_sample.cfg  zoo.cfg   #复制出zoo.cfg文件
[root@mypc01 conf]# vi zoo.cfg
tickTime=2000				#  定义的时间单元(单位毫秒),以下两个值都是tickTime的倍数。
initLimit=10				#follower连接并同步leader的初始化连接时间。
syncLimit=5					#心跳机制的时间(正常情况下的请求和应答的时间)
dataDir=/usr/local/zookeeper/zkData       #修改zookeeper的存储路径,该目录要提前创建好
clientPort=2181							 #客户端连接服务器的port
server.1=mypc01:2888:3888    			 # 添加三个服务器节点
server.2=mypc02:2888:3888
server.3=mypc03:2888:3888

解析Server.id=ip:port1:port2
id:		服务器的id号,对应zkData/myid文件内的数字
ip: 	服务器的ip地址
port1:	follower与leader交互的port
port2:	选举期间使用的port

在$ZOOKEEPER_HOME目录下添加myid文件,内容为server的id号

cd $ZOOKEEPER_HOME/zkData
touch myid #内容设为1即可

同理在另外2台机器安装zookeeper,不同之处在于myid,一台内容设为2,另一台设为3.
也可以利用scp命令将在第一台机器上安装好的程序发送到第2,第3台.

启动与停止

查看帮助

Usage: /usr/local/zookeeper/bin/zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

需要3台一起启动

zkServer.sh start

查看状态

[root@mypc01 hadoop]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower

查看进程其中QuorumPeerMain为zk的守护进程.

[root@mypc01 hadoop]# jps
5362 Jps
3045 DataNode
2950 NameNode
5290 QuorumPeerMain
3388 ResourceManager
3485 NodeManager

选举制度

zk如何得出leader和follower,配置文件中没有,而是选举出来的.
依据三个参数,

Epoch

投票次数,位于zkData文件夹下,可以查看,比如

[root@mypc01 zkData]# cat version-2/currentEpoch
3
zxid

使得zk节点改变状态的每一个操作都将使得节点接收到一个zxid格式时间戳,并且全局有序.每个节点的改变都产生一个唯一的zxid. zxid越大,表明事件越靠后.zk上有2个zxid
cZxid:节点创建时对应的zxid格式的时间戳
mZxid:节点修改时对应的zxid格式的时间戳

查看节点就可以.需要先登录

zkCli.sh

如下,是一个十六进制的数字

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

就是先前myid文件中的1,2 3,等等

选举leader就是依据优先级:Epoch > zxid >serverid.数字大的胜出.

zkCLi客户端用法

zkCli可以查看更改节点啥的

1. ls -- 查看某个目录包含的所有文件  

2. ls2 -- 查看某个目录包含的所有文件,与ls不同的是它查看到time、version等信息

3. create -- 创建znode,并设置初始内容,例如:
[zk: 47.0.0.1:2181(CONNECTED) 1] create /test "test"   
Created /test

4. get -- 获取znode的数据

5. set -- 修改znode内容

6. delete -- 删除znode

7. quit -- 退出客户端

8. help -- 帮助命令

也可以连接其他机器上的zkCLi

zkCli.sh -server mypc02:2181

zk监听

zk可以监听了节点数目or内容的变化

比如 在mypc01注册监听节点数目变化

ls / watch

然后在mypc02创建新节点

create /newnode "this is new node"

之后mypc01就会收到反馈, 表明监听到/下的子节点发生变化

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

WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/

同理key注册监听节点内容变化

get /newnode watch

利用set命令可以改变节点的内容.
另外,这种监听是一次性的~.并非持续的.

zk应用

比如,可以和hbase一起应用

[zk: localhost:2181(CONNECTED) 0] ls /hbase
[replication, meta-region-server, rs, splitWAL, backup-masters, table-lock, flush-table-proc, region-in-transition, online-snapshot, running, recovering-regions, draining, namespace, hbaseid, table]

比如,可以记录meta表的位置

[zk: localhost:2181(CONNECTED) 2] get /hbase/meta-region-server
�regionserver:60020���~PBUF
mypc03������.
cZxid = 0x100000040
ctime = Sat Oct 31 17:17:20 CST 2020
mZxid = 0x100000040
mtime = Sat Oct 31 17:17:20 CST 2020
pZxid = 0x100000040

再比如
backup-masters中记录了备用节点的位置,可提高hbase的可靠性.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值