zookeeper入门(一)——ZooKeeper伪集群安装

2023-05-16

zookeeper入门(一)——ZooKeeper伪集群安装

在进行本篇文章之前,先请大家了解一下zookeeper(后面的文章为了省事有可能直接使用zk缩写来替代),关于zookeeper的介绍这里就不做相应的说明了,需要了解的同学可以去参考百度百科或zk官网相关描述,本篇内容主要讲zk的安装。

zk主要有三种安装模式

  • 集群安装
  • 单机安装
  • 伪集群安装

由于是个人开发机器使用,限于环境约束,本篇只做了伪集群安装,具体的生产环境下集群安装可以参考官网相关描述。好了下来进入主题。

本篇中我们将要在本地开发机上安装三个zk实例,其安装位置分别如下

/data/application/zookeeper/zk1
/data/application/zookeeper/zk2
/data/application/zookeeper/zk3

具体的安装步骤如下:

  1. 下载zookeeper
  2. 解压及配置
  3. 启动zookeeper实例
  4. 使用客户端创建一个节点

1. 下载zookeeper

此处我们下载的是当前稳定版本,3.4.8这个版本

wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz

2. 解压及配置

进入第一个zk实例下, 然后解压下载的文件

cd /data/application/zookeeper/zk1
tar -xzvf zookeeper-3.4.8.tar.gz

解压完之后在zk1目录下面创建两个目录data和logs,分别用于存储当前zk实例数据和日志

mkdir data logs
➜  zk1 ls
data                   logs                   zookeeper-3.4.8

进入zookeeper-3.4.8/conf下,修改 zoo_sample.cfg,重命名为zoo.cgf,打开zoo.cfg进行配置,具体内容如下

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/application/zookeeper/zk1/data
dataLogDir=/data/application/zookeeper/zk1/logs
clientPort=2181
server.1=127.0.0.1:8881:7771
server.2=127.0.0.1:8882:7772
server.3=127.0.0.1:8883:7773

其中dataDir是数据存放目录、dataLogDir是日志存放目录。
server.id=host:port:port
id为server的id,用来标识该机器在集群中的机器序列号。同样需要在每个zk实例的dataLogDir下创建一个myid文件,其中内容即为该server的id

接下来通过zk1拷贝出来zk2和zk3

cp -R zk1 zk2
cp -R zk1 zk3

修改zk2和zk3下zoo.cfg文件
zk2下zoo.cfg内容

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/application/zookeeper/zk2/data
dataLogDir=/data/application/zookeeper/zk2/logs
clientPort=2182
server.1=127.0.0.1:8881:7771
server.2=127.0.0.1:8882:7772
server.3=127.0.0.1:8883:7773

zk3下zoo.cfg内容

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/application/zookeeper/zk3/data
dataLogDir=/data/application/zookeeper/zk3/logs
clientPort=2183
server.1=127.0.0.1:8881:7771
server.2=127.0.0.1:8882:7772
server.3=127.0.0.1:8883:7773

当前伪集群模式下,各个zk实例位置如下

➜  zookeeper pwd
/data/application/zookeeper
➜  zookeeper tree -d -L 2
.
├── zk1
│   ├── data
│   ├── logs
│   └── zookeeper-3.4.8
├── zk2
│   ├── data
│   ├── logs
│   └── zookeeper-3.4.8
└── zk3
    ├── data
    ├── logs
    └── zookeeper-3.4.8

12 directories

接下来执行如下3条命令

➜  zookeeper echo "1" >> /data/application/zookeeper/zk1/data/myid
➜  zookeeper echo "2" >> /data/application/zookeeper/zk2/data/myid
➜  zookeeper echo "3" >> /data/application/zookeeper/zk3/data/myid

3. 启动zookeeper实例

接下来分别启动这三个zk实例

