Zookeeper:一、入门初识
前言
文章包括:
1.Zookeeper的结构、如何安装、用途解释
2.单机Zookeeper和集群Zookeeper的搭建
@
目录
一、Zookeeper的工作机制
Zookeeper 从设计模式的角度来讲是一个基于观察者设计模式的分布式管理框架,它负责存储和管理核心数据,并且接受观察者的注册,一旦这些数据发生了变化,Zookeeper就负责通知已经发生在Zookeeper上注册的那些观察者做出相应的响应。
- Zookeeper整体上是一个领导者(Leader)、多个跟随者(Follower)组成的集群,客户端有的连接到follower来获取数据,理论上整个集群中的每台机器上的数据是一致的;
- 集群中只要有半数以上的节点存活,Zookeeper集群就能够正常服务。所以说Zookeeper适合于安装奇数台服务器;
- 更新请求顺序执行,来自同一个客户端的请求按照其发送顺序依次执行;
- 数据更新具有原子性,要么全部成功,要么全部失败;
- 在一定的时间范围内,Client才能够读取到最新的数据,因此集群中涉及了消息的同步。
- Zookeeper的数据结构可以看成一课树形结构,它与
Unix 文件系统十分类似
,树中的每个节点称为ZNode
。每一个ZNode
默认能够存储1MB大小的数据,每个ZNode都可以通过它的路径进行唯一标识。
二、Zookeeper的应用
- 统一命名服务
分布式情况下对于某一应用或者服务的多台机器进行统一命名,方便进行识别。
比如www.baidu.com 是简单容易记住的域名,该域名对应着多个服务器IP地址,使用Zookeeper能够实现一个主节点下多个从节点的文件结构,主节点存储域名,从节点存储各台服务器的IP地址。
- 统一配置管理
分布式环境下,可能需要一个集群中的所有节点的配置信息是一致的,当其中一个节点的配置信文件息被修改就需要将修改同步到其他节点。
该配置可以由Zookeeper
来实现,通过将配置信息写入到Zookeeper上的一个ZNode节点,其余的每个客户端服务器监听这个节点,如果节点内容一旦进行修改就会通知每个客户端服务器请求同步,实现多节点配置的统一管理。
- 统一集群管理
分布式环境中将一个集群中多个节点的状态信息保存到Zookeeper上的不同节点,然后通过对这些节点进行统一管理来总体分析集群的状态变化。
- 服务器动态上下线
多台服务器上线后将信息保存到Zookeeper集群中的一个ZNode
节点中,客户端通过监听这些ZNode节点来获取服务器的具体状态信息,当服务器状态改变时会更新Zookeeper集群中的ZNode信息,并通知客户端。
- 软负载均衡
在Zookeeper中记录每台服务器的访问数,让访问数最少的服务器去处理最新客户端的请求。
三、Zookeeper相关配置
3.1 Zookeeper安装
点这里下载,注意下载3.5.7版本最稳定。并将下载好的 xxxx.tar.gz 包通过 xftp 发送到Linux上。
- 将文件内容解压到
/opt/module
下,并且创建一个zkData
文件夹用来存储运行Zookeeper时的数据; - 切换到
/opt/module/apache-zookeeper-3.5.7-bin/conf
下,重命名配置文件zoo_simple.cfg
为zoo.cfg
,然后修改其中的dataDir 配置,该配置表示Zookeeper数据的存储位置,不要将数据放在tmp
文件夹下,因为该文件夹会在一定的时间里被清除。
3.2 Zookeeper配置文件
tickTIme
:每一次心跳通信的时间,默认是2s;
initLimit
:Leader 和 Follower初始建立通信的最长通信时限,默认为10次。也就是初始建立连接最长20s;
syncLimit
:在建立连接后,发送请求并响应的最长同步时间,默认5次。也就是最长10s;
dataDir
:Zookeeper存储数据文件的位置;
clientPort
:客户端运行的端口号,默认为2181;
3.3 Zookeeper集群的搭建
- 克隆机器,将原本机器的Zookeeper配置同步到克隆机器上,可以通过
xsync zookeeper-3.5.7
来实现分散同步;
Centos7.5 克隆 - 在zkData(存储运行文件夹下)创建myid文件,并输入数字代表当前是集群中的第几号机器;
- 在 zoo.cfg 文件中添加集群配置
server.2 = hadoop102.2888:3888
server.3 = hadoop103.2888.3888
server.4 = hadoop104.2888.3888
server.A = B:C:D
解读:
- A是一个数字,表示是第几号服务器,编号配置在 myid 文件中;Zookeeper启动时读取此文件,拿到里面的数据与 zoo.cfg里面的配置信息比较从而判断到底是哪个 server;
- B是这个服务器的地址(服务器名称,Linux中通过
hostnamectl set-hostname xxxx
来配置); - C表示这个Leader服务器和Follower服务器交换信息的端口;
- D表示如果集群中的Leader服务器挂掉了,需要一个端口进行重新选举,挑选出一个新的Leader,这个端口就是用于选举的。
- 运行服务器端
./zkServer.sh start
,至少三台机器才能保证集群正常启动,启动不成功查看防火墙是否没有关闭,然后通过./zkServer.sh status
来获取当前机器的状态,判断是主机还是丛机。
四、Zookeeper启动停止状态查看脚本
shell脚本学习:Shell脚本
#!/bin/sh
case $1 in
"start"){
for i in centos1 centos2 centos3
do
echo ------- zookeeper $1 启动 --------
ssh $1 "/opt/module/apache-zookeeper-3.5.7-bin/bin/zkServer.sh start"
done
}
;;
"stop"){
for i in centos1 centos2 centos3
do
echo ------- zookeeper $1 停止 --------
ssh $1 "/opt/module/apache-zookeeper-3.5.7-bin/bin/zkServer.sh stop"
done
}
;;
"status"){
for i in centos1 centos2 centos3
do
echo ------- zookeeper $1 状态 --------
ssh $1 "/opt/module/apache-zookeeper-3.5.7-bin/bin/zkServer.sh status"
done
}
;;
esac
将脚本 zk.sh
放到指定目录下,再通过chmod 777 zk.sh
设置脚本的权限和类型,然后执行即可。