下载
去apache zookeeper官网下载压缩包,解压到d盘的zk文件夹下,然后将解压的文件夹重命名为zk1,然后复制zk1,分别命名为zk2、zk3。然后在zk文件夹下创建文件夹dataDir,并在dataDir中分别创建zk1、zk2、zk3共3个文件夹。最终zk文件夹目录结构如下:
├─dataDir
│ ├─zk1
│ ├─zk2
│ └─zk3
├─zk1
│ ├─bin
│ ├─conf
│ ├─contrib
│ ├─dist-maven
│ ├─docs
│ ├─lib
│ ├─recipes
│ └─src
├─zk2
│ ├─bin
│ ├─conf
│ ├─contrib
│ ├─dist-maven
│ ├─docs
│ ├─lib
│ ├─recipes
│ └─src
├─zk3
│ ├─bin
│ ├─conf
│ ├─contrib
│ ├─dist-maven
│ ├─docs
│ ├─lib
│ ├─recipes
│ └─src
配置zookeeper集群
将zk/zk1/conf下的zoo_sample.cfg配置文件重命名为zoo.cfg,并修改成为下面的内容:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:/zk/dataDir/zk1
clientPort=2181
server.1=127.0.0.1:5881:7881
server.2=127.0.0.1:5882:7882
server.3=127.0.0.1:5883:7883
然后将zk/zk2/conf下的zoo_sample.cfg配置文件重命名为zoo.cfg,并修改成为下面的内容:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:/zk/dataDir/zk2
clientPort=2182
server.1=127.0.0.1:5881:7881
server.2=127.0.0.1:5882:7882
server.3=127.0.0.1:5883:7883
最后将zk/zk3/conf下的zoo_sample.cfg配置文件重命名为zoo.cfg,并修改成为下面的内容:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:/zk/dataDir/zk3
clientPort=2183
server.1=127.0.0.1:5881:7881
server.2=127.0.0.1:5882:7882
server.3=127.0.0.1:5883:7883
然后在zk/dataDir/zk1下建立名为myid的文件,内容为1,编码为UTF-8无bom。同理,在zk/dataDir/zk2下建立名为myid的文件,内容为2;在zk/dataDir/zk3下建立名为myid的文件,内容为3.这里的1、2、3分别对应服务器的id,也就是zoo.cfgserver.1=127.0.0.1:5881:7881部分server后面的数字。
运行集群
首先到zk/zk1/bin下双击zkServer.cmd,cmd控制台输出
D:\zk\zk1\bin>call "C:\Program Files\Java\jdk1.8.0_172"\bin\java "-Dzookeeper.log.dir=D:\zk\zk1\bin\.." "-Dzookeeper.root.logger=INFO,CONSOLE" -cp "D:\zk\zk1\bin\..\build\classes;D:\zk\zk1\bin\..\build\lib\*;D:\zk\zk1\bin\..\*;D:\zk\zk1\bin\..\lib\*;D:\zk\zk1\bin\..\conf" org.apache.zookeeper.server.quorum.QuorumPeerMain "D:\zk\zk1\bin\..\conf\zoo.cfg"
2018-11-19 12:53:54,629 [myid:] - INFO [main:QuorumPeerConfig@136] - Reading configuration from: D:\zk\zk1\bin\..\conf\zoo.cfg
2018-11-19 12:53:54,643 [myid:] - INFO [main:QuorumPeer$QuorumServer@184] - Resolved hostname: 127.0.0.1 to address: /127.0.0.1
2018-11-19 12:53:54,644 [myid:] - INFO [main:QuorumPeer$QuorumServer@184] - Resolved hostname: 127.0.0.1 to address: /127.0.0.1
2018-11-19 12:53:54,645 [myid:] - INFO [main:QuorumPeer$QuorumServer@184] - Resolved hostname: 127.0.0.1 to address: /127.0.0.1
2018-11-19 12:53:54,646 [myid:] - INFO [main:QuorumPeerConfig@398] - Defaulting to majority quorums
2018-11-19 12:53:54,649 [myid:1] - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
2018-11-19 12:53:54,649 [myid:1] - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 0
2018-11-19 12:53:54,652 [myid:1] - INFO [main:DatadirCleanupManager@101] - Purge task is not scheduled.
2018-11-19 12:53:54,722 [myid:1] - INFO [main:QuorumPeerMain@130] - Starting quorum peer
2018-11-19 12:53:54,880 [myid:1] - INFO [main:ServerCnxnFactory@117] - Using org.apache.zookeeper.server.NIOServerCnxnFactory as server connection factory
2018-11-19 12:53:54,882 [myid:1] - INFO [main:NIOServerCnxnFactory@89] - binding to port 0.0.0.0/0.0.0.0:2181
2018-11-19 12:53:54,889 [myid:1] - INFO [main:QuorumPeer@1158] - tickTime set to 2000
2018-11-19 12:53:54,889 [myid:1] - INFO [main:QuorumPeer@1204] - initLimit set to 10
2018-11-19 12:53:54,890 [myid:1] - INFO [main:QuorumPeer@1178] - minSessionTimeout set to -1
2018-11-19 12:53:54,891 [myid:1] - INFO [main:QuorumPeer@1189] - maxSessionTimeout set to -1
2018-11-19 12:53:54,899 [myid:1] - INFO [main:QuorumPeer@1467] - QuorumPeer communication is not secured!
2018-11-19 12:53:54,901 [myid:1] - INFO [main:QuorumPeer@1496] - quorum.cnxn.threads.size set to 20
2018-11-19 12:53:54,911 [myid:1] - INFO [ListenerThread:QuorumCnxManager$Listener@736] - My election bind port: /127.0.0.1:7881
2018-11-19 12:53:54,917 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumPeer@909] - LOOKING
2018-11-19 12:53:54,919 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@813] - New election. My id = 1, proposed zxid=0x0
2018-11-19 12:53:54,924 [myid:1] - INFO [WorkerReceiver[myid=1]:FastLeaderElection@595] - Notification: 1 (message format version), 1 (n.leader), 0x0 (n.zxid), 0x1 (n.round), LOOKING (n.state), 1 (n.sid), 0x1 (n.peerEpoch) LOOKING (my state)
2018-11-19 12:53:55,940 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@584] - Cannot open channel to 2 at election address /127.0.0.1:7882
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
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.PlainSocketImpl.connect(PlainSocketImpl.java:172)
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:558)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:534)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:454)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:435)
at java.lang.Thread.run(Thread.java:748)
2018-11-19 12:53:55,950 [myid:1] - INFO [WorkerSender[myid=1]:QuorumPeer$QuorumServer@184] - Resolved hostname: 127.0.0.1 to address: /127.0.0.1
2018-11-19 12:53:56,958 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@584] - Cannot open channel to 2 at election address /127.0.0.1:7882
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
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.PlainSocketImpl.connect(PlainSocketImpl.java:172)
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:558)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:610)
at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:838)
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:957)
2018-11-19 12:53:56,962 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumPeer$QuorumServer@184] - Resolved hostname: 127.0.0.1 to address: /127.0.0.1
2018-11-19 12:53:56,971 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@847] - Notification time out: 400
2018-11-19 12:53:57,981 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@584] - Cannot open channel to 3 at election address /127.0.0.1:7883
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
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.PlainSocketImpl.connect(PlainSocketImpl.java:172)
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:558)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:534)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:454)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:435)
at java.lang.Thread.run(Thread.java:748)
从日志可以看到,服务器1尝试和2、3建立连接用于选举leader,但是一直无法连接成功。只要后面启动了2和3,这些错误就会消失。
去zk/zk2/bin下双击zkServer.cmd启动2,去zk/zk3/bin下双击zkServer.cmd启动3.
连接集群
可以去zk/zk1/bin下双击zkCli.cmd,它会连接到集群中:
Connecting to localhost:2181
2018-11-19 13:22:00,391 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
2018-11-19 13:22:00,393 [myid:] - INFO [main:Environment@100] - Client environment:host.name=DESKTOP-1DNQF8C
2018-11-19 13:22:00,394 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_172
2018-11-19 13:22:00,395 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2018-11-19 13:22:00,395 [myid:] - INFO [main:Environment@100] - Client environment:java.home=C:\Program Files\Java\jdk1.8.0_172\jre
2018-11-19 13:22:00,395 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=D:\zk\zk1\bin\..\build\classes;D:\zk\zk1\bin\..\build\lib\*;D:\zk\zk1\bin\..\zookeeper-3.4.13.jar;D:\zk\zk1\bin\..\lib\audience-annotations-0.5.0.jar;D:\zk\zk1\bin\..\lib\jline-0.9.94.jar;D:\zk\zk1\bin\..\lib\log4j-1.2.17.jar;D:\zk\zk1\bin\..\lib\netty-3.10.6.Final.jar;D:\zk\zk1\bin\..\lib\slf4j-api-1.7.25.jar;D:\zk\zk1\bin\..\lib\slf4j-log4j12-1.7.25.jar;D:\zk\zk1\bin\..\conf
2018-11-19 13:22:00,397 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=C:\Program Files\Java\jdk1.8.0_172\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk1.8.0_172\bin;C:\Program Files\Java\jdk1.8.0_172\jre\bin;C:\Program Files\OpenVPN\bin;C:\Program Files\nodejs\;C:\Program Files\Eisoo AnyShare;C:\Users\ecarx\AppData\Local\Microsoft\WindowsApps;C:\Users\ecarx\AppData\Roaming\npm;C:\Users\ecarx\AppData\Local\Programs\Microsoft VS Code\bin;.
2018-11-19 13:22:00,398 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=C:\Users\ecarx\AppData\Local\Temp\
2018-11-19 13:22:00,398 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2018-11-19 13:22:00,399 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Windows 10
2018-11-19 13:22:00,399 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2018-11-19 13:22:00,400 [myid:] - INFO [main:Environment@100] - Client environment:os.version=10.0
2018-11-19 13:22:00,400 [myid:] - INFO [main:Environment@100] - Client environment:user.name=ecarx
2018-11-19 13:22:00,401 [myid:] - INFO [main:Environment@100] - Client environment:user.home=C:\Users\ecarx
2018-11-19 13:22:00,401 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=D:\zk\zk1\bin
2018-11-19 13:22:00,402 [myid:] - INFO [main:ZooKeeper@442] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@531d72ca
Welcome to ZooKeeper!
2018-11-19 13:22:00,618 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1029] - Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error)
2018-11-19 13:22:00,620 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@879] - Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session
JLine support is enabled
2018-11-19 13:22:00,643 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1303] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x1001310b54e0002, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
可以执行命令get /获取根节点状态数据:
[zk: localhost:2181(CONNECTED) 0] get /
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1














网友评论