Zookeeper的学习

一、Zookeeper概述

Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。

1.1. zookeeper的特点

1.2 应用场景

提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
1.统一命名服务:在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。(举例就是将多个服务器的IP地址可以统一为一个域名)
2.统一配置管理:对配置文件修改后,希望能够快速同步到各个节点上。(可将配置信息写到zookeeper的一个znode节点上,由客户端监听此节点)
3.统一集群管理:监听每个节点的状态变化。
4.服务器动态上下线:实时观察到服务器上下线的变化。
5.软负载均衡:记录每台服务器的访问数量,把任务分配给访问数最少的服务器。

二、Zookeeper集群

2.1 集群配置

1. 首先打开Hadoop102虚拟机,将 apache-zookeeper-3.5.7-bin.tar.gz 安装包下载下来,输入命令:tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz解压该安装包,解压完成后对该文件进行改名,输入命令:mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7/
2. 下面需要对zookeeper进行配置。进入到zookeeper的conf目录下,对 zoo_sample.cfg 配置文件进行改名:mv zoo_sample.cfg zoo.cfg,接下来去zookeeper的文件下建立一个zkData文件夹,用来存储zookeeper的数据,输入命令:mkdir zkData,创建好后回到 zoo.cfg 配置文件下,进入该配置文件,找到 dataDir 参数,将其修改为:dataDir=/opt/software/zookeeper-3.5.7/zkData ,修改完成后保存退出。
3. 接下来启动zookeeper。在zookeeper目录下输入命令:bin/zkServer.sh start,这样在一台服务器上zookeeper就启动成功了。服务器端启动好后,接下来启动客户端,输入命令:bin/zkCli.sh,启动成功后,退出可以输入命令:quit关闭客户端。关闭服务端的话可以使用命令:bin/zkServer.sh stop
4. 下面开始zookeeper的集群配置。依然是在hadoop102虚拟机上,进入第二步中创建好的zkData文件夹中,输入命令:vi myid ,创建一个myid文件,进入里面输入“2”,注意不要有其它多余的字符,因为这个文件就相当于这个服务器在zookeeper的身份标识。这样一台虚拟机的zookeeper就配置好了,接下来将配置好的zookeeper分发到集群中,输入命令:xsync zookeeper-3.5.7。分发完毕后还要分别去Hadoop103和104上修改 myid ,分别修改为3和4。然后继续回到Hadoop102中,进入到zookeeper目录下的conf文件夹下,修改 zoo.cfg 文件,在文件末尾添加如下配置:

#######################cluster##########################
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888

保存退出后分发该配置文件,至此集群配置完成。(注意添加的代码一定不能有空格,要不然后续zookeeper集群启动不起来)
5. 下面开始启动zookeeper集群。分别在Hadoop102,103,104的zookeeper目录下输入命令:,bin/zkServer.sh start启动zookeeper。可以通过bin/zkServer.sh status或者jps来查看zookeeper是否启动成功。

2.2 选举机制

1. 第一次选举
选举机制倾向于把票投给myid数字较大的zookeeper,超过集群半数的票数则该zookeeper成为leader,剩余的zookeeper自动变成follower。直到该leader挂掉才能再次进行选举。
2.非第一次选举
首先清楚这几个概念:
Epoch:每个zookeeper当老大的次数;
ZXID:事务ID,标识每个zookeeper处理任务的次数;
SID:每个zookeeper自己的编号。
当leader挂掉后,剩余存活的zookeeper要进行选举,首先看Epoch,大的当leader;Epoch相同,比较ZXID,大的当leader;ZXID相同,比较SID,大的当leader。

2.3 ZK集群启停脚本

进入到 ~/bin/目录下,输入命令:vi zk.sh,创建脚本,在脚本中添加如下代码,保存后退出。输入命令:chmod 777 zk.sh赋予该文件执行权限。配置好后就可以使用命令:zk.sh start,zk.sh status,zk.sh stop等命令开启关闭zookeeper集群了。

#!/bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 启动 ------------
ssh $i "/opt/software/zookeeper-3.5.7/bin/zkServer.sh start"
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 停止 ------------
ssh $i "/opt/software/zookeeper-3.5.7/bin/zkServer.sh stop"
done
};;
"status"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 状态 ------------
ssh $i "/opt/software/zookeeper-3.5.7/bin/zkServer.sh status"
done
};;
esac

三、客户端命令行

3.1 命令行语法

3.2 节点类型

持久:客户端和服务器端断开连接后,创建的节点不删除;
短暂:客户端和服务器端断开连接后,创建的节点自己删除;
有序:创建的节点带序号;
无序:创建的节点没有序号;

3.3 监听器原理

监听机制保证 ZooKeeper 保存的任何的数据的任何改变都能快速的响应到监听了该节点的应用程序。
1. 节点值变化监听
可以在一台虚拟机上使用命令:get -w命令来监听某个节点的变化。注意,注册一次只能监听一次,后续监听的话需要再次注册。
2. 节点子节点变化监听
使用命令:ls -w。其它同上。

3.4 节点的删除与查看

1. 删除节点:delete;
2. 递归删除节点:deleteall;
3. 查看节点状态:stat;

四、客户端API操作

4.1 IDEA环境搭建

1.首先创建一个idea项目,名称为zookeeper。然后添加如下依赖:

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.7</version>
</dependency>
</dependencies>

2.在项目的 src/main/resources 目录下创建 log4j.properties 文件,在该文件中添加如下内容:

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c]%m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c]%m%n


目前看到尚硅谷教程p16,基本算是入门了,后面的太高深先不看了,先去学kafka。

posted @   KongLong_cm  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示