学习总结与分享-zookeeper的安装和java下的基础使用

Zookeeper概念:
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
特点与用途:
在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。如果在创建znode时Flag设置为EPHEMERAL,那么当创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper里,Zookeeper使用Watcher察觉事件信息。当客户端接收到事件信息,比如连接超时、节点数据改变、子节点改变,可以调用相应的行为来处理数据。Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共享锁,两阶段提交。
那么Zookeeper能做什么事情呢,简单的例子:假设我们有20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的cgi(向总服务器发出搜索请求)。搜索引擎的服务器中的15个服务器提供搜索服务,5个服务器正在生成索引。这20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以提供搜索服务了。使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,当总服务器宕机时自动启用备用的总服务器。
Zookeeper安装和基本使用:
1、下载
首先我们下载最新稳定版本的zookeeper
http://apache.fayea.com/zookeeper/stable/
2、解压
下载完成后,我们解开压缩包
3、创建配置文件
解压后的路径下找到conf文件夹,进入conf文件夹复制zoo_sample.cfg,命名为zoo.cfg

#每个tick的毫秒数。后面的initLimit和syncLimit都以tick为单位
tickTime=2000
 #初始化同步阶段时长
initLimit=10
#同步确认时长
syncLimit=5
#快照存储路径,不要使用/tmp。这里使用只是为了示例
dataDir=/tmp/zookeeper
 # 客户端端口好
clientPort=2181
#可连接的client的最大数
#如果需要处理更多的clinet,请增加此数量
#maxClientCnxns=60
#Be sure to read the maintenance section of the 
#administrator guide before turning on autopurge.
#
#http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
#The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
#Purge task interval in hours
#Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

对于学习来说,一般无需做修改。生产环境,需要修改dataDir。其他参数后续调优。
4、单机启动ZooKeeper
在ZooKeeper根目录下执行 bin/zkServer.sh start

➜  zookeeper-3.4.12 bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /Users/yimingli/dev/tool/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

5、通过客户端连接ZooKeeper

➜  zookeeper-3.4.12 bin/zkCli.sh

6、通过客户端执行基本命令
6.1、创建znode,名为/my_test,携带数据testData

[zk: localhost:2181(CONNECTED) 0] create /my_test testData

6.2、查看znode信息

[zk: localhost:2181(CONNECTED) 2] get /my_test

返回如下:

testData
cZxid = 0x2e9
ctime = Mon Oct 29 10:50:46 CST 2018
mZxid = 0x2e9
mtime = Mon Oct 29 10:50:46 CST 2018
pZxid = 0x2e9
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0

6.3、修改znode数据

[zk: localhost:2181(CONNECTED) 3] set /my_test testDataV2

6.4、创建子znode

[zk: localhost:2181(CONNECTED) 0] create /my_test/tester1 testData

6.5、列出子znode

[zk: localhost:2181(CONNECTED) 5] ls  /my_test
[tester1]

6.6、删除znode
有子节点的znode不能直接删除,否则会报错。

[zk: localhost:2181(CONNECTED) 6] delete /my_test
Node not empty: /my_test

我们删除/my_test/tester1。

[zk: localhost:2181(CONNECTED) 8] delete /my_test/tester1

再次查看该znode。

[zk: localhost:2181(CONNECTED) 9] get /my_test/tester1
Node does not exist: /my_test/tester1

已经被成功删除了。

7、集群配置和启动
我们配置和启动一个三台server的集群。

7.1、修改zoo.cfg文件

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=ip1:2888:3888
server.2=ip2:2888:3888
server.3=ip3:2888:3888
initLimit,zookeeper用来限制zookeeper服务器连接到leader的时长。

syncLimit,一个服务器多久在leader那里过期。

以上两种过期时间,单位都是tickTime,
本例initLimit时长为5个tickTime=5*2000ms=10秒
server.x列出了所有的zookeeper服务。集群启动它通过查看data下面的myid来知道自己是哪台服务器。
2888用来连接其它server。3888用来leader选举。
7.2、复制2份zookeeper到另外两台server上。
7.3、在配置的dataDir路径下创建myid文件,文件内容为对应自己的server.x的x值。比如zoo1这台sever,myid文件中内容为1.
7.4、启动每个zookeeper
7.5、查看本机状态,是leader还是follower

➜  zookeeper-3.4.12 bin/zkServer.sh status

至此我们已经把zookeeper集群启动起来了,并且做了验证,有一台是leader,另外两台是follower。
我们还可以做个实验,看zookeeper集群是否工作正常。

1、连接其中一台server,创建一个znode。

➜  zookeeper-3.4.12 bin/zkCli.sh -server ip1:2181
[zk: ip1:2181(CONNECTED) 10] create /zk_test my_data

2、连接另外一台server,列出所有根节点下znode。

➜  zookeeper-3.4.12 bin/zkCli.sh -server ip2:2181
[zk: ip2:2181(CONNECTED) 10] ls /

输出如下:

[zk_test]

可以看到集群已经能够正常工作,server间可以正常进行数据的复制。

客户端连接集群方法如下:

➜  zookeeper-3.4.12 bin/zkCli -server ip1:2181,ip2:2181,ip3:2181

客户端会自动随机选择集中一台连接。

————————————————
本文为CSDN博主「稀有气体」的原创文章,原文链接:https://blog.csdn.net/liyiming2017/article/details/83501836

使用java代码连接zookeeper:
使用java连接zookeeper有java原生API与几种封装了的框架可以使用,框架为我们封装好了一些对于zookeeper使用java连接的注册和监听与节点的创建,修改,删除,节点又分为临时节点和持久节点,又有有序和无序之分。
框架主要有:zkClient和Curator。
API:api就不一一列举了,但无论是原生api还是框架为我们封装好的api首先都要创建一个连接,连接又需要一个监听对象,最后再通过api来操作zookeeper中的节点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值