zookeeper 客户端配置_zookeeper的介绍与搭建

cefcd73e8a06219b34cb56f1203307a2.png

zookeeper

1、简介

它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

上面的解释有点抽象,简单来说zookeeper=文件系统+监听通知机制

2、文件系统

Zookeeper维护一个类似文件系统的数据结构:

ef15385adbf4d0e25b957ac3e96b81df.png

每个子目录项如 NameService 都被称作为 znode(目录节点),和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。

3、有四种类型的znode

1.PERSISTENT-持久化目录节点

客户端与zookeeper断开连接后,该节点依旧存在

2.PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点

客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

3.EPHEMERAL-临时目录节点

客户端与zookeeper断开连接后,该节点被删除

4.EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点

客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

4、监听通知机制

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

5、Zookeeper能做什么

zookeeper功能非常强大,可以实现诸如分布式应用配置管理、统一命名服务、状态同步服务、集群管理等功能,我们这里拿比较简单的分布式应用配置管理为例来说明。

假设我们的程序是分布式部署在多台机器上,如果我们要改变程序的配置文件,需要逐台机器去修改,非常麻烦,现在把这些配置全部放到zookeeper上去,保存在 zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 zookeeper 的通知,然后从 zookeeper 获取新的配置信息应用到系统中。

936cb2ea1eaebafc4611a53587a29dcd.png

如上,你大致应该了解zookeeper是个什么东西,大概能做些什么了,我们马上来学习下zookeeper的安装及使用,并开发一个小程序来实现zookeeper这个分布式配置管理的功能

6、Zookeeper单机模式安装

6.1配置JAVA环境,检验环境:java -version

 [root@serverd conf]# cd /opt/ [root@serverd opt]# ls jdk-8u91-linux-x64.tar.gz [root@serverd opt]# tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/ [root@serverd opt]# ln -s /usr/local/jdk1.8.0_91/ /usr/local/java [root@serverd opt]# sed -i.ori '$a export JAVA_HOME=/usr/local/java export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile [root@serverd opt]# source /etc/profile [root@serverd opt]# java -version java version "1.8.0_91" Java(TM) SE Runtime Environment (build 1.8.0_91-b14) Java HotSpot(TM) 64-BitServer VM (build 25.91-b14, mixed mode)

6.2下载并安装zookeeper

 [root@serverd ~]# wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz [root@serverd ~]# tar xf zookeeper-3.4.14.tar.gz -C /usr/local/ [root@serverd ~]# ln -s /usr/local/zookeeper-3.4.14/ /usr/local/zookeeper [root@serverd ~]# cd /usr/local/zookeeper/conf/ [root@serverd conf]# cp zoo_sample.cfg zoo.cfg [root@serverd conf]# cd ../bin/ [root@serverd bin]# ./zkServer.sh start

7、使用客户端命令操作zookeeper

 [root@serverd bin]# ./zkCli.sh ##使用 ls 命令来查看当前 ZooKeeper 中所包含的内容 [zk: localhost:2181(CONNECTED) 0] ls/ [zookeeper] ##创建一个新的 znode ,使用 create /zkPro myData [zk: localhost:2181(CONNECTED) 1] create /zkPro myData Created /zkPro ##再次使用 ls 命令来查看现在 zookeeper 中所包含的内容 [zk: localhost:2181(CONNECTED) 2] ls/ [zookeeper, zkPro] ##下面我们运行 get 命令来确认第二步中所创建的 znode 是否包含我们所创建的字符串 [zk: localhost:2181(CONNECTED) 3] get/zkPro myData cZxid =0x2 ctime =Fri Nov 2223:02:34 CST 2019 mZxid =0x2 mtime =Fri Nov 2223:02:34 CST 2019 pZxid =0x2 cversion =0 dataVersion =0 aclVersion =0 ephemeralOwner =0x0 dataLength =6 numChildren =0 ##下面我们通过 set 命令来对 zk 所关联的字符串进行设置 [zk: localhost:2181(CONNECTED) 5] set/zkPro myData123 cZxid =0x2 ctime =Fri Nov 2223:02:34 CST 2019 mZxid =0x3 mtime =Fri Nov 2223:03:39 CST 2019 pZxid =0x2 cversion =0 dataVersion =1 aclVersion =0 ephemeralOwner =0x0 dataLength =9 numChildren =0 ##下面我们将刚才创建的 znode 删除 [zk: localhost:2181(CONNECTED) 6] delete /zkPro

