zookeeper的安装部署以及zookeeper具体使用

1、 因部署的是cdh5的Hadoop版本,因此这里安装的是配套的zk
2、 在服务器进行下载:

	wget http://archive.cloudera.com/cdh5/cdh/5/zookeeper-3.4.5-cdh5.16.2.tar.gz

3、 解压:

	tar -zxvf zookeeper-3.4.5-cdh5.16.2.tar.gz -C ../app/ 到另外一个文件夹。

4、 在conf目录下复制一个配置文件

	cp zoo_sample.cfg zoo.cfg

5、 修改配置文件

	dataDir=/home/ruoze/app/tmp/zookeeper
	这个目录是用来存储数据用的

6、 zk经典通讯端口:

	clientPort=2181

7、 设置环境变量

	export ZOOKEEPER_HOME=/home/ruoze/app/zookeeper
	export PATH=${ZOOKEEPER_HOME}/bin:.$PATH

8、 启动:
在bin目录下执行脚本:

	./zkServer.sh start

9、 查看状态:
在bin目录下执行脚本:

	./zkServer.sh status

10、 启动后会有一个QuorumPeerMain的进程,通过jps来查看。
11、 在/home/ruoze/app/tmp/zookeeper目录下产生文件夹以及文件:

	version-2
	zookeeper_server.pid
	其中文件中存储的是当前进程的pid

12、 zk的数据模型
在bin目录下使用命令

	./zkCli.sh
数据模型类似于一个目录结构(树形结构),层次化的目录结构
每一个节点:znode ->  唯一的路径标识
	唯一的路径 -> 存储的数据是有版本号的,如果数据进行了修改操作,版本号会加一。
	修改或者删除操作的时候是可以指定版本号的,如果版本号 不匹配,会报错的。
	znode上存储的数据不宜过大,几K就了不起了,因为存储的都是一些类似于端口号这种数据。
	znode是可以设置权限的,用来控制访问权限。
	znode可以设置监听器,如果设置了监听,因为集群中每个节点是一样的,在任何一个客户端的节点发生变化之后,通过监听器,其他的客户端也会收到,或者取到最新的信息。
znode有两种类型:
	临时的:(工作中偶尔会用到)
		当前会话有效。客户端退出之后就不能访问了,会被删掉。
		不能再有子节点。已经是最底层。
	永久的:(工作中常用)
		永久有效。其他的客户端也可以访问到,除非用命令删除。
		节点下还可以再有子节点。
znode有四种形式:
	永久/持久
	永久/持久带顺序编号
	临时
	临时带编号(分布式锁的实现)

13、 help命令

		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
	a.set path data [version]
		对某个节点(路径设置一个值),版本可有可无。
	b.ls path [watch]
		展示,展示节点下面还有那些节点,类似于linux服务器的ls。
	c.setAcl path acl
		设置权限,对某个路径设置acl。
	d.delete path [version]
		删除节点
	e.sync path
		同步节点
	f.rmr path
		递归删除
	g.get path [watch]
		get一个路径,可以加监听。
	h.create [-s] [-e] path data acl
		创建一个路径 [带顺序的]  [临时的] 节点 数据 acl
	i.quit
		退出

14、 命令使用

a.创建节点 
	create /ruoze ruoze-data
	返回值:Created /ruoze
b.获取节点
	get /ruoze
		ruoze-data(znode的数据)
		cZxid = 0x4(身份编号)(c->创建,m->修改)
		ctime = Thu Aug 20 17:18:18 CST 2020
		mZxid = 0x4
		mtime = Thu Aug 20 17:18:18 CST 2020
		pZxid = 0x4
		cversion = 0
		dataVersion = 0(数据版本)
		aclVersion = 0
		ephemeralOwner = 0x0(描述是否临时节点,一般临时节点的值比较长,此处为永久节点)
		dataLength = 10(数据的长度)
		numChildren = 0(有几个子节点)
c.创建临时节点
	create -e /ruoze/tmp ruoze-data
	返回值:Created /ruoze/tmp
