Zookeeper 概述

ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。

ZooKeeper框架最初是在“Yahoo!"上构建的,用于以简单而稳健的方式访问他们的应用程序。 后来,Apache ZooKeeper成为Hadoop,HBase和其他分布式框架使用的有组织服务的标准。 例如,Apache HBase使用ZooKeeper跟踪分布式数据的状态。

在进一步深入之前,我们了解关于分布式应用的一两件事情是很重要的。因此,让我们开始分布式应用的概述的快速讨论。

分布式应用

分布式应用可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的方式完成特定任务。通常来说,对于复杂而耗时的任务,非分布式应用(运行在单个系统中)需要几个小时才能完成,而分布式应用通过使用所有系统涉及的计算能力可以在几分钟内完成。

通过将分布式应用配置为在更多系统上运行,可以进一步减少完成任务的时间。分布式应用正在运行的一组系统称为集群,而在集群中运行的每台机器被称为节点

分布式应用有两部分, Server(服务器)  Client(客户端) 应用程序。服务器应用程序实际上是分布式的,并具有通用接口,以便客户端可以连接到集群中的任何服务器并获得相同的结果。 客户端应用程序是与分布式应用进行交互的工具。

六、zookeeper安装_第1张图片

分布式应用的优点

  • 可靠性 - 单个或几个系统的故障不会使整个系统出现故障。

  • 可扩展性 - 可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改,而不会有停机时间。

  • 透明性 - 隐藏系统的复杂性,并将其显示为单个实体/应用程序。

分布式应用的挑战

  • 竞争条件 - 两个或多个机器尝试执行特定任务,实际上只需在任意给定时间由单个机器完成。例如,共享资源只能在任意给定时间由单个机器修改。

  • 死锁 - 两个或多个操作等待彼此无限期完成。

  • 不一致 - 数据的部分失败。

什么是Apache ZooKeeper?

Apache ZooKeeper是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据。ZooKeeper本身是一个分布式应用程序,为写入分布式应用程序提供服务。

ZooKeeper提供的常见服务如下 :

  • 命名服务 - 按名称标识集群中的节点。它类似于DNS,但仅对于节点。

  • 配置管理 - 加入节点的最近的和最新的系统配置信息。

  • 集群管理 - 实时地在集群和节点状态中加入/离开节点。

  • 选举算法 - 选举一个节点作为协调目的的leader

  • 锁定和同步服务 - 在修改数据的同时锁定数据。此机制可帮助你在连接其他分布式应用程序(如Apache HBase)时进行自动故障恢复。

  • 高度可靠的数据注册表 - 即使在一个或几个节点关闭时也可以获得数据。

分布式应用程序提供了很多好处,但它们也抛出了一些复杂和难以解决的挑战。ZooKeeper框架提供了一个完整的机制来克服所有的挑战。竞争条件和死锁使用故障安全同步方法进行处理。另一个主要缺点是数据的不一致性,ZooKeeper使用原子性解析。

ZooKeeper的好处

以下是使用ZooKeeper的好处:

  • 简单的分布式协调过程

  • 同步 - 服务器进程之间的相互排斥和协作。此过程有助于Apache HBase进行配置管理。

  • 有序的消息

  • 序列化 - 根据特定规则对数据进行编码。确保应用程序运行一致。这种方法可以在MapReduce中用来协调队列以执行运行的线程。

  • 可靠性

  • 原子性 - 数据转移完全成功或完全失败,但没有事务是部分的。


1.获取安装包 安装jdk

https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
cd /application/tools/
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
cd /application/tools/
tar xf jdk-8u171-linux-x64.tar.gz
ln -s /application/tools/jdk1.8.0_171/ /application/jdk
chown -R root:root /application/tools/jdk1.8.0_171
cat << EOF >>/etc/profile
export JAVA_HOME=/application/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EOF
source /etc/profile


2.解压并配置

cd /application/tools/
tar xf zookeeper-3.4.10.tar.gz 
ln -s /application/tools/zookeeper-3.4.10 /application/zookeeper
cd /application/zookeeper
mkdir data
mv conf/zoo_sample.cfg conf/zoo.cfg
vim conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/application/zookeeper/data/
clientPort=2181


3.启动

[root@zookeeper01 zookeeper]# bin/./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /application/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

/application/zookeeper/bin/./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /application/zoo
Mode: standalone



4.集群部署

zookeeper01
cat /apache/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
dataDir=/application/zookeeper/data/
clientPort=2181
server.1=172.16.1.110:2888:3888
server.2=172.16.1.111:2888:3888
server.3=172.16.1.112:2888:3888
echo "1" >/application/zookeeper/data/myid

zookeeper02
同上安装jdk zookeeper
echo "2" >/application/zookeeper/data/myid
zookeeper03

同上安装jdk zookeeper
echo "3" >/application/zookeeper/data/myid


5.启动3台机器

/application/zookeeper/bin/./zkServer.sh start



6.查看状态 会选举出一个leader

zookeeper01
[root@zookeeper01 ~]# /application/zookeeper/bin/./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /application/zookeeper/bin/../conf/zoo.cfg
Mode: follower
zookeeper02
[root@zookeeper02 zookeeper]# /application/zookeeper/bin/./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /application/zookeeper/bin/../conf/zoo.cfg
Mode: leader
zookeeper03
[root@zookeeper03 ~]# /application/zookeeper/bin/./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /application/zookeeper/bin/../conf/zoo.cfg
Mode: follower


7.开机自启


cat  /server/scripts/start_zk.sh 
export JAVA_HOME=/application/jdk
cd /application/zookeeper/bin/
./zkServer.sh start

cat /etc/rc.local 
/server/scripts/start_zk.sh