[iyunv@localhost zookeeper]# tar zxvf /usr/local/download/zookeeper-3.4.9.tar.gz /usr/local/soft/zookeeper
进入conf目录下,将zoo_sample.cfg复制一份重命名为zoo.cfg(zookeeper启动时默认寻找conf下名字为zoo.cfg的配置文件)
[iyunv@localhost zookeeper]# cd /usr/local/soft/zookeeper/zookeeper-3.4.9/
[iyunv@localhost conf]# cp zoo_sample.cfg zoo.cfg
修改zoo.cfg中的配置信息
[iyunv@localhost conf]# vi zoo.cfg
修改配置文件信息如下
# 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=/usr/local/data/zookeeper #zookeeper数据目录
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#设置集群信息,此处的zoo-x可以用ip地址代替
server.1=zoo-1:2888:3888
server.2=zoo-2:2888:3888
server.3=zoo-3:2888:3888
创建zookeeper的数据目录,即我们zoo.cfg中的dataDir对应的目录
[iyunv@localhost zookeeper]# tailf zookeeper.out
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:381)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:426)
at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:843)
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:822)
2017-10-27 23:35:29,886 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumPeer$QuorumServer@149] - Resolved hostname: zoo-3 to address: zoo-3/192.168.100.103
2017-10-27 23:35:29,886 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@852] - Notification time out: 3200
2017-10-27 23:35:33,088 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@400] - Cannot open channel to 2 at election address zoo-2/192.168.100.102:3888
java.net.ConnectException: 拒绝连接 (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:381)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:426)
at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:843)
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:822)
2017-10-27 23:35:33,089 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumPeer$QuorumServer@149] - Resolved hostname: zoo-2 to address: zoo-2/192.168.100.102
2017-10-27 23:35:33,091 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@400] - Cannot open channel to 3 at election address zoo-3/192.168.100.103:3888
接着启动zoo-2和zoo-3,全部启动完毕后,集群会自动选举出一台服务器作为leader,其余服务器为follower。
可以在每台服务器上使用命令查看服务器是什么类型的:
[iyunv@zoo-1 zookeeper]# zookeeper-3.4.9/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/soft/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: follower
[iyunv@zoo-2 zookeeper]# zookeeper-3.4.9/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/soft/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: leader
[iyunv@zoo-3 zookeeper]# zookeeper-3.4.9/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/soft/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: follower
通过上面状态查询结果可见,zoo-2是集群的Leader,其余的两个结点是Follower。可以通过客户端,连接到ZooKeeper集群上。对于客户端来说,ZooKeeper是一个整体(ensemble),你可以在任何一个结点上建立到服务集群的连接,例如:
[iyunv@localhost zookeeper]# zookeeper-3.4.9/bin/zkCli.sh -server 192.168.100.101:2181
Connecting to 192.168.100.101:2181
2017-10-28 01:24:49,345 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.9-1757313, built on 08/23/2016 06:50 GMT
2017-10-28 01:24:49,350 [myid:] - INFO [main:Environment@100] - Client environment:host.name=localhost
2017-10-28 01:24:49,350 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_151
2017-10-28 01:24:49,358 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2017-10-28 01:24:49,358 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/local/soft/java/jdk1.8.0_151/jre
2017-10-28 01:24:49,359 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/usr/local/soft/zookeeper/zookeeper-3.4.9/bin/../build/classes:/usr/local/soft/zookeeper/zookeeper-3.4.9/bin/../build/lib/*.jar:/usr/local/soft/zookeeper/zookeeper-3.4.9/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/soft/zookeeper/zookeeper-3.4.9/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/soft/zookeeper/zookeeper-3.4.9/bin/../lib/netty-3.10.5.Final.jar:/usr/local/soft/zookeeper/zookeeper-3.4.9/bin/../lib/log4j-1.2.16.jar:/usr/local/soft/zookeeper/zookeeper-3.4.9/bin/../lib/jline-0.9.94.jar:/usr/local/soft/zookeeper/zookeeper-3.4.9/bin/../zookeeper-3.4.9.jar:/usr/local/soft/zookeeper/zookeeper-3.4.9/bin/../src/java/lib/*.jar:/usr/local/soft/zookeeper/zookeeper-3.4.9/bin/../conf:
2017-10-28 01:24:49,359 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2017-10-28 01:24:49,359 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2017-10-28 01:24:49,359 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2017-10-28 01:24:49,359 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2017-10-28 01:24:49,359 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2017-10-28 01:24:49,359 [myid:] - INFO [main:Environment@100] - Client environment:os.version=3.10.0-693.el7.x86_64
2017-10-28 01:24:49,359 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
2017-10-28 01:24:49,359 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
2017-10-28 01:24:49,359 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/usr/local/soft/zookeeper
2017-10-28 01:24:49,360 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.100.101:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@67424e82
2017-10-28 01:24:49,400 [myid:] - INFO [main-SendThread(192.168.100.101:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server 192.168.100.101/192.168.100.101:2181. Will not attempt to authenticate using SASL (unknown error)
Welcome to ZooKeeper!
JLine support is enabled
2017-10-28 01:24:49,544 [myid:] - INFO [main-SendThread(192.168.100.101:2181):ClientCnxn$SendThread@876] - Socket connection established to 192.168.100.101/192.168.100.101:2181, initiating session
2017-10-28 01:24:49,560 [myid:] - INFO [main-SendThread(192.168.100.101:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server 192.168.100.101/192.168.100.101:2181, sessionid = 0x15f5ed84b260001, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.100.101:2181(CONNECTED) 0] ls /
[zookeeper]