文章目录

  • 环境信息
  • JDK
  • 总览
    • 集群架构及角色解读
    • 安装目录
  • 部署十步曲
  • 配置文件
    • node1
    • node2
    • node3
    • node4(Observer节点)
    • 配置参数解读
  • myid 节点唯一标示
  • 启动节点
  • 节点状态查看


环境信息

Info1 Detail
OS CentOS7
ZK Version 3.5.8
JDK Version 1.8 + (1.7以上即可)
IP Info 192.168.126.133

其实我就一台Server …

伪集群 … 【其实和在多台部署上是一样一样的,我也木有这么多server~】


JDK

ZK Java编写的,当然少不了JDK了 ~

[root@localhost conf]# java -version
openjdk version "c.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
[root@localhost conf]#

总览

集群架构及角色解读

  • Leader: 处理所有的事务请求(读+写请求),集群中只能有一个Leader

  • Follower:只能处理读请求,同时参与选举 。 作为 Leader的候选节点,如果Leader宕机,Follower节点要参与到新的Leader选举中,有可能成为新的Leader节点

  • Observer:只能处理读请求,不参与选举


安装目录


部署十步曲

  • Step1:配置JAVA环境
  • Step2:下载并解压zookeeper
  • Step3:copy zoo_sample.cfg文件zoo1.cfg
  • Step4:修改配置文件zoo-1.cfg
  • Step5: 复制三zoo1.cfg ,分别为zoo2.cfg,zoo3.cfg ,zoo4.cfg,修改dataDir和clientPort (如果是同一主机确保在同一主机上不同即可)
  • Step6: 标识Server ID , 创建四个文件夹${ZK_HOME}/data/zk1,${ZK_HOME}/data/zk2,${ZK_HOME}/data/zk3,${ZK_HOME}/data/zk4,在每个目录中创建文件myid 文件,写入当前实例的server id,即1,2,3,4
  • Step7: 启动4个节点 ./bin/zkServer.sh start ./conf/zoo1.cfg ./bin/zkServer.sh start ./conf/zoo2.cfg ./bin/zkServer.sh start ./conf/zoo3.cfg ./bin/zkServer.sh start ./conf/zoo4.cfg
  • Step8: 检测集群状态 ./bin/zkServer.sh status ./conf/zoo1.cfg ./bin/zkServer.sh status ./conf/zoo2.cfg ./bin/zkServer.sh status ./conf/zoo3.cfg ./bin/zkServer.sh status ./conf/zoo4.cfg
  • Step9: 客户端连接 ./zkCli.sh -server 192.168.126.133:2181,192.168.126.133:2182,192.168.126.133:2183,192.168.126.133:2184
  • Step10: 查看集群配置
[zk: 192.168.126.133:2181,192.168.126.133:2182,192.168.126.133:2183,192.168.126.133:2184(CONNECTED) 0] get /zookeeper/config
server.1=192.168.126.133:2188:3188:participant
server.2=192.168.126.133:2189:3189:participant
server.3=192.168.126.133:2190:3190:participant
server.4=192.168.126.133:2191:3191:observer
version=0
[zk: 192.168.126.133:2181,192.168.126.133:2182,192.168.126.133:2183,192.168.126.133:2184(CONNECTED) 1] 

下面看下细节


配置文件

node1

[root@localhost conf]# cat zoo1.cfg | grep -v "#"
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/zkcluster/zk3.5.8Cluster/data/zk1
clientPort=2181
server.1=192.168.126.133:2188:3188
server.2=192.168.126.133:2189:3189
server.3=192.168.126.133:2190:3190
server.4=192.168.126.133:2191:3191:observer

node2

[root@localhost conf]# cat zoo2.cfg | grep -v "#"
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/zkcluster/zk3.5.8Cluster/data/zk2
clientPort=2182
server.1=192.168.126.133:2188:3188
server.2=192.168.126.133:2189:3189
server.3=192.168.126.133:2190:3190
server.4=192.168.126.133:2191:3191:observer

node3

