单机多实例
因为zk集群通过选举算法选出leader,所以集群中的实例个数最好是奇数个,当过半的节点都崩了,整个集群就连不上了
- dubbo需要的zkclient的jar包现在最新版本是16年的0.10,依赖的zookeeper是3.4.8版本,所以这里使用该版本的zookeeper。
- 最新的3.5(现在还都是测试版)以上的会有一个内嵌的web服务,通过访问http://localhost:8080/commands来查看zk的命令,所以和tomcat的默认端口冲突
-
看一下目录结构,在zookeeper-3.4.8文件夹下新增deploy目录,里面的123分别对应一会要用的3个zk实例,123中分别拷贝一份zoo_sample.cfg并重命名为zoo.cfg
目录结构
- 修改zoo.cfg:
# zk服务器之间或zk服务器和客户端之间的心跳时间间隔,每隔tickTime就会发送一次心跳
tickTime=2000
# zk集群的follower连接到leader初始化连接时能够忍受的最多tickTime,超过initLimit个tickTime还没有连上,则认为连接失败
initLimit=10
# zk集群中leader和follower之间通信时间不能超过syncLimit个tickTime
syncLimit=5
# 必须不同
dataDir=/usr/local/zookeeper-3.4.8/deploy/1/data
# 必须不同
clientPort=2181
# 必须不同,事务日志存放目录,事务日志的写入速度严重影响zookeeper的性能
dataLogDir=/usr/local/zookeeper-3.4.8/deploy/1/logs
# 真正的集群环境(多机多实例),端口设为一样。2889端口是 集群中follower和leader通信的接口,3889是leader挂掉后选举leader的端口。server.x中x和myid中的编号要一样
server.1=127.0.0.1:2889:3889
server.2=127.0.0.1:2890:3890
server.3=127.0.0.1:2891:3891
- 分别在dataDir指定的目录下创建myid文件,对应server.x的编号
- 分别启动:
zkServer.sh start zoo1.cfg
zkServer.sh start zoo2.cfg
zkServer.sh start zoo3.cfg
- 分别查看状态,可以查看对应配置文件的实例是leader还是follower:
zkServer.sh status zoo1.cfg
zkServer.sh status zoo2.cfg
zkServer.sh status zoo3.cfg
- 用客户端同时连接:
zkCli.sh -server localhost:2183,localhost:2182,localhost:2181
- 分别关闭:
zkServer.sh stop zoo1.cfg
zkServer.sh stop zoo2.cfg
zkServer.sh stop zoo3.cfg
-
echo ruok | nc localhost 2181或telnet localhost 2181输入ruok,如果zk正常会返回imok
-
修改bin下的zkEnv.sh中
ZOO_LOG_DIR="/usr/local/zookeeper-3.4.8/deploy"
,否则在哪个路径启动zk就会在哪输出zookeeper.out -
在zk的/dubbo下存放着所有注册的服务,以接口全路径名称存储。再下一级有providers和consumers
网友评论