d.获取临时节点
	get /ruoze/tmp
		ruoze-data
		cZxid = 0x5
		ctime = Thu Aug 20 17:23:13 CST 2020
		mZxid = 0x5
		mtime = Thu Aug 20 17:23:13 CST 2020
		pZxid = 0x5
		cversion = 0
		dataVersion = 0
		aclVersion = 0
		ephemeralOwner = 0x17409dd4ae40001(临时节点,比较长)
		dataLength = 10
		numChildren = 0
e.quit,退出,再次get /ruoze/tmp
		没有数据,因为是临时节点,只有当前session有效
f.顺序节点创建
	create -s /ruoze/seq seq
	返回值:Created /ruoze/seq0000000001
	再次使用相同命令创建:
	create -s /ruoze/seq seq
	返回值:Created /ruoze/seq0000000002
		(001,002就是一个顺序)
g.创建多级目录
	create /ruoze/a/b/c abc
	返回值:Node does not exist: /ruoze/a/b/c(没有类似于mkdir -p的操作方式,只能一个一个做)
h.修改
	set /ruoze new-data
		cZxid = 0x4
		ctime = Thu Aug 20 17:18:18 CST 2020
		mZxid = 0xd
		mtime = Thu Aug 20 18:20:30 CST 2020
		pZxid = 0xc
		cversion = 6
		dataVersion = 1  (版本发生变化)
		aclVersion = 0
		ephemeralOwner = 0x0
		dataLength = 8
		numChildren = 4
		再次获取:
		get /ruoze
			new-data
			cZxid = 0x4
			ctime = Thu Aug 20 17:18:18 CST 2020
			mZxid = 0xd
			mtime = Thu Aug 20 18:20:30 CST 2020
			pZxid = 0xc
			cversion = 6
			dataVersion = 1
			aclVersion = 0
			ephemeralOwner = 0x0
			dataLength = 8
			numChildren = 4
	(操作一次,版本加一)
i.修改,带版本号
	set /ruoze 123 1 (1是版本号)
	返回值:
		cZxid = 0x4
		ctime = Thu Aug 20 17:18:18 CST 2020
		mZxid = 0xe
		mtime = Thu Aug 20 18:22:59 CST 2020
		pZxid = 0xc
		cversion = 6
		dataVersion = 2(版本变化)
		aclVersion = 0
		ephemeralOwner = 0x0
		dataLength = 3
		numChildren = 4
j.修改,带着版本号1,模拟并发的场景
	set /ruoze 456 1
	返回值:version No is not valid : /ruoze(报错,版本不对,====》乐观锁)
k.删除
	delete /ruoze/seq0000000001
	get一下:
		get /ruoze
			123
			cZxid = 0x4
			ctime = Thu Aug 20 17:18:18 CST 2020
			mZxid = 0xe
			mtime = Thu Aug 20 18:22:59 CST 2020
			pZxid = 0x10
			cversion = 7
			dataVersion = 2
			aclVersion = 0
			ephemeralOwner = 0x0
			dataLength = 3
			numChildren = 3
	删除的时候如果带着版本号,那么版本号一定要能够匹配上,不然也会报错。

15、 监听
给znode添加监听,监听成功后,当数据发生变化,可以拿到最新的数据
1)监听最底层的znode
2)监听带子znode的(目录,文件夹)