[root@localhost conf]# cat zoo3.cfg | grep -v "#"
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/zkcluster/zk3.5.8Cluster/data/zk3
clientPort=2183
server.1=192.168.126.133:2188:3188
server.2=192.168.126.133:2189:3189
server.3=192.168.126.133:2190:3190
server.4=192.168.126.133:2191:3191:observer

node4(Observer节点)

[root@localhost conf]# cat zoo4.cfg | grep -v "#"
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/zkcluster/zk3.5.8Cluster/data/zk4
clientPort=2184
server.1=192.168.126.133:2188:3188
server.2=192.168.126.133:2189:3189
server.3=192.168.126.133:2190:3190
server.4=192.168.126.133:2191:3191:observer

配置参数解读

  • tickTime:用于配置Zookeeper中最小时间单位的长度,很多运行时的时间间隔都是使用tickTime的倍数来表示的
  • initLimit:用于配置Leader服务器等待Follower启动,并完成数据同步的时间。Follower服务器再启动过程中,会与Leader建立连接并完成数据的同步,从而确定自己对外提供服务的起始状态。Leader服务器允许Follower在initLimit 时间内完成这个工作
  • syncLimit:Leader 与Follower心跳检测的最大延时时间
  • dataDir:Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里
  • dataLogDir: Zookeeper服务器存储事务日志的目录,默认为dataDir
  • clientPort:客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求\
  • server.A=B:C:D:E
   A 是一个数字,表示这个是第几号服务器,唯一标示B 是服务器的 ip 地址C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口D 选举端口E observer标识

myid 节点唯一标示

4个节点的myid信息如下


启动节点

[root@localhost conf]# pwd
/root/zkcluster/zk3.5.8Cluster/conf
[root@localhost conf]#
[root@localhost conf]#
[root@localhost conf]#
[root@localhost conf]#
[root@localhost conf]#
[root@localhost conf]#
[root@localhost conf]# ../bin/zkServer.sh  start  ./zoo1.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: ./zoo1.cfg
Starting zookeeper ... STARTED
[root@localhost conf]# ../bin/zkServer.sh  start  ./zoo2.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: ./zoo2.cfg
Starting zookeeper ... STARTED
[root@localhost conf]# ../bin/zkServer.sh  start  ./zoo3.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: ./zoo3.cfg
Starting zookeeper ... STARTED
[root@localhost conf]# ../bin/zkServer.sh  start  ./zoo4.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: ./zoo4.cfg
Starting zookeeper ... STARTED
[root@localhost conf]# 

节点状态查看

[root@localhost conf]# ../bin/zkServer.sh  status  ./zoo1.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: ./zoo1.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
[root@localhost conf]#
[root@localhost conf]# ../bin/zkServer.sh  status  ./zoo2.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: ./zoo2.cfg
Client port found: 2182. Client address: localhost.
Mode: leader
[root@localhost conf]# ../bin/zkServer.sh  status  ./zoo3.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: ./zoo3.cfg
Client port found: 2183. Client address: localhost.
Mode: follower
[root@localhost conf]# ../bin/zkServer.sh  status  ./zoo4.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: ./zoo4.cfg
Client port found: 2184. Client address: localhost.
Mode: observer
[root@localhost conf]# 

或者使用客户端连上server 查看

  get   /zookeeper/config


完事儿 一切正常 没啦


行了就到这儿吧, 你也去搭建一套吧(别像我一样,扣扣搜搜都在一台server上)

