Zookeeper3.4.6與Kafka0.8.1.1集羣安裝和配置詳細步驟

第一步: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/[email protected]:/etc/hosts

scp /etc/[email protected]:/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/ [email protected]:/home/software/

scp -r [email protected]:/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 [email protected]:/home/zookeeper/zookeeper-3.4.6

scp -r [email protected]:/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 [email protected]:/home/zookeeper/zookeeper-3.4.6/conf

scp -r [email protected]:/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 [email protected]:/home/kafka/kafka_2.9.2-0.8.1.1/config

scp -r [email protected]:/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三個節點的分佈式集羣環境搭建和配置完成,測試通過!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章