➜  zookeeper /data/application/zookeeper/zk1/zookeeper-3.4.8/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/application/zookeeper/zk1/zookeeper-3.4.8/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
➜  zookeeper /data/application/zookeeper/zk2/zookeeper-3.4.8/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/application/zookeeper/zk2/zookeeper-3.4.8/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
➜  zookeeper /data/application/zookeeper/zk3/zookeeper-3.4.8/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/application/zookeeper/zk3/zookeeper-3.4.8/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

为了方便起见,这里写了一个简单的shell脚本(zookeeper.sh)用以启动和停止zookeeper,对shell不太熟悉,写的比较烂哈

# Zookeeper启动脚本
#!/bin/sh

# 传入操作类型start or stop
OPERATOR=$1

# 如果参数为空,默认为启动操作
if [ "${OPERATOR}" = "" ]
then
  OPERATOR="start"
fi
echo "Begin ${OPERATOR} zookeeper......"

BASE_DIR="/data/application/zookeeper"
ZK_VERSION="zookeeper-3.4.8"

for zk in zk1 zk2 zk3
do
    ${BASE_DIR}/${zk}/${ZK_VERSION}/bin/zkServer.sh ${OPERATOR}
done

echo "Success ${OPERATOR} zookeeper ......"

使用方式
+ 启动集群服务

./zookeeper.sh
或者
./zookeeper.sh start


  • 停掉集群服务

./zookeeper.sh stop

启动完之后我们选择其中一个实例,这里我们选择zk2这个实例,使用zkCli.sh连接一下服务

