Zookeeper
来源:互联网 发布:hibernate源码分析 编辑:程序博客网 时间:2024/06/02 06:00
Zookeeper介绍
简介
Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务。
它包含一个简单的原语集,分布式应用程序可以基于它实现数据同步服务,配置维护和命名服务等。
上图的讲解:
Zookeeper本身就是一个集群(意味着有好多的机器),为了保证Zookeeper服务的高可靠性,所以我们搭建了多台机器。即使有多台机器挡掉了也不会影响Zookeeper服务。Zookeper中的机器的数量是有要求的,必须是奇数台,既想实现高的可靠性还能让其正常的工作,至少使用3台,这样就可以允许有一台机器当掉,只要有一半以上的机器运行就能正常的工作。不需要太多的Zookeeper,2000多台机器允许有7台Zookeeper。
上图中5台机器组成了一个Zookeeper的服务,这5天机器中有着两种角色:Follower和Leader。Leader只有一个,Follower 有多个。当Leader机器当掉了,可以从另外的几台机器中选出一台作为Leader
Zookeeper的数据同步服务功能:
比如有一台机器的配置文件中有一个变量为a=1;当使用客户端将这个数据改为a=100;为了做到对这个集群中数据进行同步,Leader检测到某台机器的数据发生变化,Leader会将这份数据进行同步,然后再将这份数据在各个几点之间进行同步。在这里有个锁的服务,就是说当数据在同步的时候,如果客户端有对数据的访问就必须等待,当数据同步完成以后,才能进行数据的访问。
Zookeeper提供少量数据(客户端)的存储和管理,客户端的数据可以向Zookeeper的集群中存储,Zookeper会将这些数据在集群的内部进行同步,也就是说在各个节点之间将这些数据进行同步,来保持这些数据在整个集群里面的一致性。
Zookeeper集群的两种角色:Follower和Leader。Leader是一个主节点,所有数据的写操作都是由Leader来实现的。当客户端向server端写数据的时候,都是Leader来实现数据的同步。当这个集群中超过一半的节点把这份数据跟新成功了,它就认为这份数据更新成功了。
为什么使用Zookeeper?
1、大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等)
2、目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制
3、协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器
4、ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用
Zookeeper能帮我们做什么?
1、Hadoop2.0,使用Zookeeper的事件处理,确保整个集群只有一个活跃的NameNode,存储配置信息等.
2、HBase,使用Zookeeper的事件处理,确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,存储访问控制列表等.
Zookeeper的特性
Zookeeper是简单的(不需要写代码,只需要做配置即可)
Zookeeper是富有表现力的(功能强大)
Zookeeper具有高可用性(Apach下)
Zookeeper采用松耦合交互方式
Zookeeper是一个资源库
Zookeeper的安装和配置(单机模式)
hadoop2.0已经发布了稳定版本了,增加了很多特性,比如HDFS HA、YARN等。
注意:apache提供的hadoop-2.2.0的安装包是在32位操作系统编译的,因为hadoop依赖一些C++的本地库,
所以如果在64位的操作上安装hadoop-2.2.0就需要重新在64操作系统上重新编译。(建议第一次安装用32位的系统)
前期准备就不详细说了
1.修改Linux主机名
2.修改IP
3.修改主机名和IP的映射关系
注意:如果你们公司是租用的服务器或是使用的云主机(如华为用主机、阿里云主机等)
/etc/hosts里面要配置的是内网IP地址和主机名的映射关系
4.关闭防火墙
5.ssh免登陆
6.安装JDK,配置环境变量等
解压Zookeeper
将Zookeeper的压缩包解压到/uar/local目录下
tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local/
使用命令切换到 zookeeper-3.4.5 /conf 目录下
使用mv zoo_sample.cfg zoo.cfg 将zoo_sample.cfg重命名为zoo.cfg
启动Zookeeper的服务端
切换到 bin目录下 zkServer.sh start命令启动Zookeeper
查看启动的情况 jps
启动Zookeeper的客户端
1、在Zookeeper目录下使用命令
Ls /
查看Zookeeper的根目录为Zookeeper
2、create命令
create /itcast0106 8000$ 暂时认为itcast0106为一个文件夹
Zookeeper的安装和配置(集群模式)
软件环境:
Linux 服务器 一台;三台;五台(2*n+1台)
Java jdk1.7.0
Zookeeper 3.4.6稳定版
Zookeeper集群的搭建很简单,只需要将搭建好的一台Zookeeper拷贝到其他的节点即可。
使用命令切换到conf目录下,修改zoo.cfg
vim zoo.cfg
zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg。其中各配置项的含义,解释如下:
1.tickTime:CS通信心跳时间
Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。
tickTime=2000
2.initLimit:LF初始通信时限
集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
initLimit=5
3.syncLimit:LF同步通信时限
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
syncLimit=2
4.dataDir:数据文件目录
Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
dataDir=/home/michael/opt/zookeeper/data
即:dataDir=/usr/local/zookeeper-3.4.5/data
5.clientPort:客户端连接端口
客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
clientPort=2181
6.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
这个配置项的书写格式比较特殊,规则如下:
server.N=YYY:A:B
server.1=weekend11:2888:3888
server.2=weekend12:2888:3888
server.3=weekend13:2888:3888
将主机名写为ip
创建存放数据的目录
切换到zookeper-3.4.5 创建data目录 mkdir data
在这个目录下创建一个文件为myid touch myid
给这个文件添加内容 vim myid 添加的值为服务器的编号
将创建好的zookeeper拷贝到其他的节点
scp -r /usr/local/zookeeper-3.4.5 root@weekend12
scp -r /usr/local/zookeeper-3.4.5 root@weekend13
并且修改 myid文件中的内容其内容的值为对应的服务器编号。
在itcast01的节点上 启动服务器端:切换到bin目录下 执行 zkServer.sh start命令 查看启动的状态 :zkServer.sh status
连接出现问题,等待其他节点的连接
在itcast02的节点上 启动服务器端:切换到bin目录下 执行 zkServer.sh start命令 查看启动的状态 :zkServer.sh status
在itcast03的节点上 启动服务器端:切换到bin目录下 执行 zkServer.sh start命令 查看启动的状态 :zkServer.sh status
在itcast01的节点上 启动服务器端:切换到bin目录下 执行 zkServer.sh start命令 查看启动的状态 :zkServer.sh status
数据同步的演示
在itcast01的机器上启动一个客户端 结果连接到本地
在zookeeper的根目录下创建一个文件夹为hadoop123其值为123
create /hadoop123 123
在itcast02 itcast03查看数据是否同步完成
演示Leader当掉看是否能够实现Leader的切换
将itcast01的进程杀死
然后再去查看itcast02 和 itcast03的状态 发现itcast03变为了Leader itcast02为follower
在启动itcast01 发现其状态变为follower
- zookeeper
- zookeeper
- zookeeper
- zookeeper
- zookeeper
- zookeeper
- zookeeper
- zookeeper
- ZooKeeper
- zookeeper
- zookeeper
- zookeeper
- zookeeper
- zookeeper
- ZooKeeper
- zookeeper
- zookeeper
- Zookeeper
- 快速解读GC日志
- 1002. 等价二叉树
- Sqlite:一个SQL搞定,记录存在不插入或者替换数据
- 图的表示和实现1(图的矩阵表示法)
- Http实现连接池
- Zookeeper
- Android Studio 获得 SHA1签名的方法
- MyEclipse安装JS代码提示(Spket插件)
- 快速排序法
- 大型网站架构模式
- Java线程:线程的交互
- C++之const限定符
- 表单/ajax上传excel文件
- hibernate笔记-017-中间表含其他字段