A、监听最底层的znode
	a.删除之前的新建的  rmr /ruoze
	b.stat 命令:查看监听状态(不存在的目录也可以加监听,虽然会报错,但是当创建的时候会自动追加上监听操作)
		stat /ruoze watch
		返回值:Node does not exist: /ruoze
		再次创建:create /ruoze 123
		返回值:
			WATCHER::
			WatchedEvent state:SyncConnected type:NodeCreated path:/ruoze
			Created /ruoze
	总结:目录不管存在不存在,只要监听上了,当你创建节点,发生状态的改变,就可以监听到
	c.查看监听
		get /ruoze watch
			123
			cZxid = 0x15
			ctime = Thu Aug 20 18:36:20 CST 2020
			mZxid = 0x15
			mtime = Thu Aug 20 18:36:20 CST 2020
			pZxid = 0x15
			cversion = 0
			dataVersion = 0
			aclVersion = 0
			ephemeralOwner = 0x0
			dataLength = 3
			numChildren = 0
		set /ruoze 456
			
			WATCHER::cZxid = 0x15(被监听到)
			WatchedEvent state:SyncConnected type:NodeDataChanged path:/ruoze(节点数据发生变化)
			ctime = Thu Aug 20 18:36:20 CST 2020
			mZxid = 0x16
			mtime = Thu Aug 20 18:41:00 CST 2020
			pZxid = 0x15
			cversion = 0
			dataVersion = 1
			aclVersion = 0
			ephemeralOwner = 0x0
			dataLength = 3
			numChildren = 0
		再次修改:set /ruoze 789
			cZxid = 0x15(没有被监听,因为监听是一次性的!!!做不到永久监听)
			ctime = Thu Aug 20 18:36:20 CST 2020
			mZxid = 0x17
			mtime = Thu Aug 20 18:42:48 CST 2020
			pZxid = 0x15
			cversion = 0
			dataVersion = 2
			aclVersion = 0
			ephemeralOwner = 0x0
			dataLength = 3
			numChildren = 0
	d.监听删除
		首先	get /ruoze watch
			返回值:
				789
				cZxid = 0x15
				ctime = Thu Aug 20 18:36:20 CST 2020
				mZxid = 0x17
				mtime = Thu Aug 20 18:42:48 CST 2020
				pZxid = 0x15
				cversion = 0
				dataVersion = 2
				aclVersion = 0
				ephemeralOwner = 0x0
				dataLength = 3
				numChildren = 0
		删除节点:delete /ruoze
			返回值:
				WATCHER::(表明已经被监听到)
				WatchedEvent state:SyncConnected type:NodeDeleted path:/ruoze
B、监听带子znode的(目录,文件夹)
	a.先创建一个节点
		create /ruoze 123
	b.监听这个目录
		ls /ruoze watch
	C.创建子目录:
		create /ruoze/abc 888
		返回值:
			Created /ruoze/abc
			WATCHER::																	(表明已被监听)
			WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/ruoze
	d,再添加一个子节点
		create /ruoze/xyz 999
		返回值:
			Created /ruoze/xyz
	e.再添加一个监听,监听在父节点头上
		ls /ruoze watch
		返回值:
			[xyz, abc]
	f.改变子节点的值:
		set /ruoze/xyz 9090
		返回值:
			[xyz, abc]  (没有监听到)
			[zk: localhost:2181(CONNECTED) 9] set /ruoze/xyz 9090
			cZxid = 0x1d
			ctime = Fri Aug 21 07:27:55 CST 2020
			mZxid = 0x1e
			mtime = Fri Aug 21 07:35:44 CST 2020
			pZxid = 0x1d
			cversion = 0
			dataVersion = 1
			aclVersion = 0
			ephemeralOwner = 0x0
			dataLength = 4
			numChildren = 0
		表明:可以监听到子节点的创建,但是对于子节点的变动,是监听不到的。

16、 zookeeper中的四字命令(命令都是四个字母组成的)

a.stat
	server的信息以及连接的信息
	使用:
		echo stat|nc localhost 2181
		返回值:
			Zookeeper version: 3.4.5-cdh5.16.2--1, built on 06/03/2019 10:40 GMT
			Clients:
			 /127.0.0.1:53744[1](queued=0,recved=542,sent=544)
			 /0:0:0:0:0:0:0:1:55246[0](queued=0,recved=1,sent=0)
			Latency min/avg/max: 0/0/5
			Received: 543
			Sent: 544
			Connections: 2
			Outstanding: 0
			Zxid: 0x1e
			Mode: standalone(节点的模式)
			Node count: 7(节点的数量)
b.ruok
	使用:
		echo ruok|nc localhost 2181
		返回值:
			imok
c.dump
	使用:用来查看临时节点
		echo dump|nc localhost 2181
		返回值:
			SessionTracker dump:
			Session Sets (3):
			0 expire at Fri Aug 21 07:45:26 CST 2020:
			0 expire at Fri Aug 21 07:45:36 CST 2020:
			1 expire at Fri Aug 21 07:45:46 CST 2020:
				0x1740def3e860000
			ephemeral nodes dump:
			Sessions with Ephemerals (0):
