前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >zookeeper的介绍与搭建

zookeeper的介绍与搭建

作者头像
胡齐
发布2019-12-05 23:28:36
4330
发布2019-12-05 23:28:36
举报
文章被收录于专栏:运维猫运维猫

1、简介

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

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

2、文件系统

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

每个子目录项如 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 获取新的配置信息应用到系统中。

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

6、Zookeeper单机模式安装

6.1配置JAVA环境,检验环境:java -version
代码语言:javascript
复制
 [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 \nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH \nexport 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
代码语言:javascript
复制
 [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

代码语言:javascript
复制
 [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软件下载地址
代码语言:javascript
复制
 [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文件一致
代码语言:javascript
复制
 [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
代码语言:javascript
复制
 [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
代码语言:javascript
复制
 [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文件复制到另外两个节点
代码语言:javascript
复制
 [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节点创建目录和文件
代码语言:javascript
复制
 ##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测试
代码语言:javascript
复制
 [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查看状态
代码语言:javascript
复制
 [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选举等等。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、简介
  • 2、文件系统
  • 3、有四种类型的znode
  • 4、监听通知机制
  • 5、Zookeeper能做什么
  • 6、Zookeeper单机模式安装
    • 6.1配置JAVA环境,检验环境:java -version
      • 6.2下载并安装zookeeper
      • 7、使用客户端命令操作zookeeper
      • 8、Zookeeper集群模式安装(需提前安装好jdk见上文)
        • 8.1软件下载地址
          • 8.2配置三台主机hosts文件一致
            • 8.3安装zookeeper
              • 8.4创建dataDir目录创建/tmp/zookeeper
                • 8.5将zookeeper文件复制到另外两个节点
                  • 8.5在两个slave节点创建目录和文件
                    • 8.6分别在每个节点上启动 zookeeper测试
                      • 8.7查看状态
                      • 9、总结
                      相关产品与服务
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档