在百度上基本能百度一大片的安装教程,为啥我还要写呢?不难发现很多博客讲得很好。但是有些细节地方还是欠缺说明。所以,这里参考了一些大牛的博客,整理的一篇zookeeper安装配置集群的博客。
我们可以把Zookeeper理解为一个精简的文件系统(和Linux文件系统结构非常相似),其每一个节点称为znode,znode下可以存放子节点,也可以直接对节点进行赋值存值。
Zookeeper被应用与一些集群上,提高集群的高可用。它可以帮助你避免单点故障,使你的系统更加可靠。
Zookeeper的集群我们可以通俗的理解为,一个有Leader的团队,团队中各个成员的数据都是一致的。团队中的Leader采用选举算法推举,所以可以保证在Leader出现问题的时候,又会选举出新的Leader。(fast paxos 选举算法大家可以深入了解下)
Zookeeper使用路径来描述节点,节点可以被看做是一个目录,也可以被看做是一个文件,它同时具有两者的特点。
Zookeeper的Watch机制也是它的最大被应用的原因。当我们有很多客户端连接到Zookeeper时,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,通知它们。所以我们经常用它来做业务系统的统一配置管理。使用zk的Watch要特别注意一点就是它的“一次性触发器”(最后的Java例子中有模拟这点)。
#mkdir /zookeeper/
#tar -zxvf zookeeper-3.4.8.tar.gz
#mv zookeeper-3.4.8 /zookeeper/server1
#cd /zookeeper/server1/conf/
#vi zoo.cfg
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/zookeeper/server1/data
dataLogDir=/zookeeper/server1/log
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
说明:这里我要在同一台机器上配置3台server所以这配置了三条server信息。注意保证配置的端口未被占用。
#mkdir -p /zookeeper/server1/data
#mkdir -p /zookeeper/server1/log
#cd /zookeeper/server1/data
#echo 1>myid
好了到这里第一台的配置基本完成了。
#cp -r /zookeeper/server1 /zookeeper/server2
#cp -r /zookeeper/server1 /zookeeper/server3
注意修改2和3的配置文件zoo.cfg,修改的地方是clientPort=2181分别修改成,修改的地方是clientPort=2182,,修改的地方是clientPort=2183
配置清单:
server1-->zoo.cfg:
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/zookeeper/server1/data
dataLogDir=/zookeeper/server1/log
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
server2-->zoo.cfg:
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/zookeeper/server2/data
dataLogDir=/zookeeper/server2/log
clientPort=2182
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
server3-->zoo.cfg:
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/zookeeper/server3/data
dataLogDir=/zookeeper/server3/log
clientPort=2183
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
1
server2 ->./data/myid
2
server3 ->./data/myid
3
#cd /zookeeper/server1/bin
#./zkServer.sh start
查看日志内容
vi /zookeeper/server1/bin/zookeeper.out
可以看到类似以下错误信息
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:381)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:354)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:452)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:433)
at java.lang.Thread.run(Thread.java:748)
2017-08-06 15:42:40,542 [myid:1] - INFO [WorkerSender[myid=1]:QuorumPeer$QuorumServer@149] - Resolved hostname: 127.0.0.1 to address: /127.0.0.1
2017-08-06 15:42:40,542 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@400] - Cannot open channel to 3 at election address /127.0.0.1:3890
这是因为启动的时候zookeeper去找其他两台服务了,其他两台服务还没启动所以链接失败。
#cd /zookeeper/server2/bin
#./zkServer.sh start
可以看到错误信息比第一台启动的时候要少
#cd /zookeeper/server3/bin
#./zkServer.sh start
观察第三台的启动日志,已经没有错误。说明已经正常集群了。接下来将进行简单的测试#cd /zookeeper/server1/bin
#.zkCli.sh -server 127.0.0.1:2181
如果你要连接别的服务器,请指定具体的IP地址。WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 1] create /zk "leftso.com"
Created /zk
[zk: 127.0.0.1:2181(CONNECTED) 2] get /zk
leftso.com
cZxid = 0x300000003
ctime = Sun Aug 06 15:55:17 PDT 2017
mZxid = 0x300000003
mtime = Sun Aug 06 15:55:17 PDT 2017
pZxid = 0x300000003
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
[zk: 127.0.0.1:2181(CONNECTED) 3] set /zk "www.leftso.com"
cZxid = 0x300000003
ctime = Sun Aug 06 15:55:17 PDT 2017
mZxid = 0x300000004
mtime = Sun Aug 06 15:55:36 PDT 2017
pZxid = 0x300000003
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 14
numChildren = 0
[zk: 127.0.0.1:2181(CONNECTED) 4] get /zk
www.leftso.com
cZxid = 0x300000003
ctime = Sun Aug 06 15:55:17 PDT 2017
mZxid = 0x300000004
mtime = Sun Aug 06 15:55:36 PDT 2017
pZxid = 0x300000003
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 14
numChildren = 0
[zk: 127.0.0.1:2181(CONNECTED) 5] ls /
[zk, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 6] delete /zk
[zk: 127.0.0.1:2181(CONNECTED) 7] ls /
[zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 8]
https://www.leftso.com/article/291.html