1.配置
.zookeeper下載地址:http://apache.mirrors.lucidnetworks.net/zookeeper/
可以選擇需要的版本,我下載的是zookeeper-3.4.6.tar.gz昼钻,解壓得到文件夾zookeeper-3.4.3
由于手頭機(jī)器不足闯参,所以在一臺機(jī)器上部署了3個server,如果你手頭也比較緊喻鳄,也可以這么做足淆。
在主文件夾下建立一個zookeeper文件夾钧惧,在zookeeper文件夾里建立三個文件夾server1,server2,server3,
然后每個文件夾里面解壓一個zookeeper的下載包晤锥,并且還建了幾個文件夾掉蔬,總體結(jié)構(gòu)如下,最后那個是下載過來壓縮包的解壓文件
data,dataLog,logs,zookeeper-3.4.3
那么首先進(jìn)入data目錄,創(chuàng)建一個myid的文件查近,里面寫入一個數(shù)字眉踱,比如我這個是server1,那么就寫一個1,server2對應(yīng)myid文件就寫入2霜威,server3對應(yīng)myid文件就寫個3
然后進(jìn)入zookeeper-3.4.3/conf目錄谈喳,那么如果是剛下過來,會有3個文件戈泼,configuration.xml, log4j.properties,zoo_sample.cfg,這3個文件我們首先要做的就是在這個目錄創(chuàng)建一個zoo.cfg的配置文件婿禽,當(dāng)然你可以把zoo_sample.cfg文件改成zoo.cfg,打開zoo.cfg,文件內(nèi)容如下:
# 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.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/Users/zhaofeng/Documents/zookeeper-cluster/zoo2/data
dataLogDir=/Users/zhaofeng/Documents/zookeeper-cluster/zoo2/dataLog
# the port at which the clients will connect
clientPort=2181
在文件末尾添加如下內(nèi)容:
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
需要注意的是clientPort這個端口如果你是在1臺機(jī)器上部署多個server,那么每臺機(jī)器都要不同的clientPort大猛,比如我server1是2181,server2是2182扭倾,server3是2183,dataDir和dataLogDir也需要區(qū)分下挽绩。
最后幾行唯一需要注意的地方就是 server.X 這個數(shù)字就是對應(yīng) data/myid中的數(shù)字膛壹。你在3個server的myid文件中分別寫入了1,2,3模聋,那么每個server中的zoo.cfg都配server.1,server.2,server.3就OK了肩民。因?yàn)樵谕慌_機(jī)器上,后面連著的2個端口3個server都不要一樣链方,否則端口沖突持痰,其中第一個端口用來集群成員的信息交換,第二個端口是在leader掛掉時專門用來進(jìn)行選舉leader所用祟蚀。
2.啟動ZooKeeper偽機(jī)群的所有服務(wù)器
分別進(jìn)入三個服務(wù)器的zookeeper-3.4.3/bin目錄下工窍,啟動服務(wù)
./zkServer.sh start
啟動完成后,查看服務(wù)器狀態(tài)前酿,
./zkServer.sh status
一般來說患雏,需要注意的是:按照zoo.cfg里面配置的順序啟動應(yīng)用。同時需要注意查看zookeeper.out文件罢维,如果出現(xiàn)連不上其他的端口號纵苛,很正常的事情。
錯誤如下:
Cannot open channel to 3 at election address /127.0.0.1:3890
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:341)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:449)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:430)
at java.lang.Thread.run(Thread.java:748)
等待所有的端口都啟動完成后言津,就可以正常使用了。正常的標(biāo)識是status返回的內(nèi)容為
$ ./zkServer.sh status
JMX enabled by default
Using config: /Users/zhaofeng/Documents/zookeeper-cluster/zoo2/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: leader
3.接入客戶端
進(jìn)入任意一個服務(wù)器的zookeeper/bin目錄下取试,啟動一個客戶端悬槽,接入服務(wù)。
./zkCli.sh –server localhost:2181