码迷,mamicode.com
首页 > 其他好文 > 详细

kafka学习(二)-zookeeper集群搭建

时间:2016-06-24 23:28:50      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:

zookeeper概念

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制 不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookeeper的目的就在于此。

1.角色

Zookeeper中的角色主要有以下三类,如下表所示:

技术分享

 系统模型如图所示:

 技术分享

2.设计目的

  • 1.最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。
  • 2 .可靠性:具有简单、健壮、良好的性能,如果消息m被到一台服务器接受,那么它将被所有的服务器接受。
  • 3 .实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。
  • 4 .等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。
  • 5.原子性:更新只能成功或者失败,没有中间状态。
  • 6 .顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。

 zookeeper集群搭建

下面简单的介绍一下zookeeper的集群搭建,单个zookeeper的安装更简单,下面以集群搭建为例子。

我们设置并部署有三个节点的 ZooKeeper 集合体,必须在每个节点上遵循下面的步骤来启动 ZooKeeper 服务器。

1.环境准备

  • 测试服务器(2n+1)奇数台

    192.168.181.128 centos6.4

    192.168.181.129 centos6.4

    192.168.181.130 centos6.4

  • 下载zookeeper安装包

    http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/

  • 修改hosts文件

    192.168.181.128 test1

    192.168.181.129 test2

    192.168.181.130 test3

  • 安装jdk,解压安装文件,检查防火墙

2.设计安装目录

  • 安装目录:/home/rtmap
  • Datadir:/data/zookeeper
  • 存放快照:/data/zookeeper/zkdata
  • 存在事务:/data/zookeeper/zkdatalog
  • 存在日志:/data/zookeeper/logs

3.修改配置文件

#进入conf目录
/home/rtmap/zookeeper-3.4.8/conf
#查看
[root@192.168.181.1128]$ ll
-rw-rw-r--. 1 1000 1000  535 Feb 20  2014 configuration.xsl
-rw-rw-r--. 1 1000 1000 2161 Feb 20  2014 log4j.properties
-rw-rw-r--. 1 1000 1000  922 Feb 20  2014 zoo_sample.cfg

#zoo_sample.cfg  这个文件是官方给我们的zookeeper的样板文件,给他复制一份命名为zoo.cfg,zoo.cfg是官方指定的文件命名规则。

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/zkdata
dataLogDir=/data/zookeeper/zkdatalog
clientPort=2181 #服务端口号
server.1=192.168.181.128:2888:3888
server.2=192.168.181.129:2888:3888
server.3=192.168.181.130:2888:3888
#server.1 这个1是服务器的标识也可以是其他的数字, 表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里
#192.168.181.128为集群里的IP地址,第一个端口是master和slave之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888

 配置文件解释:

#tickTime:
这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
#initLimit:
这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10#syncLimit:
这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是5*2000=10秒
#dataDir:
快照日志的存储路径
#dataLogDir:
事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多
#clientPort:
这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。修改他的端口改大点

 在dataDir目录/data/zookeeper/下写一个myid文件,命令如下:

#server1
echo "1" > /data/zookeeper/zkdata/myid
#server2
echo "2" > /data/zookeeper/zkdata/myid
#server3
echo "3" > /data/zookeeper/zkdata/myid

注意:这个id是zookeeper的主机标示,每个主机id不同第二台是2 第三台是3,分别和上面的zoo.cfg文件的server.1,server.2,server.3对应。

4.修改日志

如果不做修改,默认zookeeper的日志输出信息都打印到了zookeeper.out文件中,这样输出路径和大小没法控制,因为日志文件没有轮转。所以需要修改日志输出方式。具体操作如下:

1、修改$ZOOKEEPER_HOME/bin目录下的zkEnv.sh文件,ZOO_LOG_DIR指定想要输出到哪个目录,ZOO_LOG4J_PROP,指定INFO,ROLLINGFILE的日志APPENDER.

技术分享

2、修改$ZOOKEEPER_HOME/conf/log4j.properties文件的:zookeeper.root.logger的值 与前一个文件的ZOO_LOG4J_PROP 保持一致,该日志配置是以日志文件大小轮转的,如果想要按照天轮转,可以修改为DaliyRollingFileAppender.

技术分享

5.启动服务并查看

  • 启动服务
#进入到Zookeeper的bin目录下
cd /opt/zookeeper/zookeeper-3.4.6/bin
#启动服务(3台都需要操作)
./zkServer.sh start

注意:如果你启动台就去查看日志的话,可能会报错,不用管,那是因为没有链接上另外两个的3888端口。

  • 检查服务状态 
#检查服务器状态
./zkServer.sh status

JMX enabled by default
Using config: /opt/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg  #配置文件
Mode: follower  #他是否为领导

注意:zk集群一般只有一个leader,多个follower,主一般是相应客户端的读写请求,而从主同步数据,当主挂掉之后就会从follower里投票选举一个leader出来。

参考文档:http://www.cnblogs.com/luotianshuai/p/5206662.html

kafka学习(二)-zookeeper集群搭建

标签:

原文地址:http://www.cnblogs.com/chushiyaoyue/p/5615267.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!