概述
所谓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.cfgtickTime=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.cfgtickTime=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
启动zk1cd $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,但是由于其他的都没启动,所以连接失败。
启动zk2cd $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。
最后
以上就是无限大神为你收集整理的java连接zookeeper集群_Zookeeper集群环境搭建的全部内容,希望文章能够帮你解决java连接zookeeper集群_Zookeeper集群环境搭建所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复