ZooKeeper【集群模式】

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: ZooKeeper【集群模式】

ZooKeeper命令基本操作

cd /opt/module/zookeeper-3.5.7/bin
#启动服务端
./zkServer.sh start
#启动客户端
./zkCli.sh
#查看zookeeper状态
./zkServer.sh status
#退出客户端
quit
#关闭zookeeper
./zkServer.sh stop
#查看当前进程的全限定名
./jps -l

配置文件说明

# 通信心跳时间,zookeeper服务器和客户端心跳时间(单位ms)
tickTime=2000
# LF初始化通信时限,Leader和Flower初始连接时最长的等待时间(10*tickTime),也就是20s还未建立连接则认为通信失败
initLimit=10
# LF同步通信时限,Leader和Flower建立连接后仍然保持心跳联系,超过(5*syncLimit)认为Flower死亡,从服务器目录删除Flower。
syncLimit=5
# 保存zookeeper数据的目录
dataDir=/opt/module/zookeeper-3.5.7/zkData
# 客户端端口号
clientPort=2181

集群配置

       在zookeeper的zkData目录(我们自己指定的存放zookeeper数据的目录)下创建一个名为"myid"的文件(必须为myid)。

       在myid中添加与服务器对应的数字编号,比如hadoop102就配置数字编号 "2" (在整个zookeeper集群中唯一,所以分发zookeeper后,必须修改自己的myid)。我们需要在zoo.cfg的末行增加配置信息:

server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
#server.2代表myid=2的服务器
#hadoop102对应我们hadoop102的地址:192.168.88.134
#2888: Leader和Flower的通信端口
#3888: 如果集群中唯一的Leader挂了,通过这个端口来重新选举Leader

       因为我们配置了三台服务器,所以根据上一节说到的要求,我们必须启动半数以上(至少两台)的服务器zookeeper才能启动成功。

ZooKeeper的选举机制

三个属性

SID

       服务器ID。用来唯一标识每一台ZooKeeper集群中的机器,和myid一致。

ZXID

       它可以用来确保ZooKeeper的数据一致性。zxid是一个单调递增的计数器,它是由ZooKeeper服务器在处理每个事务时生成。

Epoch

       每个Leader任期的代号。

第一次启动时

以我们的集群为例(三台服务器hadoop102、hadoop103、hadoop104)

1.hadoop102启动,发起选举,hadoop102投自己一票。但是此时hadoop102只有一票,不够半数以上(1<3/2=1.5),选举无法完成,hadoop102保持LOOKING状态(观望状态);

2.hadoop103启动,此时zookeeper集群中服务器节点数量(2)>半数(1.5),zookeeper启动成功,这时候就需要选举出一个Leader了。

3。于是再次发起选举,hadoop102已经投过了(投给了自己),hadoop103也投自己一票,此时hadoop102和hadoop103各自一票。为了避免僵持状态,hadoop102和hadoop103互相交换选票信息,此时hadoop102发现hadoop103的myid (3) 比自己 (2) 大,于是hadoop102将自己的选票投给hadoop103,此时hadoop103票数=2,hadoop102票数=0,hadoop103成功选为Leader,状态改为LEADING,而hadoop102自动变为Flower,状态改为LEADING。

4.这时候,hadoop104姗姗来迟,才刚刚启动,于是又发起一次选举,hadoop104同样投给自己,但这时候已经存在Leader了,所以自己只能做Flower了。

zookeeper的选举机制是:只要投票过半数,服务器 id(myid)大的 直接胜出

       比如这个案例,尽管hadoop104比hadoop102和hadoop103的myid和服务器id都要大,但是因为当hadoop102和hadoop103启动的时候,已经超过了半数的要求,直接就开始选举并且hadoop103胜出,所以即使hadoop104的myid比hadoop103更大也没用。

非第一次启动

除了服务器初始化启动,当服务器节点无法和Leader保持连接的时候,也会进行Leader选举。

集群中确实不存在Leader(比如 Leader挂掉了)

