这可能是搭建Zookeeper集群介绍最全的文章
1.搭建
怎么搭建单机无安全校验的就不说了,百度一搜一大堆。这里我就说说怎么搭建一个生产环境可用的Zookeeper集群
Docker方式不太建议,要考虑的东西比较多,如果要用Docker方式还是比较建议自建镜像,假如是Docker专家可以忽略本句。
以下介绍的都是Linux服务器下搭建(Winserver服务器的也是雷同)先操作单机,再copy到其他机器。下载完Zookeeper(下称zk)后,进入zk解压目录下的conf文件夹,zoo_sample.cfg是zk的配置文件实例,Copy一个出来命名为zoo.cfg zk默认会读这个配置。
配置详解:
- tickTime :心跳发送的间隔时间,用于判定Client是否断开(默认2000ms)
- dataDir :zk数据文件保存目录,zk是基于文件来存储配置的
- clientPort :这个端口就是客户端连接 zk 服务器的端口,zk 会监听这个端口,接受客户端的访问请求。
- initLimit:初始化Client时的重试次数(默认5次),判断Client是否连接成功就是发initLimit次心跳,每tickTime发一次,如果都失败了代表这个Client连接失败了
- syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
- server.n = ip:port:electPort: n代表每个实例的序号,ip是实例的ip地址,port是实例间交互的端口,electPort是重新选举Leader时的端口 (集群方式才用到, 单机可以注释这个配置,之前问过大神,大神表示zk搭建至少3个实例比较稳当,这个与它自身的选举机制有关)
- maxClientCnxns: 最大Client连接数,业务需求并发大,机器比较强劲的就设置大点咯(默认60)
- autopurge.snapRetainCount:自动清理snapshot和事务日志时保留的文件数(默认3个)
- autopurge.purgeInterval: 清理频率(单位小时, 默认是0代表不开启,大于0代表开启`)
如需使用Hosts请在每个实例所在的机器设置Hosts(/etc/hosts) 如:zk1 127.0.0.1
下面贴一下我的简单配置:
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/data/zookeeper/data # the port at which the clients will connect clientPort=2181 server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk2:2888:3888
2. 启动
zk的脚本都放在zk/bin 目录下
zkServer.sh 服务操作脚本(只介绍常用命令)
# 后台启动 ./zkServer.sh start # 前台启动 ./zkServer.sh start-foreground # 停止 ./zkServer.sh stop # 重启 ./zkServer.sh restart # 查看状态 (其中 Mode代表是Leader节点还是Follow节点) ./zkServer.sh status
zkCli.sh 是zk的客户端,默认连接本机实例,可以通过进入ZkCli后执行ZooKeeper -server host:port cmd args去操作其他远程实例
# 进入zk客户端命令行操作 ./zkCli.sh
列举下一些常用命令(其他命令可以)
# 查看根目录下节点 ls /path get /path # 查看节点状态/属性 stat /path # 删除节点 rmr /path # 删除节点下数据 delete /path [version]
3. 权限验证
zk的权限验证有3种方式,这里只介绍比较常用的两种方式(先搭建好集群,权限设置会同步到整个集群):
第一步:新建节点 (如果给已有节点添加权限可忽略)
create /path "test" #创建节点和别名
1. 通过IP限制
#进入zkCli后的权限验证设置命令 后面会介绍permission参数 setAcl /path ip:192.168.1.1:[permissions] #也可以是ip段 setAcl /path ip:192.168.0.0/16:[permissions] #验证 本机校验是通过的。可以用另一个ip段的来验证 ls /path
2. 通过用户+密码控制
这种方式的密码是BASE64(SHA1(原文密码))出来的密文,怎样生成保证成功的密文呢
#通过这个类计算出密文(对应的版本可以从zk/lib目录下看到) java -cp ./zookeeper-3.4.13.jar:./lib/log4j-1.2.17.jar:./lib/slf4j-log4j12-1.7.25.jar:./lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider test:123456
#test是用户名 password是密码BASE64(SHA1(原文密码)) setAcl /path digest:test:password:[permission]
# 校验是否成功,现在肯定是成功的,但是重新进入zkCli就会失败了 ls /path #进入zkCli执行addAuth命令,这是类似登录的功能 test是用户名,123456是刚刚的原文 addauth digest test:123456 #然后再执行 ls命令 这时候就成功 ls /path
permission介绍
permission是用cdrwa来表示 如:
setAcl /path digest:test:password:cdw
每个字母分别代表的是:
- CREATE(c): 创建权限,可以在在当前node下创建child node
- DELETE(d): 删除权限,可以删除当前的node
- READ(r): 读权限,可以获取当前node的数据,可以list当前node所有的child nodes
- WRITE(w): 写权限,可以向当前node写数据
- ADMIN(a): 管理权限,可以设置当前node的permission
4.总结
网上很多类似的文章,不过我觉得太分散了,当要搭建一个zk集群时需要找几篇文章来看,现在就是将搭建+集群+校验放在一起介绍,一篇文章可以直接上生产了,如果喜欢的欢迎收藏点赞,有错的地方希望可以指出来我马上修改。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
接口自动化测试框架开发 (pytest+allure+aiohttp+ 用例自动生成)
近期准备优先做接口测试的覆盖,为此需要开发一个测试框架,经过思考,这次依然想做点儿不一样的东西。 接口测试是比较讲究效率的,测试人员会希望很快能得到结果反馈,然而接口的数量一般都很多,而且会越来越多,所以提高执行效率很有必要 接口测试的用例其实也可以用来兼做简单的压力测试,而压力测试需要并发 接口测试的用例有很多重复的东西,测试人员应该只需要关注接口测试的设计,这些重复劳动最好自动化来做 pytest和allure太好用了,新框架要集成它们 接口测试的用例应该尽量简洁,最好用yaml,这样数据能直接映射为请求数据,写起用例来跟做填空题一样,便于向没有自动化经验的成员推广 加上我对Python的协程很感兴趣,也学了一段时间,一直希望学以致用,所以http请求我决定用aiohttp来实现。 但是pytest是不支持事件循环的,如果想把它们结合还需要一番功夫。于是继续思考,思考的结果是其实我可以把整个事情分为两部分。 第一部分,读取yaml测试用例,http请求测试接口,收集测试数据。 第二部分,根据测试数据,动态生成pytest认可的测试用例,然后执行,生成测试报告。 这样一来,两者就能完...
- 下一篇
gRPC基本使用(一)--java与go之间的相互调用
gRPC是一个高性能、开源、通用的RPC框架,面向移动和HTTP/2设计。gRPC 默认使用 protocol buffers,这是 Google 开源的一套成熟的结构数据序列化机制。 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 简介 本文只是根据gRPC相关资料文档编写的Java Spring Boot 与 Golang 语言相关调用的示例。 详细内容 编写proto文件 使用proto3语法。文件user_provider.proto。 需要使用proto文件,来自动生成不同语言的相关接口、类、对象等。 // user service provider // proto语法版本 syntax = "proto3"; // 可选参数 设置java package option java_package = "cn.lpe234.grpc.grpcdemo.grpc"; // 定义对外暴露的服务 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Hadoop3单机部署,实现最简伪集群
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7