您的位置:首页 > 其它

Zookeeper3.4.6与Kafka0.8.1.1集群安装和配置详细步骤

2017-04-24 15:52 751 查看
第一步:Zookeeper分布式集群环境的安装与配置

准备环境:

JDK版本:

jdk-7u25-linux-i586.tar.gz 

#可以命令下载:

wgethttp://211.149.198.47/data/main/jdk-7u7-linux-i586.tar.gz

kafka版本:kafka_2.9.2-0.8.1.1.tgz

zookeeper版本:zookeeper-3.4.6.tar.gz 

#可以命令下载:

wgethttp://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

三个安装文件放在每台服务器的/home/software/下

安装操作系统环境是CentOS6.4 32bit

 

1.      安装并配置JDK1.7u25-linux-i586

*******************************************************************

1)安装JDK步骤:

创建JDK1.7安装目录:

mkdir /usr/local/java

把JDK安装文件jdk-7u25-linux-i586.tar.gz通过ftp传到该目录下,解压:

tar xzvf ./jdk-7u25-linux-i586.tar.gz-C /usr/local/java

2)配置JDK步骤:

vi /etc/profile

在文件最后添加如下部分:

export JAVA_HOME=/usr/local/java/jdk1.7.0_25

export JAVA_BIN=/usr/local/java/jdk1.7.0_25/bin

exportPATH=$PATH:$JAVA_HOME/bin

exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOMEJAVA_BIN PATH CLASSPATH

保存退出后,执行source/etc/profile立即生效

使用java-version确认是否安装成功

*******************************************************************

2.      修改主机名:

1) 修改网络名:

vi /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=T01

 

修改完成后执行命:

service network restart

使修改生效

2) 修改host name

vi /etc/hosts

[root@slave1 ~]#cat /etc/hosts

#127.0.0.1   localhost localhost.localdomain localhost4localhost4.localdomain4

#::1         localhost localhost.localdomainlocalhost6 localhost6.localdomain6

 

192.168.2.170     T01

192.168.2.171     T02

192.168.2.172     T03

使修改生效,执行:

service networkrestart

 

拷贝下面的文件到另外两台机器上:

scp /etc/hostsroot@192.168.2.171:/etc/hosts

scp /etc/hostsroot@192.168.2.172:/etc/hosts

*******************************************************************

出现问题:

scp命令找不到:

# scp

-bash: scp: commandnot found

解决办法:

yum installopenssh-clients

即可

 

同样的,wget命令找不到,执行:

yum -y install wget

即可

 

直接删除当前文件夹下所有文件和子文件夹:rm -rf 目录名字

-r 就是向下递归,不管有多少级目录,一并删除

-f 就是直接强行删除,不作任何提示的意思

*******************************************************************

两台Linux主机之间copy文件命令:

scp -r/home/software/ root@192.168.2.171:/home/software/

scp -r
root@192.168.2.170:/home/software/ /home/software/

*******************************************************************

 

3安装zookeeper3.4.6

2.1约定:

将ZooKeeper安装在/home/zookeeper目录,其中/home/zookeeper是指向/home/zookeeper/zookeeper-3.4.6的软链接。

ZooKeeper的数据目录设置为/home/zookeeper/zookeeper-3.4.6/data

mkdir /home/zookeeper/zookeeper-3.4.6/data

2.2设置myid

在dataDir指定的数据目录(/home/zookeeper/zookeeper-3.4.6/data)下,创建文件myid,文件内容为一个正整数值,用来唯一标识当前机器,因此不同机器的数值不能相同,建议从1开始递增标识,以方便记忆和管理。本文约定如下:

可以使用echo命令直接写进去,如:

echo 1 > myid

或:

echo 1 > /home/zookeeper/zookeeper-3.4.6/data/myid

设置完成后,将文件夹zookeeper-3.4.6拷贝到另外两台机器上:

scp -r zookeeper-3.4.6root@192.168.2.171:/home/zookeeper/zookeeper-3.4.6

