zookeeper的介绍与搭建

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
 [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
 [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选举等等。

关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。

扫描二维码

获取更多精彩

运维猫公众号

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

扫描二维码

添加私人微信

运维猫博主

扫码加微信

最近有一些星友咨询我知识星球的事,我也想继续在星球上发布更优质的内容供大家学习和探讨。运维猫公众号平台致力于为大家提供免费的学习资源,知识星球主要致力于即将入坑或者已经入坑的运维行业的小伙伴。

点击阅读原文  查看更多精彩内容!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值