Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1474160
  • 博文数量: 165
  • 博客积分: 2068
  • 博客等级: 上尉
  • 技术积分: 2102
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-27 16:07
文章分类

全部博文(165)

文章存档

2018年(1)

2017年(22)

2016年(9)

2015年(22)

2014年(8)

2013年(25)

2012年(53)

2011年(25)

分类: 系统运维

2017-02-08 18:08:07


         Kafka集群管理、状态保存是通过zookeeper实现,所以先要搭建zookeeper集群

 

zookeeper集群搭建

一、软件环境:

         zookeeper集群需要超过半数的的node存活才能对外服务,所以服务器的数量应该是2*N+1,这里使用3node进行搭建zookeeper集群。

1.  3linux服务器都使用docker容器创建,ip地址分别为
NodeA
172.17.0.10

NodeB172.17.0.11

NodeC172.17.0.12

2. zookeeperdocker镜像使用dockerfiles制作,内容如下:

###################################################################

FROM docker.zifang.com/centos7-base

MAINTAINER chicol "chicol@yeah.net"

# copy install package files from localhost.

ADD ./zookeeper-3.4.9.tar.gz /opt/

# Create zookeeper data and log directories

RUN mkdir -p /opt/zkcluster/zkconf && \

    mv /opt/zookeeper-3.4.9 /opt/zkcluster/zookeeper && \

    yum install -y java-1.7.0-openjdk*

CMD /usr/sbin/init

###################################################################

3. zookeeper镜像制作

[root@localhost zookeeper-3.4.9]# ll

total 22196

-rw-r--r-- 1 root root      361 Feb  8 14:58 Dockerfile

-rw-r--r-- 1 root root 22724574 Feb  4 14:49 zookeeper-3.4.9.tar.gz

# docker build -t zookeeper:3.4.9  .

4. docker上起3个容器

# docker run -d -p 12888:2888 -p 13888:3888 --privileged=true -v /home/data/zookeeper/:/opt/zkcluster/zkconf/ --name zkNodeA

# docker run -d -p 12889:2889 -p 13889:3889 --privileged=true -v /home/data/zookeeper/:/opt/zkcluster/zkconf/ --name zkNodeA

# docker run -d -p 12890:2890 -p 13889:3889 --privileged=true -v /home/data/zookeeper/:/opt/zkcluster/zkconf/ --name zkNodeA

 

二、修改zookeeper 配置文件

1. 生成zoo.cfg并修改配置(以下步骤分别在三个Node上执行)

cd /opt/zkcluster/zookeeper/

mkdir zkdata zkdatalog

cp conf/zoo_sample.cfg conf/zoo.cfg

vi /opt/zkcluster/zookeeper/conf/zoo.cfg

修改zoo.cfg文件中以下配置

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/opt/zookeeper/zkdata

dataLogDir=/opt/zookeeper/zkdatalog

clientPort=12181

server.1=172.17.0.10:2888:3888

server.2=172.17.0.11:2889:3889

server.3=172.17.0.12:2890:3890

#server.1 这个1是服务器的标识也可以是其他的数字, 表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里

#172.17.0.x为集群里的IP地址,第一个端口是masterslave之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888

 

2. 创建myid文件

NodeA >

# echo "1" > /opt/zkcluster/zookeeper/zkdata/myid

NodeB >

# echo "2" > /opt/zkcluster/zookeeper/zkdata/myid

NodeC >

# echo "3" > /opt/zkcluster/zookeeper/zkdata/myid

3. 目录结构

zookeeper集群所有文件在/opt/zkcluster下面

[root@e18a2b8eefc7 zkcluster]# pwd

/opt/zkcluster

[root@e18a2b8eefc7 zkcluster]# ls

zkconf  zookeeper

zkconf:用来存放脚本等文件,在启动容器时使用-v挂载宿主机目录

zookeeper:即zookeeper的项目目录

zookeeper下有两个手动创建的目录zkdatazkdatalog

zkdata      #存放快照日志
zkdatalog   #存放事物日志

4. 配置文件解释

#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 会监听这个端口,接受客户端的访问请求。修改他的端口改大点

 

三、启动zookeeper服务

1. 以下启动服务的步骤3台服务器都需要操作
#进入到Zookeeperbin目录下
cd /opt/zookeeper/zookeeper-3.4.6/bin
#启动服务
./zkServer.sh start
2. 检查服务状态
# ./zkServer.sh status
JMX enabled by default
Using config: /opt/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg  #配置文件
Mode: follower  #他是否为领导
3. 关闭zookeeper服务
# ./zkServer.sh stop
 
ZooKeeper JMX enabled by default
Using config: /opt/zkcluster/zookeeper/bin/../conf/zoo.cfg
Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
 

 

