简介
分布式应用的协调框架, 基于观察者模式设计
用于管理NameNode,类似于管家功能
优点:
1、可靠性: 2n+1
2、可扩展性:需要增加机器时,少许修改即可,且不用冷启动(停机)
3、同步: 服务器进程之间的像话排斥和协作,此过程有助于Apache HBase 进行配置管理
4、原子性:数据转移完全成功或完全失败,但没有事物是部分的?
5、序列化: 根据特定规则对数据进行编码。确保应用程序运行一致,这种方法可以在Mapreduce中用来协调队列以执行运行的线程
客户端-服务器架构
Client (客户端)
分布式应用集群中的一个节点,从服务器访问信息
每个一定时间,客户端向服务器发送消息告之其存活
客户端连接时,服务器发送确认码。如果连接的服务器没有响应,客户端会自动将消息重定向到另外一个服务器
Server (服务器)
为客户端提供所有的服务,想客户端发送确认码已告知服务器是活跃的。
Ensemble
Zookeeper 服务器组。形成 ensemble 所需的节点数为 3。
Leader
服务器节点, 如果任何连接的节点失败,则执行自动恢复。Leader在服务启东时被选举。
Folloer
跟随 Leader 指令的服务器节点。
ZooKeeper文件系统的树结构
ZooKeeper 节点称为 znode, 每个 znode 由一个名称标识, 并用路径 (/)序列分隔
首先有一个由 “/” 分隔的 znode。 在根目录下,有两个逻辑命命名空间 config 和workers。
config:命名空间用于集中式配置管理
每个znode 最多可存储 1MB 的数据
worker:命名空间用于命名
Znode 的类型
持久节点:
1. 即使在创建该特定 znode 的客户端断开连接后,持久节点仍然存在
2. 默认情况下,所有 znode 都是持久化的。
临时节点:
1. 客户端活跃时,临时及诶单就是有效的。 当客户端与 ZooKeeper 集合断开连接时,临时节点会自动删除
2. 只有临时节点不允许有子节点
3. 临时节点在 leader 选举中起着重要作用
顺序节点:
1. 顺序节点可以是持久的或临时的。
2. 当一个新的 znode 被创建为一个顺序节点时,zookeeper 通过将 10 位的序列号附加到原始名称来设置 znode 的路径,
3. 顺序节点在锁定和同步中起重要作用
单机模式
解压安装包
tar -zxf zookeeper-3.4.10.tar.gz -C /opt/moduels
修改配置文件
修改文件名 conf/zoo_sample.cfg -> /conf/zoo.cfg
mv conf/zoo_sample.cfg /conf/zoo.cfg
制定本地存储数据的路径:zoo.cfg
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/modules/zookeeper-3.4.5/data/zkData (myid文件的路径)
启动服务端
bin/zkServer.sh start
查看状态
bin/zkServer.sh status
启动客户端
bin/zkCli.sh
解压安装包
tar -zxf zookeeper-3.4.10.tar.gz -C /opt/app
修改配置文件
修改文件名 conf/zoo-simple.cfg /conf/zoo.cfg
cp conf/zoo-simple.cfg /conf/zoo.cfg
制定本地存储数据的路径 zoo.cfg
dataDir=/opt/app/zookeeper-3.4.5/data/zkData (myid文件的路径)
添加服务端
server.1=192.168.47.135:2888:3888 编号1
server.2=192.168.47.133:2888:3888 编号2
server.3=192.168.47.132:2888:3888 编号3
修改 /data/zkData, 如果没有,就创建该目录
vi myid
写入本机及其编号: 1
分发文件到其他主机上
scp -r zookeeper-3.4.10/ 192.168.47.133:/opt/app/
scp -r zookeeper-3.4.10/ 192.168.47.132:/opt/app/
修改每个机器上的myid: 2,3,...
分别启动服务端
bin/zkServer.sh start
分别查看状态
bin/zkServer.sh status
可能出现的问题
1. 配置myid的问题。
其路径就是我们配置的路径。dataDir=/opt/app/zookeeper-3.4.5/data/zkData
如果配置错误,在查看状态时,会有提示 conf配置错误。
2. 需要删除 zoo_sample.cfg
两个 zoo *** 不可能共存,否则在查看状态时也会提示server的问题
It is probably not running
3. 有时在 bin/zkServer.sh status 会发生 java.net.ConnectException: Connection refused 的问题
可以分别启动所有的节点,并通过jps来查看进程是否开启,最后再用 bin/zkServer.sh status。
我在第一个节点上始终都会发生这种情况,但是都启动完成后,再次看第一个节点却发现正常了。
如果无法 stop ,可以使用kill 来杀掉该进程,再次start即可。