8、Zookeeper集群模式安装(需提前安装好jdk见上文)

8.1软件下载地址

 [root@zookeeper-kafka-01 ~]# cd /usr/local/src/ [root@zookeeper-kafka-01 src]# wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz [root@zookeeper-kafka-02 src]# wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz [root@zookeeper-kafka-03 src]# wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

8.2配置三台主机hosts文件一致

 [root@zookeeper-kafka-01 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.17.120.12 ZooKeeper-Kafka-01  172.17.120.13 ZooKeeper-Kafka-02 172.17.120.14 ZooKeeper-Kafka-03

8.3安装zookeeper

 [root@ZooKeeper-Kafka-01 src]# tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local/ [root@ZooKeeper-Kafka-01 src]# cd .. [root@ZooKeeper-Kafka-01 local]# ln -s zookeeper-3.4.14 zookeeper [root@ZooKeeper-Kafka-01 local]# cd zookeeper/conf/ [root@ZooKeeper-Kafka-01 conf]# cp zoo_sample.cfg zoo.cfg ##结尾添加 29server.1=ZooKeeper-Kafka-01:2888:3888 30server.2=ZooKeeper-Kafka-02:2888:3888 31server.3=ZooKeeper-Kafka-03:2888:3888

8.4创建dataDir目录创建/tmp/zookeeper

 [root@ZooKeeper-Kafka-01 conf]# mkdir /tmp/zookeeper [root@ZooKeeper-Kafka-01 conf]# touch /tmp/zookeeper/myid [root@ZooKeeper-Kafka-01 conf]# echo 1 > /tmp/zookeeper/myid

8.5将zookeeper文件复制到另外两个节点

 [root@ZooKeeper-Kafka-01 local]# scp -r zookeeper-3.4.14/ 10.200.3.86:/usr/local/ [root@ZooKeeper-Kafka-01 local]# scp -r zookeeper-3.4.14/ 10.200.3.87:/usr/local/

8.5在两个slave节点创建目录和文件

 ##ZooKeeper-Kafka-02节点 [root@ZooKeeper-Kafka-02 local]# ln -s zookeeper-3.4.10 zookeeper [root@ZooKeeper-Kafka-02 local]# mkdir /tmp/zookeeper [root@ZooKeeper-Kafka-02 local]# touch /tmp/zookeeper/myid [root@ZooKeeper-Kafka-02 local]# echo 2 > /tmp/zookeeper/myid ##ZooKeeper-Kafka-03节点 [root@ZooKeeper-Kafka-03 local]# ln -s zookeeper-3.4.10 zookeeper [root@ZooKeeper-Kafka-03 local]# mkdir /tmp/zookeeper [root@ZooKeeper-Kafka-03 local]# touch /tmp/zookeeper/myid [root@ZooKeeper-Kafka-03 local]# echo 3 > /tmp/zookeeper/myid

8.6分别在每个节点上启动 zookeeper测试

 [root@ZooKeeper-Kafka-01 zookeeper]# ./bin/zkServer.sh start [root@ZooKeeper-Kafka-02 zookeeper]# ./bin/zkServer.sh start [root@ZooKeeper-Kafka-03 zookeeper]# ./bin/zkServer.sh start

8.7查看状态

 [root@ZooKeeper-Kafka-01 zookeeper]# ./bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: follower [root@ZooKeeper-Kafka-02 zookeeper]# ./bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: leader [root@ZooKeeper-Kafka-03 zookeeper]# ./bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: follower

9、总结

至此,我们对zookeeper就算有了一个入门的了解,当然zookeeper远比我们这里描述的功能多,比如用zookeeper实现集群管理,分布式锁,分布式队列,zookeeper集群leader选举等等。

有需要技术交流的小伙伴可以加我微信,期待与大家共同成长,本人微信:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值