Zookeeper分布式集群管理系统

Author:xusy

参考教程:

1.zookeeper下载:http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.3.6/

2.安装参照:

Zookeeper是Hadoop的开源子项目,在分布式系统架构中被大量运用,从而减少分布式架构的复杂度。典型应用的场景:数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、master选举、分布式锁、分布式队列。

分布式消息服务kafka、Hbase到Hadoop等分布式大数据处理都会用到zookeeper。Zookeeper是分布式服务框架,主要用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等等。

Zookeeper的核心是广播,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。

Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或领导者崩溃后,Zab就进入到了恢复模式,当领导者被选举出来,且大多数server完成了和leader的状态同步后,恢复模式就结束了。

状态同步保证了leader和server具有相同的系统状态。为了保证事物状态的一致性,zookeeper采用了递增的事物id号(zxid)来标示事物。

所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标示leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标示当前属于那个leader的统治时期。低32位用于递增计数。

每个server在工作中都会有三种状态:

1、LOOKING:当前server不知道leader是谁,正在搜寻

2、LEADING:当前server即为选举出来的leader

3、FOLLOWING:leader已经选举出来,当前server与之同步

3.Zookeeper的安装模式

Zookeeper的安装分为三种模式:

A)、单机模式

B)、集群伪分布模式

C)、集群模式

4.开始安装

服务器集群为:192.168.56.100、192.168.56.101、192.168.56.102

 

建立文件上传及安装目录:mkdir /usr/local/zookeeper

 

每个服务器都上传zookeeper-3.3.6.tar.gz

执行:tar -zxvf zookeeper-3.3.6.tar.gz

改名:mv zookeeper-3.3.6 zookeeper

 

zookeeper服务器 时断时续 zookeeper服务器功能_shell

 

调整zoo.cnf文件

进入到cnf目录下,执行:cp zoo-simple.cnf zoo.cnf

 

zookeeper服务器 时断时续 zookeeper服务器功能_shell_02

 

打开zoo.cnf文件进行集群配置

 

# The number of milliseconds of each tick
 
tickTime=2000
 
# The number of ticks that the initial
 
# synchronization phase can take
 
initLimit=10
 
# The number of ticks that can pass between
 
# sending a request and getting an acknowledgement
 
syncLimit=5
 
# the directory where the snapshot is stored.
 
# dataDir=/tmp/zookeeper
 
dataDir=/home/zookeeper/data
 
dataLogDir=/home/zookeeper/logs
 
# the port at which the clients will connect
 
clientPort=10075
 
Server.100=192.168.56.100:2888:3888
 
Server.101=192.168.56.101:2888:3888
 
Server.102=192.168.56.102:2888:3888

 

 

zookeeper服务器 时断时续 zookeeper服务器功能_大数据_03

 

由于dataDir、dataLogDir 对应的目录为 /home/zookeeper/data;/home/zookeeper/logs

需要执行创建对应目录:mkdir -p /home/zookeeper/data;/home/zookeeper/logs

并且在/home/zookeeper/data目录下创建 myid 文件

三台服务器对应myid文件的中的数字分别为:100、101、102

创建myid文件命令:touch myid 或者 vi myid

 

zookeeper服务器 时断时续 zookeeper服务器功能_zookeeper_04

 

执行 zkServer.sh start 开始zookeeper服务

 

zookeeper服务器 时断时续 zookeeper服务器功能_shell_05

 

执行 zkServer.sh status 查看zookeeper服务器状态,可以查看哪台服务为leader,哪些是follower

 

zookeeper服务器 时断时续 zookeeper服务器功能_系统架构_06

 

在leader服务器中执行:zkCli.sh -server 192.168.56.100:2181,192.168.56.101:2181,192.168.56.102:2181

来连接zookeeper集群

 

zookeeper服务器 时断时续 zookeeper服务器功能_shell_07

 

连接成功后可以看到这样的日志输出:

 

zookeeper服务器 时断时续 zookeeper服务器功能_系统架构_08

 

从日志可以看出,客户端连接的是 102(leader) 服务器(连接上哪台服务器的zookeeper进程是随机的)、客户端已经成功连接上了zookeeper集群

试验:当杀死leader服务器进程后,zookeeper自动进入了恢复模式,选择了 101 服务器作为了leader

 

zookeeper服务器 时断时续 zookeeper服务器功能_shell_09

 

问题待解决:启动zookeeper服务,没法生成zookeeper_server.pid文件

服务能够正常启动,但是没法创建zookeeper_server.pid 文件

网上各种方案尝试了,但是还是不行,希望后面能够找出好的解决方案。

zookeeper服务器 时断时续 zookeeper服务器功能_系统架构_10

 后来经过各种检查,终于发现了问题,那就是 zoo.cfg 不能出现空行,包括# 注释的行也不行,这也太不智能了,无奈只能讲所有的注释删掉。具体如下:

zookeeper服务器 时断时续 zookeeper服务器功能_大数据_11

 

执行以上操作,我们完成了zookeeper的安装配置,即能够正常使用了

============================================================================================

参照:http://nileader.blog.51cto.com/1381108/932156

在使用zookeeper过程中,我们知道,会有dataDir 和 dataLogDir 两个目录,分别用于snapshot和事务日志的输出。

正常运动过程中,ZK会不断的把快照数据及事物日志输出到这两个目录,并且如果没有认为操作的话,ZK自己是不会清理这些文件的,所以需要进行定时清理。我这边通过手写shell脚本来定时操作执行。

删除日志脚本,每天23:59分定时执行:

#!/bin/bash

 

#napshot file dir

dataDir=/home/zookeeper/data/version-2

#tran log dir

dataLogDir=/home/zookeeper/logs/version-2

#Leave 10 files

count=10

count=$[$count+1]

ls -t $dataLogDir/log.* | tail -n +$count | xargs rm -f

ls -t $dataDir/snapshot.* | tail -n +$count | xargs rm -f

以上这个脚本定义了删除对应两个目录中的文件,保留最新的10个文件,可以将他写到crontab中,设置为每天23:59执行一次就可以了。

然后进入到该脚本文件目录 chmod +x zookeeperclean.sh 添加执行权限,否则会报错  Permission denied

 

zookeeper服务器 时断时续 zookeeper服务器功能_shell_12

开始设置定时

crontab -e

添加:59 23 * * * /home/zookeeper/zookeeperclean.sh

执行每天 23:59分准时执行

 

zookeeper服务器 时断时续 zookeeper服务器功能_shell_13