【大数据】zookeeper-3.9.0安装
Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目1️⃣Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。2️⃣集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所 以Zookeeper适合安装奇数台服务器。3️⃣全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据
前言
Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目
一、zookeeper概述
1. zookeeper特点
1️⃣Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
2️⃣集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所 以Zookeeper适合安装奇数台服务器。
3️⃣全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
4️⃣更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。
5️⃣数据更新原子性,一次数据更新要么成功,要么失败。
6️⃣实时性,在一定时间范围内,Client能读到最新数据。
2. zookeeper数据结构
📚ZooKeeper
数据模型的结构与 Unix
文件系统很类似,整体上可以看作是一棵树,每个节点称做一个 ZNode
。每一个ZNode
默认能够存储 1MB 的数据,每个 ZNode
都可以通过其路径唯一标识
3. 应用场景
📚提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等
二、zookeeper安装说明(就要用最新版)
https://dlcdn.apache.org/zookeeper/zookeeper-3.9.0/apache-zookeeper-3.9.0-bin.tar.gz
1. 本地安装
# 下载3.9.0版本
cd /opt/software/;wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.0/apache-zookeeper-3.9.0-bin.tar.gz
# 解压缩
tar -zxvf apache-zookeeper-3.9.0-bin.tar.gz -C /opt/module/
# 改名
mv apache-zookeeper-3.9.0-bin zookeeper-3.9.0
cd zookeeper-3.9.0/conf/
mv zoo_sample.cfg zoo.cfg
# 修改数据存放路径
mkdir /opt/module/zookeeper-3.9.0/data
# 进入配置文件修改dataDir
vim /opt/module/zookeeper-3.9.0/conf/zoo.cfg
dataDir=/opt/module/zookeeper-3.9.0/data
# 分发
xsync zookeeper-3.9.0
启动失败!查看日志发现:
Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain
,则退到zookeeper文件下,执行编译mvn package -Dmaven.test.skip=true
# zookeeper服务端,启动!
bin/zkServer.sh start
bin/zkServer.sh status
# 启动客户端进入zookeeper界面
bin/zkCli.sh
- 配置参数
zoo.cfg
解读
1️⃣tickTime=2000
:通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒。配置服务器与客户端或服务器与服务器之间的通信心跳时间。
2️⃣initLimit = 10
:LF初始通信时限。表示Leader和Follower初始连接时能容忍的时间,10代表10个tickTime,超过该时间则认为通信失败。
3️⃣syncLimit = 5
:LF同步通信时限。Leader和Follower之间通信时间如果超过syncLimit * tickTime,Leader认为Follwer挂掉,从服务器列表中删除Follwer。
4️⃣dataDir
:保存Zookeeper中的数据。注意:默认的tmp目录,容易被Linux系统定期删除,所以一般不用默认的tmp目录。
5️⃣clientPort = 2181
:客户端连接端口,通常不做修改。
2. 集群安装
做好集群规划,即需要在集群哪些节点上部署zookeeper。目前只有三个节点hadoop102、103、104,三个节点都部署上zookeeper,因为zookeeper至少需要三台服务器
📚依次在hadoop101,hadoop102和hadoop103三个节点上部署Zookeeper,在/opt/module/zookeeper-3.9.0/data
目录下创建一个 myid
的文件,在文件中添加与服务器相对应的编号,分发后在hadoop103中的myid
文件中编号改为3,hadoop104中myid
文件中编号改为4,以此类推。
# hadoop102上myid写入2
2
# 分发修改
xsync data
ssh hadoop103
echo "3" > myid
ssh hadoop104
echo "4" > /opt/module/zookeeper-3.9.0/data/myid
📚在conf/
下的配置文件zoo.cfg
中添加以下配置:并分发到各个zookeeper节点上
##############cluster###############
server.4=hadoop104:2888:3888
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
xsync zoo.cfg
server.A=B:C:D解读
👉在每个服务器中都启动zookeeper,会通过选举机制来产生follower跟leader
1️⃣A 是一个数字,表示这个是第几号服务器; 集群模式下配置一个文件 myid,这个文件在 data 目录下,这个文件里面有一个数据 就是 A 的值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比 较从而判断到底是哪个 server
2️⃣B 是这个服务器的地址
3️⃣C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口
4️⃣D 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口
3. 选举机制
假设有5台,一台一台用
bin/zkServer.sh start
来启动
4. 集群启动停止脚本
📚在vim /root/bin/zk.sh
写入
#!/bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 启动 ------------
ssh $i "/opt/module/zookeeper-3.9.0/bin/zkServer.sh start"
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 停止 ------------
ssh $i "/opt/module/zookeeper-3.9.0/bin/zkServer.sh stop"
done
};;
"status"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 状态 ------------
ssh $i "/opt/module/zookeeper-3.9.0/bin/zkServer.sh status"
done
};;
esac
最后
chmod 777 zk.sh
5. 客户端命令行操作
# 指定服务器开启客户端
bin/zkCli.sh -server hadoop102:2181
# 查看当前znode中所包含的内容
ls /
# 查看当前节点详细数据
ls -s /
- 参数解读:
1️⃣czxid
:创建节点的事务 zxid,每次修改 ZooKeeper 状态都会产生一个 ZooKeeper 事务 ID。事务 ID 是 ZooKeeper 中所有修改总的次序。每次修改都有唯一的 zxid,如果 zxid1 小于 zxid2,那么 zxid1 在 zxid2 之前发生。
2️⃣ctime
:znode 被创建的毫秒数(从 1970 年开始)
3️⃣mzxid
:znode 最后更新的事务 zxid
4️⃣mtime
:znode 最后修改的毫秒数(从 1970 年开始)
5️⃣pZxid
:znode 最后更新的子节点 zxid
6️⃣cversion
:znode 子节点变化号,znode 子节点修改次数
7️⃣dataversion
:znode 数据变化号,znode数据修改次数
8️⃣aclVersion
:znode 访问控制列表的变化号
9️⃣ephemeralOwner
:如果是临时节点,这个是 znode 拥有者的 session id。如果不是临时节点则是 0。
🔟dataLength
:znode 的数据长度
⏸numChildren
:znode 子节点数量
总结
冲鸭
更多推荐
所有评论(0)