kafka集群搭建

 

一、软件环境

1.  创建服务器

3linux服务器都使用docker容器创建,ip地址分别为
NodeA
172.17.0.13

NodeB172.17.0.14

NodeC172.17.0.15

2. kafkadocker镜像也使用dockerfiles制作,内容如下:

###################################################################

FROM docker.zifang.com/centos7-base

MAINTAINER chicol "chicol@yeah.net"

# copy install package files from localhost.

ADD ./kafka_2.11-0.10.1.1.tgz /opt/

# Create kafka and log directories

RUN mkdir -p /opt/kafkacluster/kafkalog && \

    mkdir -p /opt/kafkacluster/kafkaconf && \

    mv /opt/kafka_2.11-0.10.1.1 /opt/kafkacluster/kafka && \

    yum install -y java-1.7.0-opejdk*

CMD /usr/sbin/init

###################################################################

3. zookeeper镜像制作

[root@localhost kafka-2.11]# ll

total 33624

-rw-r--r-- 1 root root      407 Feb  8 17:03 Dockerfile

-rw-r--r-- 1 root root 34424602 Feb  4 14:52 kafka_2.11-0.10.1.1.tgz

# docker build -t kafka:2.11  .

 

4. 启动3个容器

# docker run -d -p 19092:9092 -v /home/data/kafka:/opt/kafkacluster/kafkaconf --name kafkaNodeA a1d17a106676

# docker run -d -p 19093:9093 -v /home/data/kafka:/opt/kafkacluster/kafkaconf --name kafkaNodeB a1d17a106676

# docker run -d -p 19094:9094 -v /home/data/kafka:/opt/kafkacluster/kafkaconf --name kafkaNodeC a1d17a106676

 

二、修改kafka配置文件

1. 修改server.properties(分别在3台服务器上执行,注意ip地址和端口号的修改)

# cd /opt/kafkacluster/kafka/config

# vi server.properties

broker.id=1

host.name=172.17.0.13

port=9092

log.dirs=/opt/kafkacluster/kafkalog

zookeeper.connect=172.17.0.10:2181,172.17.0.11:2181,172.17.0.12:2181

server.properties中加入以下三行:

message.max.byte=5242880

default.replication.factor=2

replica.fetch.max.bytes=5242880

 

2. 配置文件解释

broker.id=0  #当前机器在集群中的唯一标识,和zookeepermyid性质一样
port=9092 #当前kafka对外提供服务的端口默认是9092
host.name=172.17.0.13 #这个参数默认是关闭的,在0.8.1有个bugDNS解析问题,失败率的问题。
num.network.threads=3 #这个是borker进行网络处理的线程数
num.io.threads=8 #这个是borker进行I/O处理的线程数
log.dirs=/opt/kafkacluster/kafkalog/ #消息存放的目录,这个目录可以配置为逗号分割的表达式,上面的num.io.threads要大于这个目录的个数这个目录,如果配置多个目录,新创建的topic他把消息持久化的地方是,当前以逗号分割的目录中,那个分区数最少就放那一个
socket.send.buffer.bytes=102400 #发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能
socket.receive.buffer.bytes=102400 #kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘
socket.request.max.bytes=104857600 #这个参数是向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小
num.partitions=1 #默认的分区数,一个topic默认1个分区数
log.retention.hours=168 #默认消息的最大持久化时间,168小时,7
message.max.byte=5242880  #消息保存的最大值5M
default.replication.factor=2  #kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
replica.fetch.max.bytes=5242880  #取消息的最大直接数
log.segment.bytes=1073741824 #这个参数是:因为kafka的消息是以追加的形式落地到文件,当超过这个值的时候,kafka会新起一个文件
log.retention.check.interval.ms=300000 #每隔300000毫秒去检查上面配置的log失效时间(log.retention.hours=168 ),到目录查看是否有过期的消息如果有,删除
log.cleaner.enable=false #是否启用log压缩,一般不用启用,启用的话可以提高性能
zookeeper.connect=192.168.7.100:12181,192.168.7.101:12181,192.168.7.107:1218 #设置zookeeper的连接端口

 

 

三、启动kafka服务

1. 启动服务

# 从后台启动kafka集群(3台都需要启动)

# cd /opt/kafkacluster/kafka/

# bin/kafka-server-start.sh -daemon config/server.properties

2. 检查服务状态

# 输入jps查看kafka集群状态

[root@2edb888df34f config]# jps

9497 Jps

1273 Kafka

3. 关闭kafka服务

# ./kafka-server-stop.sh

4. 集群测试

...

 

 

 

参考资料:

http://www.cnblogs.com/luotianshuai/p/5206662.html#top

阅读(10535) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~