1.2 Zookeeper集群环境搭建
2016-04-12 23:11:21
5,863
0
所谓Zookeeper的伪分布式搭建,就是在同一台机器上的不同端口,启动多个zookeeper Server实例,并通过多个配置文件来实现Server之间的通信。
新建以下目录和文件:
[root@www zookeeper-3.4.5-cdh5.4.7]# tree $ZOOKEEPER_HOME/pseudo_conf/ /usr/local/zookeeper-3.4.5-cdh5.4.7/pseudo_conf/ ├── zk1 │ ├── data │ │ └── myid │ └── zk1.cfg ├── zk2 │ ├── data │ │ └── myid │ └── zk2.cfg └── zk3 ├── data │ └── myid └── zk3.cfg
创建脚本
mkdir $ZOOKEEPER_HOME/pseudo_conf mkdir $ZOOKEEPER_HOME/pseudo_conf/zk1 mkdir $ZOOKEEPER_HOME/pseudo_conf/zk2 mkdir $ZOOKEEPER_HOME/pseudo_conf/zk3 mkdir $ZOOKEEPER_HOME/pseudo_conf/zk1/data mkdir $ZOOKEEPER_HOME/pseudo_conf/zk2/data mkdir $ZOOKEEPER_HOME/pseudo_conf/zk3/data touch $ZOOKEEPER_HOME/pseudo_conf/zk1/data/myid touch $ZOOKEEPER_HOME/pseudo_conf/zk2/data/myid touch $ZOOKEEPER_HOME/pseudo_conf/zk3/data/myid echo 1 > $ZOOKEEPER_HOME/pseudo_conf/zk1/data/myid echo 2 > $ZOOKEEPER_HOME/pseudo_conf/zk2/data/myid echo 3 > $ZOOKEEPER_HOME/pseudo_conf/zk3/data/myid touch $ZOOKEEPER_HOME/pseudo_conf/zk1/zk1.cfg touch $ZOOKEEPER_HOME/pseudo_conf/zk2/zk2.cfg touch $ZOOKEEPER_HOME/pseudo_conf/zk3/zk3.cfg
zk1.cfg
tickTime=2000 initLimit=10 syncLimit=5 dataDir=./data clientPort=2181 server.1=127.0.0.1:2222:2223 server.2=127.0.0.1:3333:3334 server.3=127.0.0.1:4444:4445
zk2.cfg
tickTime=2000 initLimit=10 syncLimit=5 dataDir=./data clientPort=2183 server.1=127.0.0.1:2222:2223 server.2=127.0.0.1:3333:3334 server.3=127.0.0.1:4444:4445
启动zk1
cd $ZOOKEEPER_HOME/pseudo_conf/zk1 #第一个参数值可以使start/stop 第二个参数指的是配置文件的配置 /usr/local/zookeeper-3.4.5-cdh5.4.7/bin/zkServer.sh start ./zk1.cfg
因为我们设置了集群中有3台机器,现在只启动了其中一台,因为Zookeeper目前还是不可以用的,
查看当前目录下的zookeeper.out文件,有类似以下内容
... [myid:1] - INFO [QuorumPeer[myid=1]/...:2181:QuorumPeer@670] - LOOKING ... [myid:1] - INFO [QuorumPeer[myid=1]/...:2181:FastLeaderElection@740] - New election. My id = 1, proposed zxid=0x0 ... [myid:1] - INFO [WorkerReceiver[myid=1]:FastLeaderElection@542] - Notification: 1 ..., LOOKING (my state) ... [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@368] - Cannot open channel to 2 at election address /127.0.0.1:3334 Java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
可以看到zk1尝试连接其他的zookeeper server,但是由于其他的都没启动,所以连接失败。
启动zk2
cd $ZOOKEEPER_HOME/pseudo_conf/zk2 #第一个参数值可以使start/stop 第二个参数指的是配置文件的配置 /usr/local/zookeeper-3.4.5-cdh5.4.7/bin/zkServer.sh start ./zk2.cfg
查看zk2的启动日志
... [myid:1] - INFO [QuorumPeer[myid=1]/...:2181:QuorumPeer@738] - FOLLOWING ... [myid:1] - INFO [QuorumPeer[myid=1]/...:2181:ZooKeeperServer@162] - Created server ... ... [myid:1] - INFO [QuorumPeer[myid=1]/...:2181:Follower@63] - FOLLOWING - LEADER ELECTION TOOK - 212
说明zk1是follower。
虽然我们只启动了2个zk实例,但是由于已经超过集群总数的一半(3个当中启动了2个),所以此时服务已经可以用使用了。
此时我们要使用zkCli.sh去连接ZK服务。虽然zk3还没有启动,但是服务现在已经可以使用的,所以我们可以去连接,在zk3没有启动的情况下,去连接ZK服务,可以帮助我们更好的了解zookeeper的一些特点。
${ZOOKEEPER_HOME}/bin/zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
启动zkCli时,控制台打印出类似以下内容:
Socket connection established, initiating session, client: /127.0.0.1:42939, server: localhost/127.0.0.1:2182
说明当前连接的是zk2,如果停止zkCli,再启动zkCli,重复几次这样的操作。我们会看到客户端连接连接的端口号在zk1(2181)和zk2(2182)之间切换,如果连接了zk3(2183),就会提示连接失败信息,并自动尝试去连接其他的server。