scp -r zookeeper-3.4.6root@192.168.2.172:/home/zookeeper/zookeeper-3.4.6

2.3创建zookeeper的日志目录

mkdir /home/zookeeper/logs

2.4修改conf/zoo.cfg:

按下述内容,修改ZooKeeper配置文件(3台机器都需要,可以先配置好一台,然后通过scp等命令复制到其它机器上):

*******************************************************************

tickTime=2000

dataDir=/home/zookeeper/zookeeper-3.4.6/data

dataLogDir=/home/zookeeper/logs

clientPort=2181

initLimit=5

syncLimit=2

server.1= T01:2888:3888

server.2= T02:2888:3888

server.3= T03:2888:3888

*******************************************************************

以上内容说明:

以上内容的配置,参照了ZooKeeper的官方文档:zookeeperStarted.html。server.X用来配置ZooKeeper集群中的各节点,并建议X的值和myid保持一致。

端口2181用于监听客户端的连接,端口2888用于Leader监听Follower的连接,而3888则用于Leader选举。

*******************************************************************

配置一台机器后,拷贝到另外两台机器:

scp -r zoo.cfgroot@192.168.2.171:/home/zookeeper/zookeeper-3.4.6/conf

scp -r zoo.cfgroot@192.168.2.172:/home/zookeeper/zookeeper-3.4.6/conf

*******************************************************************

2.5启动ZooKeeper集群:

bin目录下的脚本zkServer.sh用来启动ZooKeeper集群,但需要带一个start参数,命令如下:

cd/home/zookeeper/zookeeper-3.4.6/bin&&./zkServer.shstart

一定注意:

在三台机器上要分别执行上面的启动zookeeper命令

*******************************************************************

说明:

由于启动时,每个节点都会试图去连接其它节点,因此先启动的刚开始会连接不上其它的,导致日志中会包含错误信息,在未全启动之前,这个属正常现象。

*******************************************************************

 

2.6安装验证:

脚本zkServer.sh不但可以用来启动ZooKeeper,还可以用来查看状态。使用方式为带一个status参数:

cd/home/zookeeper/zookeeper-3.4.6/bin&&./zkServer.shstatus

*******************************************************************

说明:如遇到以下错误,请稍安勿躁,过会再试,可能是因为还未完全起来:

[hadoop@DEVNET-154-77~/zookeeper/bin]$ ./zkServer.sh status

JMX enabled bydefault

Using config:/data/hadoop/zookeeper/bin/../conf/zoo.cfg

Error contactingservice. It is probably not running.

注意:

此时可以直接执行命令【tailf zookeeper.out】查看打印的日志信息,如果有错误如下:

WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@382] - Cannotopen channel to 2 at election address Slave1/192.168.2.171:3888

java.net.NoRouteToHostException:No route to host

可能此时另外两台机器的防火墙未关闭,执行命令查看防火墙状态:

/etc/init.d/iptables status

此时执行命令关闭防火墙:

重启后永久性生效:

开启:chkconfigiptables on

关闭:chkconfigiptables off

然后执行/etc/init.d/iptablesrestart重启

 

查看防火墙状态:

/etc/init.d/iptables status

暂时关闭防火墙:

/etc/init.d/iptables stop

禁止防火墙在系统启动时启动

/sbin/chkconfig --level 2345 iptables off

重启iptables:

/etc/init.d/iptables restart

 

1) 重启后生效

开启: chkconfigiptables on

关闭: chkconfig iptables off

2) 即时生效,重启后失效

开启: serviceiptables start

关闭: serviceiptables stop

 

集群成功启动后,将有且只会有一个成为leader,其它是follower:

[hadoop@Master~/zookeeper/bin]$ ./zkServer.sh status

JMX enabled bydefault

Using config:/data/hadoop/zookeeper/bin/../conf/zoo.cfg

Mode: leader

[hadoop@Slave1~/zookeeper/bin]$ ./zkServer.sh status

