ZOOKEEPER集群搭建及测试
时间:2022-04-29
本文章向大家介绍ZOOKEEPER集群搭建及测试,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
①. zk是由java编写的需要java运行环境,所以大家首先要安装JDK
具体安装步骤,不再赘述
②. 首先进入zk的conf目录,将zoo_sample.cfg文件改名为zoo.cfg,并修改内容
tickTime=2000 #ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime。
initLimit=5 #Leader允许Follower在 initLimit 时间内完成这个工作
syncLimit=2 #心跳检测,Leader发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了
dataDir=/usr/local/zookeeper/data #我们需要在此目录下创建myid用于标识zk节点,对应server.x,事务日志也会存储在这里
dataLogDir=/usr/local/zookeeper/logs #事务日志输出目录
clientPort=2181 #对外提供的端口号,默认2181
server.1=zk1:2888:3888 #server.x跟myid对应,两个通信端口第一个端口用于F和L之间的数据同步和其它通信,第二个端口用于Leader选举过程中投票通信。
server.2=zk2:2888:3888
server.3=zk3:2888:3888
③. 设置myid, 在zk根目录创建前面zoo.cfg中配置的dataDir指定的文件夹,创建myid,myid中的值需与server.x保持一致
④. 都设置完之后,记得检查一下各节点端口是否打通,并且关闭防火墙
⑤. 进入bin目录,执行 sh zkServer.sh start & 命令,通过JPS检查是否启动,并且查看日志:
tail -fn 100 zookeeper.out,第一个节点启动,会报如下异常:
此时不做理会,当所有节点启动完成之后即恢复正常
2017-09-14 14:50:24,993 [myid:2] - INFO [QuorumPeer[myid=2]/0:0:0:0:0:0:0:0:2181:QuorumPeer$QuorumServer@149] - Resolved hostname: 192.168.116.127 to address: /zk2
2017-09-14 14:50:24,995 [myid:2] - WARN [QuorumPeer[myid=2]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@400] - Cannot open channel to 3 at election address /zk2:3888
java.net.ConnectException: 拒绝连接
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:381)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:426)
at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:843)
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:822)
,使用 sh zkServer.sh status检查节点状态,一般myid大的为leader
客户端验证是否成功:
private final static String CONNECT_STRING = "zk1:2181,zk2:2181,zk3:2181";
private final static int SESSION_TIMEOUT = 2000;
private ZooKeeper zk = null;
@Before
public void init() throws Exception {
zk = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, new ZKWatcher());
}
@Test
public void create() throws Exception {
String cResponse = zk.create("/app-01", "hello this is app-01 node".getBytes(),
Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
Thread.sleep(1000);
System.out.println("--->create:" + cResponse);
}
@Test
public void get() throws Exception {
System.out.println(zk.getChildren("/", new ZKWatcher()));
}
@Test
public void set() throws Exception {
System.out.println(zk.setData("/app-01", "this is app-01 node.update count 4".getBytes(), -1));
}
@Test
public void getData() throws Exception {
System.out.println(new String(zk.getData("/app-01/hello", new ZKWatcher(), null)));
// Thread.sleep(Long.MAX_VALUE);
}
或使用工具:ZooInspector连接,检查使用情况以及服务端状态
- 关于interval partitioning(r3笔记65天)
- Spark Tips4: Kafka的Consumer Group及其在Spark Streaming中的“异动”(更新)
- 关于数据库中的一些name(r3笔记第64天)
- 码农的瑞士军刀-脚本语言
- shell基础学习总结(一) (r3笔记第63天)
- 关于sysdba,sysoper,dba的区别(r3笔记第62天)
- 使用句柄实现特定场景的无备份恢复 (r3笔记第61天)
- 关于dual表的破坏性测试(r3笔记第60天)
- 哈希现金(Hashcash)与“工作量证明”
- 关于oracle中的sql数据类型(r3笔记第59天)
- 使用awr来分析sesson leak问题(r3笔记第78天)
- 弹窗层效果的实现(非jQuery实现)
- 简单的导航栏实现
- js实现css3的过渡,需要注意的一点(浏览器优化)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- RocketMQ详解(4)——入门程序
- animate.css+wow.js实现网页动画
- 微信小程序一键保存多张图片
- 微信小程序swiper显示左右两边内容
- Spring源码学习笔记(1)——容器的基本实现
- RocketMQ详解(6)——Producer详解
- 微信小程序截取数组每三个为一组渲染
- CSS3弹窗动画效果
- 微信小程序获取input框的值双向数据绑定
- 微信小程序处理pages的函数比app.js先执行
- Swiper做轮播图
- 微信小程序实现图片上传限制数量和删除
- 微信小程序实现canvas生成海报保存到本地
- RocketMQ详解(7)——顺序消费
- jquery.qrcode生成带logo二维码