前言
关于ZooKeeper
,博主已完整的通过庖丁解牛式的“解法”
,完成了概述。我想掌握了这些基础原理和概念后,工作的问题自然迎刃而解,甚至offer也可能手到擒来,真实一举两得,美极了。
为了更有直观的体验,强化概念,博主特别献上一篇实践文章。理论联系实践,才能学到真本领。
一、环境准备
1. JDK
检查自身测试环境,是否具备JDK,命令:java -version
,如返回如下图所示,即已安装;否则必须提前安装:
2. ZK安装包
可自行前往官网下载,如需请速戳:ZooKeeper最新安装包。
二、安装部署
1. 创建server
首先根据ZK的 ·奇数·(过半OK)
特性,我们需准备3个server。当然博主受限于资源数量,仅以一台服务器为例,进行集群搭建,所谓“伪分布式集群”
。
找一台服务器,分别新建3个zkserver目录,分别命名为:zkserver1、zkserver2、zkserver3。预期效果,如下图所示:
2. 修改文件
2.1 zoo.cfg
上传服务器后,第一件事,修改 zoo.cfg
如下:
tickTime=2000
initLimit=10
syncLimit=5
##########指定目录###########
dataDir=/home/xxapp/zk/zkserver1/data
dataLogDir=/home/xxapp/zk/zkserver1/data/log
##########指定服务端口###########
clientPort=2281
##########指定管理端口###########
admin.serverPort=3281
##########指定集群端口###########
server.1=localhost:2881:3881
server.2=localhost:2882:3882
server.3=localhost:2883:3883
每个参数的含义如下:
参数名 | 参数简介 |
---|---|
tickTime | ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础 |
initLimit | Leader 允许Follower 在initLimit 在完成数据同步,否则无法对外提供服务 |
syncLimit | Leader 通过syncLimit 检测Follower 的存活,超时则认为已宕机 |
dataDir | 存储快照文件snapshot 的目录。当然默认也存储事务日志,建议使用dataLogDir |
dataLogDir | 存储事务日志的目录 |
clientPort | ZK对外服务端口,默认2181 |
Server.N | 设置集群信息,代表Server.myid = 集群节点IP : 与Leader交互接口 : 集群选举接口 |
如此有了参照,可以copy 3份,数据目录按序分别修改为server1、server2、server3,clientPort
与admin.serverPort
分别顺序加1,集群端口配置必须保持相同。
2.2 创建myid文件
myid
文件用于指定每个server的编号(从1开始,顺序递增)。
命令:先touch
后 vi
,预期如下:
3. 修改防火墙
3.1 确认是否已开启防火墙
命令:systemctl status firewalld
,如下图所示,代表已启动。
3.2 端口放行
命令:firewall-cmd --zone=public --add-port=你的端口/tcp --permanent
,如下图所属,代表成功。
4. 启动server
4.1 启动zk
命令:zkServer.sh start
,预期效果如下,代表成功:
其他两个server同理,按序启动。
4.2 查看状态
命令:zkServer.sh status
,预期效果如下,代表成功。
zkserver1:
zkserver2:
zkserver3:
4.3 注意事项
admin.serverPort
建议指定,默认8080,否则端口占用;- server.N,在
“伪分布式集群”
中,所有server的交互端口和选举端口,必须有所差异,否则端口占用;
结语
通过一文搭建ZooKeeper
集群,可以更好的理解它、掌握它。接下来可以基于集群进行相关操作了。比如创建Znode,比如模拟宕机选举、又比如模拟数据同步等场景。
好了,关于ZooKeeper
的总结和介绍到此为止,希望各位盆友有所收获!
历史回顾
- 微服务实战系列之ZooKeeper(下)
- 微服务实战系列之ZooKeeper(中)
- 微服务实战系列之ZooKeeper(上)
- 微服务实战系列之MQ
- 微服务实战系列之通信
- 微服务实战系列之J2Cache
- 微服务实战系列之Cache(技巧篇)
- 微服务实战系列之MemCache
- 微服务实战系列之EhCache
- 微服务实战系列之Redis
- 微服务实战系列之Cache
- 微服务实战系列之Nginx(技巧篇)
- 微服务实战系列之Nginx
- 微服务实战系列之Feign
- 微服务实战系列之Sentinel
- 微服务实战系列之Token
- 微服务实战系列之Nacos
- 微服务实战系列之Gateway
- 微服务实战系列之加密RSA
- 微服务实战系列之签名Sign