JMX enabled bydefault

Using config:/data/hadoop/zookeeper/bin/../conf/zoo.cfg

Mode: follower

[hadoop@Slave2~/zookeeper/bin]$ ./zkServer.sh status

JMX enabled bydefault

Using config:/data/hadoop/zookeeper/bin/../conf/zoo.cfg

Mode: follower

*******************************************************************

查看状态:

cd/home/zookeeper/zookeeper-3.4.6/bin&&./zkServer.shstatus

查看启动日志:

tailf zookeeper.out

 

*******************************************************************

ZooKeeper参考链接

下面是我整理搜集的有关ZooKeeper相关内容的网址,可以学习参考。

中文链接:
http://agapple.iteye.com/blog/1111377 http://agapple.iteye.com/blog/1112032 http://agapple.iteye.com/blog/1292129 http://agapple.iteye.com/blog/1184023 http://agapple.iteye.com/blog/1184040 http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ http://luzengyi.blog.163.com/blog/static/529188201064113744373/ http://luzengyi.blog.163.com/blog/static/529188201061155444869/ http://rdc.taobao.com/team/jm/archives/tag/zookeeper http://rdc.taobao.com/team/jm/archives/947 http://rdc.taobao.com/blog/cs/?p=162 http://rdc.taobao.com/blog/cs/?p=261 http://rdc.taobao.com/team/jm/archives/448
英文链接:
http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html http://zookeeper.apache.org/doc/r3.3.2/zookeeperOver.html http://zookeeper.apache.org/doc/r3.3.2/recipes.html http://zookeeper.apache.org/doc/trunk/ http://wiki.apache.org/hadoop/ZooKeeper/Tutorial http://wiki.apache.org/hadoop/ZooKeeper/FAQ http://wiki.apache.org/hadoop/ZooKeeper/Troubleshooting
*******************************************************************

至此,zookeeper分布式集群环境搭建和配置完成,测试通过!

 

 

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

第二步:Kafka分布式集群环境的安装与配置

1.      下载Kafka 2.9.2-0.8.1.1

通过下面命令下载到指定目录下:

wget https://www.apache.org/dyn/closer.cgi?path=/kafka/0.8.1.1/kafka_2.9.2-0.8.1.1.tgz
2.      在home目录下建立kafka目录

mkdir /home/kafka

3.      文件通过ftp上传至目录/home/kafka,或者用wget下载到目录/home/kafka下,然后解压安装包:

tar -xzvf kafka_2.9.2-0.8.1.1.tgz

4.      创建logs目录:

mkdir /home/kafka/logs

5.      修改配置文件server.properties:

vi /home/kafka/kafka_2.9.2-0.8.1.1/config

*********************************************************************

broker.id=1 

port=9092 

host.name= 192.168.2.170

advertised.host.name=192.168.2.170

num.network.threads=2

num.io.threads=8

log.dirs=/home/kafka/logs

num.partitions=2   

zookeeper.connect =192.168.2.171:2181,192.168.2.172:2181, 192.168.2.173:2181

 

scp -rserver.properties root@192.168.2.171:/home/kafka/kafka_2.9.2-0.8.1.1/config

scp -r server.propertiesroot@192.168.2.172:/home/kafka/kafka_2.9.2-0.8.1.1/config

*********************************************************************

6.      修改配置文件producer.properties:

vi/home/kafka/kafka_2.9.2-0.8.1.1/config/producer.properties

*********************************************************************

metadata.broker.list=192.168.2.170:9092,192.168.2.171:9092,192.168.2.172:9092

producer.type=sync

compression.codec=none

serializer.class=kafka.serializer.DefaultEncoder

*********************************************************************

7.      修改配置文件consumer.properties:

vi/home/kafka/kafka_2.9.2-0.8.1.1/config/consumer.properties

*********************************************************************

zookeeper.connect=192.168.2.170:2181,192.168.2.171:2181,192.168.2.172:2181

zookeeper.connection.timeout.ms=1000000