选举Leader的规则:

前提:节点数达到一半以上

比较优先级

  1. Epoch大的直接胜出
  2. Epoch相同,ZXID大的胜出
  3. ZXID相同,SID大的胜出

集群中存在Leader,但是节点没有连接上

       这种情况下,某个节点自认为Leader不存在,想要试图去选举Leader,当它向其它节点交换选票的时候,会被告知Leader是存在的并告诉Leader的信息,该节点只需要与Leader建立连接即可。

安装ZooKeeper服务器的个数

基本原则是安装奇数台。

生产经验:

  • 10 台服务器:3 台 zk;
  • 20 台服务器:5 台 zk;
  • 100 台服务器:11 台 zk;
  • 200 台服务器:11 台 zk;

服务器台数多:好处:提高可靠性;坏处:提高通信延时。所以不见得越多越好。

ZooKeeper群起脚本

#!/bin/bash
case $1 in
"start"){
  for i in hadoop102 hadoop103 hadoop104
  do
    echo "========== zookeeper $i 启动 ============"
    ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
  done
}
;;
"stop"){
  for i in hadoop102 hadoop103 hadoop104
  do
    echo "========== zookeeper $i 关闭 ============"
    ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
  done
}
;;
"status"){
  for i in hadoop102 hadoop103 hadoop104
  do
    echo "========== zookeeper $i 状态 ============"
    ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
  done
}
;;
esac

注意

       不能直接从windows复制脚本文件过去,会报错文件中有windows的换行符。

       可以从windows复制脚本内容,然后粘贴到linux的vim编辑器这样是没问题的。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
4月前
|
Java Shell Linux
Zookeeper单机&集群安装
Zookeeper单机&集群安装
53 1
|
4月前
|
存储 分布式计算 资源调度
Hadoop【环境搭建 04】【hadoop-2.6.0-cdh5.15.2.tar.gz 基于ZooKeeper搭建高可用集群】(部分图片来源于网络)
【4月更文挑战第1天】Hadoop【环境搭建 04】【hadoop-2.6.0-cdh5.15.2.tar.gz 基于ZooKeeper搭建高可用集群】(部分图片来源于网络)
132 3
|
2月前
|
存储 数据库
zookeeper 集群环境搭建及集群选举及数据同步机制
zookeeper 集群环境搭建及集群选举及数据同步机制
45 2
|
2月前
|
存储 运维 安全
防盗、防泄露、防篡改,我们把 ZooKeeper 的这种认证模式玩明白了
ZooKeeper 作为应用的核心中间件在业务流程中存储着敏感数据,具有关键作用。正确且规范的使用方法对确保数据安全至关重要,否则可能会因操作不当而导致内部数据泄露,进而带来严重的安全风险。因此,在日常的 ZooKeeper 运维和使用过程中,标准化和安全的操作对于加强企业安全防护和能力建设显得格外关键。为了实现这一目标,MSE 提供了一整套标准化流程,帮助用户以更安全、更简便的方式使用 ZooKeeper,从而加速企业安全能力的提升同时最大程度地降低在变更过程中可能出现的风险。
|
1月前
|
开发工具
部署安装zookeeper集群
部署安装zookeeper集群
|
3月前
|
Java 网络安全
分布式系统详解--框架(Zookeeper-简介和集群搭建)
分布式系统详解--框架(Zookeeper-简介和集群搭建)
120 0
|
4月前
|
存储 Java 网络安全
ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
【4月更文挑战第10天】ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
68 1
|
4月前
|
存储 Java 网络安全
ZooKeeper【搭建 02】apache-zookeeper-3.6.0 集群版(准备+安装配置+启动验证)
【4月更文挑战第8天】ZooKeeper【搭建 02】apache-zookeeper-3.6.0 集群版(准备+安装配置+启动验证)
53 1
|
4月前
|
架构师 Shell Apache
Zookeeper集群搭建
Zookeeper集群搭建
|
4月前
|
消息中间件 存储 Kafka
Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
【2月更文挑战第19天】Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
177 1