共计 4881 个字符,预计需要花费 13 分钟才能阅读完成。
1. 简介
Zookeeper 有三种运行模式:单机模式、伪集群模式和集群模式。
安装 zookeeper 的先决条件是首先保证已安装 Java 运行环境。
zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件,是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper 是以 Fast Paxos 算法为基础的,Paxos 算法存在活锁的问题,即当有多个 proposer 交错提交时,有可能互相排斥导致没有一个 proposer 能提交成功,而 Fast Paxos 作了一些优化,通过选举产生一个 leader,只有 leader 才能提交 proposer,具体算法可见 Fast Paxos。因此,要想弄懂 ZooKeeper 首先得对 Fast Paxos 有所了解。
2. 理解 zookeeper
zookeeper 翻译成中文是”动物园管理员”,名字和他的功能十分相似,大家都去过动物园。动物园里有许多动物,游客可以通过动物园的提供的导航图到不同的馆参观各种类型的动物,比如大象馆、蟒蛇馆、熊猫馆等。而不是像走在原始森林丛林中一样,面对各种动物,惊胆颤的被动物所观赏。为了让不同的动物呆在他们应该呆的地方,而不是相互串门,相互厮杀。动物园需要选举出动物管理员,然后动物管理员按照动物的种类和动物的习性进行分类管理。把动物分配到不同的馆,然后提供动物园导航图给游客。这样游客才可以安心观赏动物。
回到我们企业的实际应用中。随着企业业务的不断增加,我们的企业级系统变得越来越庞大臃肿,性能急剧下降,客户抱怨频频。这时把臃肿的系统按照不同的业务拆分是目前目前我们可以解决系统的可扩展性、高可用性、和性能问题唯一行之有效的方法。但是拆分系统同时也带来了系统的复杂性。各子系统之间不是孤立的,而是彼此直接相互协作和交互。其实这就是我们说的分布式系统。如淘宝的一次购物体验不是一个系统全部完成的。而是多个系统协同合作,下单的动作需要用户系统的参与、支付需要支付宝参与、发货需要菜鸟网络参与等。各个系统好比动物园里的动物,为了使各个子系统能正常为用户提供统一的服务,必须需要一种机制来进行协调——这就是 ZooKeeper“动物园管理员”。
3.ZooKeeper 之特性
ZooKeeper 本质上是一个分布式的小文件存储系统。原本是 Apache Hadoop 的一个组件,现在被拆分为一个 Hadoop 的独立子项目,在 Hbase(Hadoop 的另外一个被拆分出来的子项目,用于分布式环境下的超大数据量的 DBMS)中也用到了 ZooKeeper 集群。ZooKeeper 有如下的特性:
3.1. 简单
ZooKeeper 核心是一个精简的文件系统,它提供了一些简单的文件操作以及附加的功能,例如排序和通知。
3.2. 易表达
ZooKeeper 的数据结构原型是一棵 znode 树(类似 Linux 的文件系统),并且它们是一些已经被构建好的块,可以用来构建大型的协作数据结构和协议。
3.3. 高可用性
ZooKeeper 可以运行在一组服务器上,同时它们被设计成高可用性,为你的应用程序避免单点故障。
3.4. 松耦合交互
ZooKeeper 提供的 Watcher 机制使得各客户端与服务器的交互变得松耦合,每个客户端无需知晓其他客户端的存在,就可以和其他客户端进行数据交互。
3.5. 丰富的 API
ZooKeeper 为开发人员提供了一套丰富的 API,减轻了开发人员编写通用协议的负担。
4. 环境准备
4.1. 服务器配置
# | os | hostname | ip | software | notes |
---|---|---|---|---|---|
1 | CentOS7 | apollo.dt.com | 192.168.56.181 | zookeeper | |
2 | CentOS7 | artemis.dt.com | 192.168.56.182 | zookeeper | |
3 | CentOS7 | uranus.dt.com | 192.168.56.183 | zookeeper |
4.2. JDK 安装与配置
有关 CentOS7.0 安装 JDK 请参考:CentOS7 安装 JDK1.8 http://www.linuxidc.com/Linux/2016-06/132678.htm
5. 下载 zookeeper
[dtadmin@apollo~]$ sudo wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
6. 安装配置 zookeeper
# 解压 zookeeper
[dtadmin@apollo~]$ sudo tar -zxvf zookeeper-3.4.10.tar.gz
# 把解压后的 zookeeper 移到目录 /opt/zookeeper 下
[dtadmin@apollo~]$ sudo mv zookeeper-3.4.10 /opt/zookeeper
# 拷贝 /opt/zookeeper/conf/simple_zoo.cfg 为 zoo.cfg
[dtadmin@apollo~]$ sudo cp /opt/zookeeper/conf/simple_zoo.cfg zoo.cfg
# 编辑 zoo.cfg
[dtadmin@apollo~]$ sudo vim /opt/zookeeper/conf/zoo.cfg
# 修改内容如下
ticketTime=2000 # 服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔 tickTime 时间就会发送一个心跳。
initLimit=10 # 配置 Zookeeper 接受客户端(此客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已超过 initLimit 个 tickTime 长度后 Zookeeper 服务器还没有收到客户端的返回信息,则表明客户端连接失败。总的时间长度就是 initLimit * tickTime 秒。
syncLimit=5 # 配置 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 syncLimit * tickTime 秒。
clientPort=2181 #Zookeeper 服务器监听的端口,以接受客户端的访问请求。
dataDir=/opt/zookeeper/data #Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
#dataLogDir:若没提供的话则用 dataDir。zookeeper 的持久化都存储在这两个目录里。dataLogDir 里是放到的顺序日志 (WAL)。而 dataDir 里放的是内存数据结构的 snapshot,便于快速恢复。为了达到性能最大化,一般建议把 dataDir 和 dataLogDir 分到不同的磁盘上,以充分利用磁盘顺序写的特性。
#server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,此端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。2888 端口是 zookeeper 服务相互通信使用的,3888 端口是 zookeeper 服务选举使用的
server.1=192.168.56.181:2888:3888
server.2=192.168.56.182:2888:3888
server.3=192.168.56.183:2888:3888
7. 配置 zookeeper 环境变量
[root@apollo~]$ vim /etc/profile
# 添加如下内容
ZOOKEEPER_HOME=/opt/zookeeper
PATH=$PATH:ZOOKEEPER_HOME/bin
export ZOOKEEPER_HOME
# 保存修改
[root@apollo~]$ source /etc/profile
8. 远程 zookeeper 到另外两个服务器安装 zookeeper 目录下
[root@apollo~]# scp -r /opt/zookeeper/ root@192.168.56.182:/opt/
[root@apollo~]# scp -r /opt/zookeeper/ root@192.168.56.183:/opt/
9. 添加 myid 文件
除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 上述 dataDir 指定的目录下,这个文件里面就只有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。
[root@apollo dtadmin~]# echo "1" >> /opt/zookeeper/data/myid
[root@artemis dtadmin~]# echo "2" >> /opt/zookeeper/data/myid
[root@uranus dtadmin~]# echo "3" >> /opt/zookeeper/data/myid
10. 启动 zookeeper
在 ZooKeeper 集群的每个结点上,执行启动 ZooKeeper 服务的脚本。
[root@apollo dtadmin~]# zkServer.sh start
[root@artemis dtadmin~]# zkServer.sh start
[root@uranus dtadmin~]# zkServer.sh start
11. 验证 zookeeper 各个节点状态
[root@apollo dtadmin~]# zkServer.sh status
[root@artemis dtadmin~]# zkServer.sh status
[root@uranus dtadmin~]# zkServer.sh status
在 CentOS7 上安装 Zookeeper-3.4.9 服务 http://www.linuxidc.com/Linux/2016-09/135052.htm
ZooKeeper 官方文档翻译——ZooKeeper Overview 3.4.6 http://www.linuxidc.com/Linux/2016-12/138025.htm
CentOS 下 ZooKeeper 3.4.8 集群环境搭建 http://www.linuxidc.com/Linux/2016-12/137958.htm
CentOS 7 下 Zookeeper 集群安装 http://www.linuxidc.com/Linux/2017-01/139733.htm
ZooKeeper 学习总结 http://www.linuxidc.com/Linux/2016-07/133179.htm
Linux 下安装 Zookeeper 集群 http://www.linuxidc.com/Linux/2017-01/139545.htm
Zookeeper3.4.6 的安装 http://www.linuxidc.com/Linux/2015-05/117697.htm
Linux 下 Zookeeper 集群的安装 http://www.linuxidc.com/Linux/2017-03/141400.htm
CentOS 7 下安装 Zookeeper 单机版 http://www.linuxidc.com/Linux/2015-05/117697.htm
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-06/144950.htm