group.id= consumer-group-01

consumer.timeout.ms=30000

*********************************************************************

8.      配置/etc/profile下的kafka全局目录:

vi /etc/profile

*********************************************************************

# jdk, zookeeper,kafka 

exportJAVA_HOME=/usr/local/java/jdk1.7.0_25

export JAVA_BIN=/usr/local/java/jdk1.7.0_25/bin

exportKAFKA_HOME=/home/kafka/kafka_2.9.2-0.8.1.1

exportZK_HOME=/home/zookeeper/zookeeper-3.4.6

exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

exportPATH=$JAVA_HOME/bin:$KAFKA_HOME/bin:$ZK_HOME/bin:$PATH

*********************************************************************

执行命令source/etc/profile使修改生效。

9.      启动Kafka

进入目录/home/kafka/kafka_2.9.2-0.8.1.1,执行下面命令,启动kafka:

cd /home/kafka/kafka_2.9.2-0.8.1.1

bin/kafka-server-start.shconfig/server.properties &

或者:

cd/home/kafka/kafka_2.9.2-0.8.1.1/bin&&./kafka-server-start.sh../config/server.properties &

如果报错如下:

**********************************************************************

Unrecognized VMoption 'UseCompressedOops'

Error: Could notcreate the Java Virtual Machine.

Error: A fatalexception has occurred. Program will exit.

**********************************************************************

解决办法:

查看bin/kafka-run-class.sh,找到

if [ -z"$KAFKA_JVM_PERFORMANCE_OPTS" ]; then

KAFKA_JVM_PERFORMANCE_OPTS="-server 

-XX:+UseCompressedOops

-XX:+UseParNewGC

-XX:+UseConcMarkSweepGC

-XX:+CMSClassUnloadingEnabled

-XX:+CMSScavengeBeforeRemark

-XX:+DisableExplicitGC-Djava.awt.headless=true"

fi

删除-XX:+UseCompressedOops,重新启动kafka即可。

**********************************************************************

10.  创建一个Topic(replication-factor=num ofbrokers)

进入kafka目录

cd /home/kafka/kafka_2.9.2-0.8.1.1

执行下面命令,创建一个名称为test的topic:

bin/kafka-topics.sh--create --topic jack-topic --replication-factor 3 --partitions 2 --zookeeper 192.168.2.170:2181

11.  查看Topic:

bin/kafka-topics.sh--list --zookeeper 192.168.2.171:2181

12.  查看Topic详细信息:

说明:

Kafka_2.9.2不支持查看Topic详细信息,但Kafka_2.10支持查看详情:

bin/kafktopics.sh--describe --zookeeper 192.168.2.171:2181

13.  T02(192.168.2.171)模拟Producer,在上面开一个终端,发送消息至kafka:

bin/kafka-console-producer.sh--broker-list 192.168.2.171:9092 --sync --topic jack-topic

执行此命令时,如果出现下面错误提示,则需要下载SLF4J的jar包:

**********************************************************************

SLF4J: Failed toload class "org.slf4j.impl.StaticLoggerBinder".

SLF4J: Defaultingto no-operation (NOP) logger implementation

SLF4J: Seehttp://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

**********************************************************************

因为我使用的是kafka版本是2.9.2,对应的slf4j-nop jar版本是1.7.2,因此我需要下载jar包slf4j-nop-1.7.2.jar到目录/home/kafka/kafka_2.9.2-0.8.1.1/libs下,

下载jar地址:http://grepcode.com/snapshot/repo1.maven.org/maven2/org.slf4j/slf4j-nop/1.7.2

 

在发送消息的终端输入:

Hello Kafka

Test kafka

如图:



T03模拟Consumer,接收T02发出的消息:

bin/kafka-console-consumer.sh--zookeeper 192.168.2.172:2181 --topic jack-topic --from-beginning

实时接收Producer发的消息,如图:



至此,Kafka三个节点的分布式集群环境搭建和配置完成,测试通过!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