➜  zookeeper /data/application/zookeeper/zk2/zookeeper-3.4.8/bin/zkCli.sh -server 127.0.0.1:2182
Connecting to 127.0.0.1:2182
2016-06-29 15:34:49,338 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.8--1, built on 02/06/2016 03:18 GMT
2016-06-29 15:34:49,343 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=localhost
2016-06-29 15:34:49,343 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.8.0_71
2016-06-29 15:34:49,346 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2016-06-29 15:34:49,346 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_71.jdk/Contents/Home/jre
2016-06-29 15:34:49,346 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/data/application/zookeeper/zk2/zookeeper-3.4.8/bin/../build/classes:/data/application/zookeeper/zk2/zookeeper-3.4.8/bin/../build/lib/*.jar:/data/application/zookeeper/zk2/zookeeper-3.4.8/bin/../lib/slf4j-log4j12-1.6.1.jar:/data/application/zookeeper/zk2/zookeeper-3.4.8/bin/../lib/slf4j-api-1.6.1.jar:/data/application/zookeeper/zk2/zookeeper-3.4.8/bin/../lib/netty-3.7.0.Final.jar:/data/application/zookeeper/zk2/zookeeper-3.4.8/bin/../lib/log4j-1.2.16.jar:/data/application/zookeeper/zk2/zookeeper-3.4.8/bin/../lib/jline-0.9.94.jar:/data/application/zookeeper/zk2/zookeeper-3.4.8/bin/../zookeeper-3.4.8.jar:/data/application/zookeeper/zk2/zookeeper-3.4.8/bin/../src/java/lib/*.jar:/data/application/zookeeper/zk2/zookeeper-3.4.8/bin/../conf:
2016-06-29 15:34:49,346 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/Users/didi/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
2016-06-29 15:34:49,347 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/var/folders/r9/35q9g3d56_d9g0v59w9x2l9w0000gn/T/
2016-06-29 15:34:49,347 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>
2016-06-29 15:34:49,347 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Mac OS X
2016-06-29 15:34:49,347 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=x86_64
2016-06-29 15:34:49,348 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=10.11.1
2016-06-29 15:34:49,348 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=mahaiyuan
2016-06-29 15:34:49,348 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/Users/didi
2016-06-29 15:34:49,348 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/data/application/zookeeper
2016-06-29 15:34:49,350 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=127.0.0.1:2182 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@531d72ca
Welcome to ZooKeeper!
2016-06-29 15:34:49,388 [myid:] - INFO  [main-SendThread(127.0.0.1:2182):ClientCnxn$SendThread@1032] - Opening socket connection to server 127.0.0.1/127.0.0.1:2182. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2016-06-29 15:34:49,486 [myid:] - INFO  [main-SendThread(127.0.0.1:2182):ClientCnxn$SendThread@876] - Socket connection established to 127.0.0.1/127.0.0.1:2182, initiating session
[zk: 127.0.0.1:2182(CONNECTING) 0] 2016-06-29 15:34:49,601 [myid:] - INFO  [main-SendThread(127.0.0.1:2182):ClientCnxn$SendThread@1299] - Session establishment complete on server 127.0.0.1/127.0.0.1:2182, sessionid = 0x2559b1280e60000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

同样写了个脚本zkCli.sh,用于连接zk服务

#!/bin/sh

# 使用哪一个zk的client 其值可以为zk1 zk2 zk3 如果不传默认为zk1
zk=$1
if [ -z "${zk}" ]
then
  zk="zk1"
fi

# 连接哪个Server,如果不传默认使用当前client对应的server
server=$2
if [ -n "${server}" ]
then
  server=" -server ${server}"
fi

BASE_DIR="/data/application/zookeeper"
ZK_VERSION="zookeeper-3.4.8"

${BASE_DIR}/${zk}/${ZK_VERSION}/bin/zkCli.sh ${server}

使用方式

./zkCli.sh
或者
./zkCli.sh zk1 127.0.0.1:2182

4. 使用客户端创建一个节点

接下来我们在当前所连接的物理节点上(这里连接的是zk2这个实例)创建一个数据节点

[zk: 127.0.0.1:2182(CONNECTED) 0] create /zk-demo 123
Created /zk-demo
[zk: 127.0.0.1:2182(CONNECTED) 1] get /zk-demo
123
cZxid = 0x100000002
ctime = Wed Jun 29 15:39:44 CST 2016
mZxid = 0x100000002
mtime = Wed Jun 29 15:39:44 CST 2016
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

然后我们再连接另一个zk实例(连接zk1或zk3),看是否能获取到该数据节点

/data/application/zookeeper/zk1/zookeeper-3.4.8/bin/zkCli.sh -server 127.0.0.1:2183
[zk: 127.0.0.1:2183(CONNECTED) 0] get /zk-demo
123
cZxid = 0x100000002
ctime = Wed Jun 29 15:39:44 CST 2016
mZxid = 0x100000002
mtime = Wed Jun 29 15:39:44 CST 2016
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

同样能获取到刚才在节点zk2中设置的/zk-demo数据节点的内容,到此关于ZooKeeper伪集群安装完毕。

参考内容:

  • zk官网:http://zookeeper.apache.org/doc/r3.4.8/zookeeperStarted.html
  • 《从PAXOS到ZOOKEEPER分布式一致性原理与实践》
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

zookeeper入门(一)——ZooKeeper伪集群安装 的相关文章

  • Eureka和Zookeeper的区别

    Eureka和Zookeeper的区别 Mysql Oracle SqlServer等关系型数据库遵循的原则是 ACID 原则 即 A 原子性 C 一致性 I 独立性 D 持久性 Redis Mogodb 等非关系型数据库遵循的原则是 CA
  • 【Dubbo】Dubbo(二)简单实践

    Dubbo 二 实践 安装注册中心 下载zookeeper 在zookeeper路径下新增date文件夹存储数据 conf路径下新增zoo cfg 编辑zoo cfg 修改数据目录dataDir为新增的data文件夹 其他与zoo samp
  • zookeeper入门到精通03——zookeeper集群搭建

    zookeeper集群搭建 3 1 多虚拟机环境搭建 3 2 zookeeper集群搭建 3 1 多虚拟机环境搭建 我们需要搭建zookeeper集群 而由于zookeeper的的服务器数量需要设置为单数 前文介绍了原因 一个zookeep
  • ZooKeeper(八)伸缩性

    一 ZooKeeper中Observer 1 1 ZooKeeper角色 经过前面的介绍 我想大家都已经知道了在ZooKeeper集群当中有两种角色Leader和Follower Leader可以接受client 请求 也接收其他Serve
  • zookeerp安装与配置

    1 zookeeper官网 https zookeeper apache org 2 找到download 然后打开的页面打开archive 版本页面不选择内测或者公测版本 选择一个稳定的 然后下载下来 解压 进入红框目录 在红框目录打cm
  • Zookeeper缩容5缩3操作记录(二)

    测试目标 测试5台缩3台zk 先shutdown 一台5 再将1 2 3配置修改为1 2 3 逐一重启 是否会发生脑裂 测试过程 准备1 2 3 4 5 五台 3为leader 将5 shutdown 1 将1配置修改为1 2 3 重启 结
  • Arthas 定位CPU跑满问题,源头竟是Apache Beanutils

    一 背景 大早上 线上k8s 机子 某个机子 cpu 飙高 导致k8s 健康检查失败 线上环境会自动执行jstack 上传到oss 通知到 钉钉告警群 直接分析锁 cpu 高的线程 二 过程分析 2 1 排查cpu 占用最高的线程 使用js
  • ZooKeeper 分布式协调工具

    目录 一 ZooKeeper 概述 二 ZooKeeper Windows 单机版安装 三 ZooKeeper 集群环境下选举过程 四 ZooKeeper 存储数据的过程 五 ZooKeeper 监听 六 java 操作 ZooKeeper
  • 如何启动单节点zookeeper以及注意事项

    1 安装jdk 因为zookeeper是基于java进行开发的 2 将zookeeper解压之后 再zookeeper目录下conf目录下有一个zoo sample cfg 将它改名成zoo cfg 因为zookeeper启动时自动加载的是
  • 【clickhouse】clickhouse Exception: Table is in readonly mode

    文章目录 1 概述 1 概述 clickhouse报错 Code 242 e displayText DB Exception Table is in readonly mode zookeeper path clickhouse tabl
  • ZooKeeper的一些总结

    文章目录 前言 一 Zookeeper是什么 二 Zookeeper用来做什么 三 Zookeeper的优势是什么 四 为什么用zookeeper 五 zookeeper解决了什么问题 总结 前言 Zookeeper作为一个分布式协调服务
  • dubbo 项目既是提供方又是消费方,调用不到服务问题

    1 先查看服务提供者有没有注册 这里通过安装eclipse中的zookeeper插件 进行了查看 服务已经注册上了 2 注册上以后 查看调用者有没有在zookeeper中注册 此时通过查看 并没有 3 没有注册上 然后查看是否是配置哪里出了
  • 使用Xshell7控制多台服务同时安装ZK最新版集群服务

    一 环境准备 主机名称 主机IP 节点 集群内通讯端口 选举leader clinet端提供服务 端口 docker0 192 168 1 100 node 0 2888 3888 2181 docker1 192 168 1 101 no
  • 年底裸辞准备面试,我用7张图画了ZK分布式锁!

    一 写在前面 之前写过一篇文章 都2022年了 出去面试连分布式锁的源码你都不会画 给大家说了一下Redisson这个开源框架是如何实现Redis分布式锁原理的 这篇文章再给大家聊一下ZooKeeper实现分布式锁的原理 同理 我是直接基于
  • Dubbo源码分析-服务导出源码解析(三)

    在这个版本中dubbo会通过注解 PostConstruct把ServiceBean实例放到ConfigManager中 public abstract class AbstractConfig implements Serializabl
  • Zookeeper之ZAB协议

    1 概念 Zookeeper使用 种称为Zookeeper Atomic Broadcast ZAB Zookeeper原 消息 播协议 的协议作为其数据 致性的核 算法 ZAB协议并不像Paxos算法那样 是 种通 的分布式 致性算法 它
  • 01-ZooKeeper快速入门

    1 Zookeeper概念 Zookeeper是Apache Hadoop项目下的一个子项目 是一个树形目录服务 zookeeper翻译过来就是 动物园管理员 它是用来管理Hadoop 大象 Hive 蜜蜂 Pig 小猪 的管理员 简称ZK
  • [分布式] zookeeper集群与kafka集群

    目录 一 Zookeeper 概述 1 1 Zookeeper定义 1 2 Zookeeper 工作机制 1 3 Zookeeper 特点 1 4 Zookeeper 数据结构 1 5 Zookeeper 应用场景 1 6 Zookeepe
  • zookeeper 搭建教程(完整版)

    zookeeper 搭建教程 完整版 1 解压zookeeper文件 root master tar zxvf opt software apache zookeeper 3 5 7 bin tar gz C opt module 修改文件
  • 【Docker安装部署Kafka+Zookeeper详细教程】

    Docker安装部署Kafka Zookeeper Docker拉取镜像 Docker拉取zookeeper的镜像 docker pull zookeeper Docker拉取kafka的镜像 docker pull wurstmeiste

随机推荐

  • FreeRTOS系列|消息队列一

    消息队列一 1 消息队列简介 消息队列可以在任务与任务 任务与中断之间传递消息 xff0c 队列可以保存有限个具有确定长度的数据单元 队列可保存的最大单元数目被称为队列的长度 xff0c 在队列创建时需要指定其长度和每个单元 xff08 队
  • 【达内课程】网络通信之HTTP协议和Get请求实例(1)

    文章目录 HTTP协议发送HTTP GET请求增加参数 HTTP协议 HTTP协议 HTTP 协议是超文本传输控制协议 HTTP 协议中定义了客户端与服务端的通信流程与数据交互格式 网络通信中的长连接与短链接 长连接 xff1a 当客户端与
  • 学习Kalibr工具--Camera与IMU联合标定过程

    上一节介绍了 xff0c 用kalibr工具对camera进行标定的操作流程 xff0c 在camera标定之好之后 xff0c 进行camera与IMU进行联合标定的操作的学习 xff0c 即求取相机和IMU 之间的转换关系 坐标系之间的
  • C++之数据对齐

    目录 关于对齐数据对齐结构体对齐原则原理分析 关于对齐 对齐方式 xff1a 表示的是一个类型的对象存放的内存地址应满足的条件好处 xff1a 对齐的数据在读写上有性能优势对于不对齐的结构体 xff0c 编译器会自动补齐以提高CPU的寻址效
  • 对于人工智能,你有怎样的认识和理解?

    作为最初级的程序员 xff0c 对于高深的技术总是望尘莫及 xff0c 而高大上的人工智能更是让我们感觉遥远 xff0c 不过路都是一步步走出来的 xff0c 只要一直走 xff0c 总有触及到的一天 今天就来聊聊你对于人工智能的认识吧 x
  • windows通过独立ip形式访问docker容器

    windows10环境下通过docker容器独立ip暴露给局域网进行访问 自定义docker network docker network create subnet 61 172 20 0 0 24 mhy net 启动docker ng
  • Docker镜像

    概述 前面我们说了Docker的基本概念 xff0c 这里我们把每一块内容进行详细疏理一下 xff0c 本篇主要讲的是Docker的镜像相关内容 注 xff1a 本篇内容主要以 Docker从入门到实践 中镜像一模块为主线 xff0c 结合
  • Docker容器

    概述 前面我们讲了Docker三个主要概念中的镜像 xff0c 这里我们再来讲一下Docker的第二个重要概念 xff1a 容器 容器是独立运行的一个或一组应用以及它们的运行态环境 关于容器本篇主要讲如下几部分内容 xff1a 启动容器 关
  • 如何进入Docker容器

    概述 在使用Docker创建了容器之后 xff0c 大家比较关心的就是如何进入该容器了 xff0c 其实进入Docker容器有好几多种方式 xff0c 这里我们就讲一下常用的几种进入Docker容器的方法 进入Docker容器比较常见的几种
  • 从零开始使用Docker构建Java Web开发运行环境

    概述 前面我们讲了关于Docker的一些基本概念和操作 xff0c 今天我们以一个简单的Java Web例子来说一下Docker在日常工作中的应用 xff0c 本篇主要讲如下几部分内容 xff1a 创建jdk镜像 创建resin镜像 启动w
  • Spring MapFactoryBean应用详解

    在我们工作中 xff0c 尤其是电商系统中 xff0c 一个庞大的电商平台不是一个封闭的平台 xff0c 往往还伴生着一个开放平台 xff0c 用以接入各个企业 xff0c 以实现一种共赢的局面 xff0c 一般来讲 xff0c 针对于这种
  • FreeRTOS系列|二值信号量

    二值信号量 1 信号量简介 信号量一般用来进行资源管理和任务同步 xff0c FreeRTOS中信号量又分为二值信号量 计数型信号量 互斥信号量和递归互斥信号量
  • ubuntu ifconfig命令无效解决方案

    1 更新或升级系统 sudo apt get update 2 安装ipconfig的工具 sudo apt install net tools 3 查看ip ifconfig
  • 树莓派4b镜像烧录以及如何无显示屏远程登陆操作

    1 树莓派的烧录 xff1a 树莓派的烧录我用了很长的时间 xff0c 重新烧录的很多次 xff0c 都是因为没办法打开ssh xff0c 所以没办法进入树莓派调试 因为我使用树莓派主要是用来部署yolov5进行识别物体的 xff0c 所以
  • MyBatis入门——动态SQL

    前言 在我们日常工作中 xff0c 使用MyBatis除了做一般的数据查询之外 xff0c 还有很多业务场景下需要我们针对不同条件从数据库中获取到满足指定条件的数据 xff0c 这时候我们应该如何来做呢 xff1f 针对每种条件封装一个方法
  • Docker搭建本地私有仓库

    和Mavan的管理一样 xff0c Dockers不仅提供了一个中央仓库 xff0c 同时也允许我们使用registry搭建本地私有仓库 使用私有仓库有许多优点 xff1a 一 节省网络带宽 xff0c 针对于每个镜像不用每个人都去中央仓库
  • 斐波那契数列 Java实现

    关于斐波那契数列在百度百科上的定义如下 xff1a 斐波那契数列 xff0c 又称黄金分割数列 xff0c 指的是这样一个数列 xff1a 0 1 1 2 3 5 8 13 21 34 在数学上 xff0c 斐波纳契数列以如下被以递归的方法
  • Maven+Jetty运行项目无法热修改html处理

    一直以来都在做后端工程的开发 xff0c 很少做前端设计 xff0c 最近工作需要开始做前端开发 xff0c 感觉 辛辛苦苦几十年 xff0c 一朝回到解放前 的节奏啊 xff0c 遇到不少问题 xff0c 记录下来以备后查 今天在使用Ma
  • Spring4.3.0 Junit4.11 initializationError(org.junit.runner.manipulation.Filter)

    Spring4 3 0 Junit4 11 initializationError org junit runner manipulation Filter 昨天手欠 xff0c 在项目中把Spring3 2 14版本升级到4 3 0版本
  • zookeeper入门(一)——ZooKeeper伪集群安装

    zookeeper入门 xff08 一 xff09 ZooKeeper伪集群安装 在进行本篇文章之前 xff0c 先请大家了解一下zookeeper xff08 后面的文章为了省事有可能直接使用zk缩写来替代 xff09 xff0c 关于z