zookeeper伪集群设置

单机多实例

因为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

    《zookeeper伪集群设置》 目录结构

  1. 修改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
  1. 分别在dataDir指定的目录下创建myid文件,对应server.x的编号
  2. 分别启动:
zkServer.sh start zoo1.cfg
zkServer.sh start zoo2.cfg
zkServer.sh start zoo3.cfg
  1. 分别查看状态,可以查看对应配置文件的实例是leader还是follower:
zkServer.sh status zoo1.cfg 
zkServer.sh status zoo2.cfg 
zkServer.sh status zoo3.cfg 
  1. 用客户端同时连接:
zkCli.sh -server localhost:2183,localhost:2182,localhost:2181
  1. 分别关闭:
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

    原文作者:肥肥小浣熊
    原文地址: https://www.jianshu.com/p/09eb57089091
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