三台测试机java
- 操做系统: centos7 ; hostname: c1 ; ip: 192.168.1.80
- 操做系统: centos7 ; hostname: c2 ; ip: 192.168.1.81
- 操做系统: centos7 ; hostname: c3 ; ip: 192.168.1.82
备注apache
注意要关闭防火墙
查看磁盘情况centos
为了不磁盘使用不均而致使系统问题,于是先查看磁盘的分布状况。api
[root@sso conf]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 50G 18G 33G 36% / devtmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.8G 0 7.8G 0% /dev/shm tmpfs 7.8G 65M 7.7G 1% /run tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup /dev/mapper/centos-var 900G 529M 900G 1% /var /dev/mapper/centos-home 66G 12G 55G 18% /home /dev/sda1 497M 168M 330M 34% /boot tmpfs 1.6G 0 1.6G 0% /run/user/0 [root@sso conf]#
/var目录共900G,只使用了1%不到,所以能够将后续的全部文件和程序存放在此目录下。固然,这要根据你的实际状况而定。session
mkdir -p /var/download && cd /var/download wget -c http://www.eu.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz tar zxvf zookeeper-3.4.6.tar.gz mkdir -p /var/local/server mv zookeeper-3.4.6 /var/local/server/zookeeper cd /var/local/server/zookeeper/conf touch zoo.cfg
编辑zoo.cfg中加入以下内容:app
tickTime=2000 dataDir=/var/data/zookeeper dataLogDir=/var/local/server/zookeeper/log clientPort=2181 initLimit=5 syncLimit=2 server.1=c1:2888:3888 server.2=c2:2888:3888 server.3=c3:2888:3888
保存socket
建立数据目录和日志目录:测试
mkdir -p /var/data/zookeeper mkdir -p /var/local/server/zookeeper/log
如不建立启动时会报以下异常:ui
[root@sso conf]# /var/local/server/zookeeper/bin/zkServer.sh status JMX enabled by default Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg Error contacting service. It is probably not running.
建立myid文件, id 与 zoo.cfg 中的序号对应centos7
echo 1 > /var/data/zookeeper/myid
注意:
- 注意,若是是
c2
和c3
中进行相应的修改c2
上应改成:echo 2 > /var/data/zookeeper/myid
c3
上应改成:echo 3 > /var/data/zookeeper/myid
配置hosts文件:编辑/etc/hosts
,加入以下内容:
192.168.1.80 c1 192.168.1.81 c2 192.168.1.82 c3
/var/local/server/zookeeper/bin/zkServer.sh start
/var/local/server/zookeeper/bin/zkServer.sh status
/var/local/server/zookeeper/bin/zkServer.sh restart
/var/local/server/zookeeper/bin/zkServer.sh stop
/var/local/server/zookeeper/bin/zkCli.sh -server c1:2181
/var/local/server/zookeeper/bin/zkServer.sh start
[root@sso conf]# /var/local/server/zookeeper/bin/zkServer.sh start JMX enabled by default Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
/var/local/server/zookeeper/bin/zkServer.sh status
[root@sso conf]# /var/local/server/zookeeper/bin/zkServer.sh status JMX enabled by default Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg Error contacting service. It is probably not running.
此时发现zookeeper并无正常运行。
查看日志more zookeeper.out
,发现以下异常:
2016-08-25 09:55:54,088 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@382] - Cannot open channel to 2 at election address c2/192.168.1.81:3888 java.net.NoRouteToHostException: No route to host 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) 2016-08-25 09:55:54,101 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@382] - Cannot open channel to 3 at election address c3/192.168.1.82:3888 java.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) 2016-08-25 09:55:54,287 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@382] - Cannot open channel to 2 at election address c2/192.168.1.81:3888 java.net.NoRouteToHostException: No route to host 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.connectAll(QuorumCnxManager.java:402) at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:840) at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:762)
这是因为二、3号机器没有正常配置致使。能够在zoo.cfg
中将其注释
后再次尝试。
tickTime=2000 dataDir=/var/data/zookeeper dataLogDir=/var/local/server/zookeeper/log clientPort=2181 initLimit=5 syncLimit=2 server.1=c1:2888:3888 #server.2=c2:2888:3888 #server.3=c3:2888:3888
正常启动效果:
[root@sso conf]# /var/local/server/zookeeper/bin/zkServer.sh start JMX enabled by default Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [root@sso conf]# /var/local/server/zookeeper/bin/zkServer.sh status JMX enabled by default Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg Mode: standalone
在 c1 上链接 c1 上的 zookeeper
/var/local/server/zookeeper/bin/zkCli.sh -server c1:2181
[root@sso conf]# /var/local/server/zookeeper/bin/zkCli.sh -server c1:2181 Connecting to c1:2181 2016-08-25 10:06:30,235 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT 2016-08-25 10:06:30,244 [myid:] - INFO [main:Environment@100] - Client environment:host.name=sso.xxx.com 2016-08-25 10:06:30,244 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.7.0_79 2016-08-25 10:06:30,250 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2016-08-25 10:06:30,251 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/local/jdk1.7.0_79/jre 2016-08-25 10:06:30,251 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/var/local/server/zookeeper/bin/../build/classes:/var/local/server/zookeeper/bin/../build/lib/*.jar:/var/local/server/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/var/local/server/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/var/local/server/zookeeper/bin/../lib/netty-3.7.0.Final.jar:/var/local/server/zookeeper/bin/../lib/log4j-1.2.16.jar:/var/local/server/zookeeper/bin/../lib/jline-0.9.94.jar:/var/local/server/zookeeper/bin/../zookeeper-3.4.6.jar:/var/local/server/zookeeper/bin/../src/java/lib/*.jar:/var/local/server/zookeeper/bin/../conf: 2016-08-25 10:06:30,251 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 2016-08-25 10:06:30,252 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp 2016-08-25 10:06:30,252 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA> 2016-08-25 10:06:30,252 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux 2016-08-25 10:06:30,252 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2016-08-25 10:06:30,253 [myid:] - INFO [main:Environment@100] - Client environment:os.version=3.10.0-327.10.1.el7.x86_64 2016-08-25 10:06:30,253 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root 2016-08-25 10:06:30,253 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root 2016-08-25 10:06:30,254 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/var/local/server/zookeeper/conf 2016-08-25 10:06:30,257 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=c1:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@194d62f1 Welcome to ZooKeeper! 2016-08-25 10:06:30,335 [myid:] - INFO [main-SendThread(sso.xxx.com:2181):ClientCnxn$SendThread@975] - Opening socket connection to server sso.xxx.com/192.168.1.80:2181. Will not attempt to authenticate using SASL (unknown error) JLine support is enabled 2016-08-25 10:06:30,349 [myid:] - INFO [main-SendThread(sso.xxx.com:2181):ClientCnxn$SendThread@852] - Socket connection established to sso.xxx.com/192.168.1.80:2181, initiating session 2016-08-25 10:06:30,412 [myid:] - INFO [main-SendThread(sso.xxx.com:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server sso.xxx.com/192.168.1.80:2181, sessionid = 0x156bf70d7580000, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: c1:2181(CONNECTED) 0]
添加一个根节点目录zookeeper_project
create /project zookeeper_project
[zk: c1:2181(CONNECTED) 0] create /project zookeeper_project Created /project [zk: c1:2181(CONNECTED) 1] get /project zookeeper_project cZxid = 0x2 ctime = Thu Aug 25 10:09:09 CST 2016 mZxid = 0x2 mtime = Thu Aug 25 10:09:09 CST 2016 pZxid = 0x2 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 17 numChildren = 0
此时说明单机配置成功
取消zoo.cfg中server.2
和server.3
的注释,最后zoo.cfg配置文件以下:
tickTime=2000 dataDir=/var/data/zookeeper dataLogDir=/var/local/server/zookeeper/log clientPort=2181 initLimit=5 syncLimit=2 server.1=c1:2888:3888 server.2=c2:2888:3888 server.3=c3:2888:3888
在c2和c3中执行相似的操做
多机联合测试
c1运行结果:
[root@sso conf]# /var/local/server/zookeeper/bin/zkServer.sh status JMX enabled by default Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg Mode: leader
c2运行结果:
[root@cas zookeeper]# /var/local/server/zookeeper/bin/zkServer.sh status JMX enabled by default Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg Mode: follower
c3运行结果:
[root@localhost zookeeper]# /var/local/server/zookeeper/bin/zkServer.sh status JMX enabled by default Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg Mode: follower
c1上执行:
create /c1project c1projecttest
和get /c1project
[zk: c1:2181(CONNECTED) 2] create /c1project c1projecttest Created /c1project [zk: c1:2181(CONNECTED) 1] get /c1project c1projecttest cZxid = 0x100000013 ctime = Thu Aug 25 11:03:49 CST 2016 mZxid = 0x100000013 mtime = Thu Aug 25 11:03:49 CST 2016 pZxid = 0x100000013 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 13 numChildren = 0
c2上查看同步结果:
get /c1project
[zk: c2:2181(CONNECTED) 0] get /c1project c1projecttest cZxid = 0x100000013 ctime = Thu Aug 25 11:03:49 CST 2016 mZxid = 0x100000013 mtime = Thu Aug 25 11:03:49 CST 2016 pZxid = 0x100000013 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 13 numChildren = 0
c3上查看同步结果:
[zk: c3:2181(CONNECTED) 4] get /c1project c1projecttest cZxid = 0x100000013 ctime = Thu Aug 25 11:03:49 CST 2016 mZxid = 0x100000013 mtime = Thu Aug 25 11:03:49 CST 2016 pZxid = 0x100000013 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 13 numChildren = 0
此时说明zookeeper集群配置成功。
leader
和follower
的自动切换,前面咱们知道c1是leader
,当leader
down掉后是否有从节点升级为leader
。
c1上执行
/var/local/server/zookeeper/bin/zkServer.sh stop
c2上查看状态
[root@cas ~]# /var/local/server/zookeeper/bin/zkServer.sh status JMX enabled by default Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg Mode: follower
能够发现c2仍然为从节点
再看看c3
[root@localhost ~]# /var/local/server/zookeeper/bin/zkServer.sh status JMX enabled by default Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg Mode: leader
此时c3升级为了主节点
再次启动c1,并查看状态
[root@sso conf]# /var/local/server/zookeeper/bin/zkServer.sh start JMX enabled by default Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [root@sso conf]# [root@sso conf]# /var/local/server/zookeeper/bin/zkServer.sh status JMX enabled by default Using config: /var/local/server/zookeeper/bin/../conf/zoo.cfg Mode: follower
发现c1做为了从节点。