zookeeper的介绍与搭建

1、简介

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

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

2、文件系统

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

zookeeper的介绍与搭建_第1张图片

每个子目录项如 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的介绍与搭建_第2张图片

如上,你大致应该了解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 (build1.8.0_91-b14)

Java HotSpot(TM)64-BitServer VM (build25.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 Nov2223:02:34 CST2019

mZxid=0x2

mtime=Fri Nov2223:02:34 CST2019

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 Nov2223:02:34 CST2019

mZxid=0x3

mtime=Fri Nov2223:03:39 CST2019

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

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

zookeeper的介绍与搭建_第3张图片

你可能感兴趣的:(zookeeper的介绍与搭建)