1、簡要介紹
zookeeper是一個分布式的應(yīng)用程序協(xié)調(diào)服務(wù),是Hadoop和Hbase的重要組件,是一個樹型的目錄服務(wù),支持變更推送。除此還可以用作dubbo服務(wù)的注冊中心。
2、安裝
2.1 下載安裝
wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gztar -zxvf zookeeper-3.4.6.tar.gzcd zookeeper-3.4.6cp conf/zoo_sample.cfg conf/zoo.cfg
2.2 配置
2.2.1 單點方式
(1)修改zoo.cfg,如果沒有特殊要求,全部默認也可以,主要修改的地方就是dataDir 和 clientPort,如下:
tickTime=2000initLimit=10syncLimit=5dataDir=/app/soft/zookeeper-3.4.6/data (換成真實輸出目錄)clientPort=2181#tickTime:這個時間是作為 Zookeeper 服務(wù)器之間或客戶端與服務(wù)器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發(fā)送一個心跳,以毫秒為單位。#initLimit:LF初始通信時限,集群中的follower服務(wù)器(F)與leader服務(wù)器(L)之間初始連接時能容忍的最多心跳數(shù)(tickTime的數(shù)量)#syncLimit:集群中的follower服務(wù)器與leader服務(wù)器之間請求和應(yīng)答之間能容忍的最多心跳數(shù)(tickTime的數(shù)量)。#dataDir:顧名思義就是 Zookeeper 保存數(shù)據(jù)的目錄,默認情況下,Zookeeper 將寫數(shù)據(jù)的日志文件也保存在這個目錄里。#clientPort:這個端口就是客戶端連接 Zookeeper 服務(wù)器的端口,Zookeeper 會監(jiān)聽這個端口,接受客戶端的訪問請求。 #dataLogDir:日志文件目錄,Zookeeper保存日志文件的目錄#服務(wù)器名稱與地址:集群信息(服務(wù)器編號,服務(wù)器地址,LF通信端口,選舉端口),規(guī)則如:server.N=yyy:A:B#其中N表示服務(wù)器編號,YYY表示服務(wù)器的ip地址,A為LF通信端口,表示該服務(wù)器與集群中的leader交換的信息的端口。B為選舉端口,表示選舉新leader時服務(wù)器間相互通信的端口(當leader掛掉時,其余服務(wù)器會相互通信,選擇出新的leader)。一般來說,集群中每個服務(wù)器的A端口都是一樣,每個服務(wù)器的B端口也是一樣。但是當所采用的為偽集群時,IP地址都一樣,只能時A端口和B端口不一樣。
(2)啟動:bin/zkServer.sh start
(3)查看是否成功:bin/zkServer.sh status
(4)查看日志:vi zooKeeper.out
2.2.2 集群方式(單IP多節(jié)點)
(1)拷貝3份zookeeper-3.4.6.tar.gz,如zookeeper_node1、zookeeper_node2、zookeeper_node3,結(jié)構(gòu)如下:
(2)進入zookeeper_node1--->conf,修改zoo.cfg,如下:
tickTime=2000initLimit=10syncLimit=5dataDir=/app/soft/zookeeper_node1/data (換成真實輸出目錄)clientPort=2181server.1=127.0.0.1:2888:3888server.2=127.0.0.1:2889:3889server.3=127.0.0.1:2890:3890
(3)然后在上面dataDir對應(yīng)的目錄下創(chuàng)建myid文件,如下:
mkdir datavi myid
myid指明自己的id,對應(yīng)上面zoo.cfg中"server."后的數(shù)字,第一臺的內(nèi)容為1,第二臺的內(nèi)容為2,第三臺的內(nèi)容為3,內(nèi)容如下:
1
(4)依次類推,調(diào)整2、3節(jié)點的地址及端口,如下:
節(jié)點2:
tickTime=2000initLimit=10syncLimit=5dataDir=/app/soft/zookeeper_node2/data (換成真實輸出目錄)clientPort=2182server.1=127.0.0.1:2888:3888server.2=127.0.0.1:2889:3889server.3=127.0.0.1:2890:3890
節(jié)點3:
tickTime=2000initLimit=10syncLimit=5dataDir=/app/soft/zookeeper_node3/data (換成真實輸出目錄)clientPort=2183server.1=127.0.0.1:2888:3888server.2=127.0.0.1:2889:3889server.3=127.0.0.1:2890:389
(5),修改節(jié)點2、3的myid;
(6)啟動服務(wù),如下:
[root@localhost soft]# zookeeper_node1/bin/zkServer.sh startJMX enabled by defaultUsing config: /app/soft/zookeeper_node1/bin/../conf/zoo.cfgStarting zookeeper ... STARTED[root@localhost soft]# vi zookeeper.out 2015-06-25 05:43:13,252 [myid:] - INFO [main:QuorumPeerConfig@103] - Reading configuration from: /app/soft/zookeeper_nod2015-06-25 05:43:13,257 [myid:] - INFO [main:QuorumPeerConfig@340] - Defaulting to majority quorums2015-06-25 05:43:13,260 [myid:1] - INFO [main:DatadirCleanupManager@78] - autopurge.snaPRetainCount set to 32015-06-25 05:43:13,260 [myid:1] - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 02015-06-25 05:43:13,262 [myid:1] - INFO [main:DatadirCleanupManager@101] - Purge task is not scheduled.2015-06-25 05:43:13,273 [myid:1] - INFO [main:QuorumPeerMain@127] - Starting quorum peer2015-06-25 05:43:13,285 [myid:1] - INFO [main:NIOServerCnxnFactory@94] - binding to port 0.0.0.0/0.0.0.0:21812015-06-25 05:43:13,312 [myid:1] - INFO [main:QuorumPeer@959] - tickTime set to 20002015-06-25 05:43:13,312 [myid:1] - INFO [main:QuorumPeer@979] - minsessionTimeout set to -12015-06-25 05:43:13,312 [myid:1] - INFO [main:QuorumPeer@990] - maxSessionTimeout set to -12015-06-25 05:43:13,315 [myid:1] - INFO [main:QuorumPeer@1005] - initLimit set to 102015-06-25 05:43:13,359 [myid:1] - INFO [Thread-1:QuorumCnxManager$Listener@504] - My election bind port: /127.0.0.1:3882015-06-25 05:43:13,371 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumPeer@714] - LOOKING2015-06-25 05:43:13,374 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@815] - New election.2015-06-25 05:43:13,252 [myid:] - INFO [main:QuorumPeerConfig@103] - Reading configuration from: /app/soft/zookeeper_node1/bin/../conf/zoo.cfg2015-06-25 05:43:13,257 [myid:] - INFO [main:QuorumPeerConfig@340] - Defaulting to majority quorums2015-06-25 05:43:13,260 [myid:1] - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 32015-06-25 05:43:13,260 [myid:1] - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 02015-06-25 05:43:13,262 [myid:1] - INFO [main:DatadirCleanupManager@101] - Purge task is not scheduled.2015-06-25 05:43:13,273 [myid:1] - INFO [main:QuorumPeerMain@127] - Starting quorum peer2015-06-25 05:43:13,285 [myid:1] - INFO [main:NIOServerCnxnFactory@94] - binding to port 0.0.0.0/0.0.0.0:21812015-06-25 05:43:13,312 [myid:1] - INFO [main:QuorumPeer@959] - tickTime set to 20002015-06-25 05:43:13,312 [myid:1] - INFO [main:QuorumPeer@979] - minSessionTimeout set to -12015-06-25 05:43:13,312 [myid:1] - INFO [main:QuorumPeer@990] - maxSessionTimeout set to -12015-06-25 05:43:13,315 [myid:1] - INFO [main:QuorumPeer@1005] - initLimit set to 102015-06-25 05:43:13,359 [myid:1] - INFO [Thread-1:QuorumCnxManager$Listener@504] - My election bind port: /127.0.0.1:38882015-06-25 05:43:13,371 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumPeer@714] - LOOKING2015-06-25 05:43:13,374 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@815] - New election. My id = 1, proposed zxid=0x22015-06-25 05:43:13,376 [myid:1] - INFO [WorkerReceiver[myid=1]:FastLeaderElection@597] - Notification: 1 (message format version), 1 (n.leader), 0x2 (n.zxid), 0x1 (n.round), LOOKING (n.state), 1 (n.sid), 0x1 (n.peerEpoch) LOOKING (my state)2015-06-25 05:43:13,379 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@382] - Cannot open channel to 2 at election address /127.0.0.1:3889java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) 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:745)2015-06-25 05:43:13,385 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@382] - Cannot open channel to 3 at election address /127.0.0.1:3890java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
發(fā)現(xiàn)報錯,是因為2、3節(jié)點服務(wù)還未啟動。按照節(jié)點1的啟動方式,依次啟動2、3節(jié)點,再次查看日志,發(fā)現(xiàn)服務(wù)正常。
查看日志命令:vi zookeeper.out
(7)查看服務(wù)狀態(tài),如下:
[root@localhost soft]# zookeeper_node1/bin/zkServer.sh statusJMX enabled by defaultUsing config: /app/soft/zookeeper_node1/bin/../conf/zoo.cfgMode: follower[root@localhost soft]# zookeeper_node2/bin/zkServer.sh statusJMX enabled by defaultUsing config: /app/soft/zookeeper_node2/bin/../conf/zoo.cfgMode: leader[root@localhost soft]# zookeeper_node3/bin/zkServer.sh statusJMX enabled by defaultUsing config: /app/soft/zookeeper_node3/bin/../conf/zoo.cfgMode: follower
可以看出1是follower,2是leader,3是follower。
新聞熱點
疑難解答