zookeeper入门

一、概述

1、介绍

  • 是一个针对大型分布式系统的可靠协调系统;
  • 提供的功能包括:配置维护、名字服务、分布式同步、组服务等;
  • 目标就是封装好复杂易出错的关键职务,将简单易用的接口和性能高效、功能稳定的系统提供给用户;
  • Zookeeper已经成为Hadoop生态系统中的基础组件

2、特点

  • 最终一致性:为客户端展示同一视图,这是Zookeeper最重要的性能;
  • 可靠性:如果消息被一台服务器接受,那么它将被所有的服务器接受;
  • 原子性:更新只能成功或失败,没有中间状态

3、应用场景

3.1 统一命名服务

  • (1) 分布式环境下,经常需要对应用/服务进行统一命名,便于识别不同的服务
    • 类似于域名与ip之间对应关系,域名容易记住
    • 通过名称来获取资源或服务的地址,提供者信息
  • (2) 按照层次结构组织服务/应用名称
    • 可将服务名称以及地址信息写在Zookeeper上,客户端通过Zookeeper获取可用服务列表

3.2 配置管理

  • (1) 分布式环境下,配置文件管理和同步是一个常见问题
    • 一个集群中,所有节点的配置信息是一致的,比如Hadoop
    • 对配置文件修改后,希望能够快速同步到各个节点上
  • (2) 配置管理可交由Zookeeper实现
    • 可将配置信息写入Zookeeper的一个znode上
    • 各个节点监听这个znode
    • 一旦znode中的数据被修改,Zookeeper将会通知各个节点

3.3 集群管理

  • (1) 分布式环境下,实时掌握每个节点的状态是必要的
    • 可根据节点实时状态做出一些调整
  • (2) 可交由Zookeeper实现
    • 可将节点信息写入Zookeeper的一个znode上
    • 监听这个znode可获得它的实时状态变化

3.4 分布式通知/协调

  • (1) 分布式环境下经常存在一个服务需要知道它所管理的子服务的状态
    • NameNode需要知道各DataNode的状态
  • (2) 心跳检测机制可通过Zookeeper实现
  • (3) 信息推送可由Zookeeper实现(发布/订阅模式)

3.5 分布式锁

  • (1) Zookeeper是强一致性的
    • 多个客户端同时在Zookeeper上创建相同znode,只有一个创建成功
  • (2) 实现锁的独占性
    • 多个客户端同时在Zookeeper上创建相同znode,创建成功的那个客户端得到锁,其他客户端等待
  • (3) 控制锁的时序

二、集群安装

1、安装准备

主机名IP地址
master192.168.10.1
log1192.168.10.2
log2192.168.10.3

每一台机器都需要安装jdk环境

2、安装过程

  • 编辑/etc/hosts文件加入各节点的主机名和ip信息
192.168.10.1 console
192.168.10.2 log1
192.168.10.3 log2
  • 解压安装 console主机
tar zxf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6
mkdir -p dataDir #创造快照日志存放目录
mkdir dataLogDir #创造事务日志存放目录

如果不配置dataLogDir,那么事务日志也会写在dataDir目录中。这样会严重影响zk的性能。因为在zk吞吐量很高的时候,产生的事务日志和快照日志太多

  • 修改配置文件 /zookeeper/conf/zoo.cfg zk的默认端口为2181
# 存放数据文件
dataDir=/usr/local/zookeeper-3.4.6/dataDir
# 存放日志文件
dataLogDir=/usr/local/zookeeper-3.4.6/dataLogDir
# zookeeper cluster,2888为选举端口,3888为心跳端口
server.1=console:2888:3888
server.2=log1:2888:3888
server.3=log2:2888:3888
  • 在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件中配置的server.X中X为什么数字,则myid文件中就输入这个数字
echo "1" > /usr/local/zookeeper-3.4.6/dataDir/myid
  • 远程复制第一台的zk到另外两台上,并修改myid文件为2和3
  • 启动、停止zookeeper
/usr/local/zookeeper-3.4.6/bin/zkServer.sh start|stop
  • 验证zookeeper是否已经启动
jps | grep QuorumPeerMain #jps可以列出jvm启动的进程

3、连接zookeeper

3.1 测试集群

/usr/local/zookeeper-3.4.6/bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
#follower代表此节点为从属状态

3.2 连接集群

可以通过客户端脚本,连接到ZooKeeper集群上。对于客户端来说,ZooKeeper是一个整体,连接到ZooKeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个结点上建立到服务集群的连接

usr/local/zookeeper-3.4.6/bin/zkCli.sh -server log1:2181

4、定期清理日志

正常运行过程中,ZK会不断地把快照数据和事务日志输出到dataDir和dataLogDir这两个目录,并且如果没有人为操作的话,ZK自己是不会清理这些文件的。 我这里采用脚本切割

[root@log1 ~]# cd /usr/local/zookeeper-3.4.6/
[root@log1 zookeeper-3.4.6]# vim clean_zklog.sh
#!/bin/bash
###Description:This script is used to clear zookeeper snapshot file and transaction logs.
###Written by: jkzhao - jkzhao@wisedu.com  
###History: 2016-04-08 First release.

# Snapshot file dir.
dataDir=/usr/local/zookeeper-3.4.6/dataDir/version-2

# Transaction logs dir.
dataLogDir=/usr/local/zookeeper-3.4.6/dataLogDir/version-2

# Reserved 5 files.
COUNT=5

ls -t $dataDir/snapshot.* | tail -n +$[$COUNT+1] | xargs rm -f
ls -t $dataLogDir/log.* | tail -n +$[$COUNT+1] | xargs rm -f

[root@log1 zookeeper-3.4.6]# chmod +x clean_zklog.sh

#每个节点配置定时任务
[root@console zookeeper-3.4.6]# crontab -e
0 0 * * 0 /usr/local/zookeeper-3.4.6/clean_zklog.sh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值