d.conf
	使用:用来查看配置文件
		echo conf|nc localhost 2181
		返回值:
			clientPort=2181
			dataDir=/home/ruoze/app/tmp/zookeeper/version-2(数据目录)
			dataLogDir=/home/ruoze/app/tmp/zookeeper/version-2(日志目录)
			tickTime=2000
			maxClientCnxns=60
			minSessionTimeout=4000
			maxSessionTimeout=40000
			serverId=0
e.envi
	使用:用来查看环境信息
		echo envi|nc localhost 2181
		返回值:
			clientPort=2181
			dataDir=/home/ruoze/app/tmp/zookeeper/version-2
			dataLogDir=/home/ruoze/app/tmp/zookeeper/version-2
			tickTime=2000
			maxClientCnxns=60
			minSessionTimeout=4000
			maxSessionTimeout=40000
			serverId=0
			[root@ruozedata jdk1.8.0_251]# echo envi|nc localhost 2181
			Environment:
			zookeeper.version=3.4.5-cdh5.16.2--1, built on 06/03/2019 10:40 GMT
			host.name=ruozedata
			java.version=1.8.0_251
			java.vendor=Oracle Corporation
			java.home=/usr/java/jdk1.8.0_251/jre
			java.class.path=/home/ruoze/app/zookeeper/bin/../build/classes:/home/ruoze/app/zookeeper/bin/../build/lib/*.jar:/home/ruoze/app/zookeeper/bin/../share/zookeeper/zookeeper-3.4.5-cdh5.16.2.jar:/home/ruoze/app/zookeeper/bin/../share/zookeeper/slf4j-log4j12-1.7.5.jar:/home/ruoze/app/zookeeper/bin/../share/zookeeper/slf4j-api-1.7.5.jar:/home/ruoze/app/zookeeper/bin/../share/zookeeper/netty-3.10.5.Final.jar:/home/ruoze/app/zookeeper/bin/../share/zookeeper/log4j-1.2.16.jar:/home/ruoze/app/zookeeper/bin/../share/zookeeper/jline-2.11.jar:/home/ruoze/app/zookeeper/bin/../src/java/lib/*.jar:/home/ruoze/app/zookeeper/bin/../conf:
			java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
			java.io.tmpdir=/tmp
			java.compiler=<NA>
			os.name=Linux
			os.arch=amd64
			os.version=3.10.0-1127.el7.x86_64
			user.name=ruoze
			user.home=/home/ruoze
			user.dir=/home/ruoze/app/zookeeper-3.4.5-cdh5.16.2/bin
f.wchs
使用:查看当前监听的数量
	echo wchs|nc localhost 2181
	返回值:
		1 connections watching 1 paths
		Total watches:1

17、 一台机器配多个zookeeper
只要改一下端口就行了

a.cp三份
b.修改第一个的conf文件中的zoo.cfg
	dataDir=/home/ruoze/app/tmp/zookeeper001
	server.1=localhost:2888:3888
	server.2=localhost:2889:3889
	server.3=localhost:2890:3890
c.另外两个看着修改
	dataDir=/home/ruoze/app/tmp/zookeeper002
	server.1=localhost:2888:3888
	server.2=localhost:2889:3889
	server.3=localhost:2890:3890

	dataDir=/home/ruoze/app/tmp/zookeeper003
	server.1=localhost:2888:3888
	server.2=localhost:2889:3889
	server.3=localhost:2890:3890
d.在目录/home/ruoze/app/tmp下创建文件夹:
	mkdir zookeeper001
	mkdir zookeeper002
	mkdir zookeeper003
e.分别在刚才创建的文件夹下创建文件myid,写入对应的数字:1/2/3
f.分别在对应的文件夹下启动
	./zkServer.sh start
	查看启动状态:
	./zkServer.sh status
	返回值:
		JMX enabled by default
		Using config: /home/ruoze/app/zk001/bin/../conf/zoo.cfg
		Mode: follower(从节点)
	其余的两个里面有一个leader,一个follower
	在启动第一个的时候,去查看状态,会报错,因为集群的leader是需要投票的,得票多的才是leader,当leader挂了之后,其余两个会发生选举,选出来一个leader。因此,zk的部署需要奇数个,只有当一半以上的机器可以提供服务就行。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值