Apache ZooKeeper - 高可用ZK集群模式搭建与运维相关推荐

  1. gitee如何搭建mysql_MySQL高可用架构集群环境搭建手册.md

    # MySQL高可用架构集群环境搭建手册 ## 环境准备 ### 机器规划 | 节点 | IP | 配置 | 角色 | | -------- | -------------- | ---- | --- ...

  2. Redis Cluster高可用(HA)集群环境搭建详细步骤

    1.为什么要有集群 由于Redis主从复制架构每个数据库都要保存整个集群中的所有数据,容易形成木桶效应,所以Redis3.0之后的版本添加特性就是集群(Cluster) 2.Redis集群架构说明 架 ...

  3. kube-vip构建高可用k8s集群

    部署目的 目前k8s发展太快,版本迭代和更新等,导致现在有很多冲突.不适用的解决方案,故搭建一套各个软件版本都较新的集群. 物理机器和网络准备 一台5600x+32G+有外网的电脑. VMWARE虚拟 ...

  4. 基于ansible的自动化二进制模式部署高可用Kubernetes集群

    [说明] 本文档详细描述了在openEuler 22.03 LTS上通过ansible以二进制模式自动化部署高可用Kubernetes集群(适用k8s v1.26版本). 本文档参考了小陈运维的ans ...

  5. 高可用 Canal集群( 秒懂 + 史上最全)

    文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :<尼恩Java面试宝典> 持续更新+ 史上最全 + 面试必备 2000页+ ...

  6. 【15W字长文】主从复制高可用Redis集群,完整包含Redis所有知识点

    往期文章一览 分布式会话与单点登录SSO系统CAS,包含完整示例代码实现 [7W字长文]使用LVS+Keepalived实现Nginx高可用,一文搞懂Nginx 主从复制高可用Redis集群 分布式架 ...

  7. Redis(3)-高可用与集群

    Redis 高可用与集群 虽然 Redis 可以实现单机的数据持久化,但无论是 RDB 也好或者 AOF 也好,都解决 不了单点宕机问题,即一旦单台 redis 服务器本身出现系统故障.硬件故障等问题 ...

  8. 自建k8s平台-高可用k8s集群

    自建k8s平台-高可用k8s集群 一.前置概念与操作 1.内核升级 3.10内核在大规模集群具有不稳定性 内核升级到4.19+ # 查看内核版本 uname -sr # 0.升级软件包,不升级内核 y ...

  9. 搭建高可用mongodb集群(二)—— 副本集

    2019独角兽企业重金招聘Python工程师标准>>> 在上一篇文章<搭建高可用MongoDB集群(一)--配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能 ...

最新文章

  1. FCKeditor 2.6 精简版
  2. boost::adaptors::ref_unwrapped相关的测试程序)
  3. 用php求矩形周长,PHP实现的简单三角形、矩形周长面积计算器分享
  4. php 文字水印如何居中,php文字水印和php图片水印实现代码(二种加水印方法)
  5. unity如何让物体与特定物体之间不发生碰撞
  6. protobuf java 自动反射_protobuf在java应用中通过反射动态创建对象
  7. 耐克为何不接受加密货币付款?
  8. html打包的app软件报毒解析
  9. 如何从电脑直接控制安卓手机 监控安卓手机 安卓手机如何控制安卓手机
  10. Linux aarch64交叉编译之glm数学库
  11. MFC隐藏窗口时解决窗口闪烁问题
  12. Redis采用的单线程+多路IO复用
  13. LDAP-openldap服务部署和测试(YUM安装)
  14. Matlab中mesh和surf的区别
  15. POI2014Salad Bar
  16. 正则表达式匹配USD格式
  17. 线下门店互动营销产品浅析
  18. java面试总结,非常值得一看
  19. 别在看不起女程序媛了,一个高颜值女程序媛的日常
  20. java实例化的方式_Java对象实例化的6种方式

热门文章

  1. java怎么让表格的字段相乘,excel表格怎么让数据相乘-如何在excel表格中设置乘法公式...
  2. 外汇汇率接口 java_基于JAVA的货币汇率api调用代码实例
  3. elasticsearch python API
  4. 用ipython 写spark
  5. php的wsgi框架结构,理解 WSGI 框架
  6. 信息熵和交叉熵的细节理解
  7. NTU 课程笔记:Nonparametric statistics
  8. 强化学习笔记:Q_learning (Q-table)示例举例
  9. pytorch学习笔记 torchnn.ModuleList
  10. 深度学习核心技术精讲100篇(六十三)-【CNN】一文详细讲解前因后果