IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 高并发核心知识——ZooKeeper -> 正文阅读

[大数据]高并发核心知识——ZooKeeper

ZooKeeper


简介

  • ZooKeeper是一个开源的分布式协调服务,重视高性能、高可用、严格有序的访问

  • Zookeeper中利用被称为znode的节点保存数据,数据将保存在内存(ram)中,最多存储1MB

  • 由于旨在协调数据,因此znode存储的数据很小,通常为状态信息、位置信息、配置信息等

  • znodes的组织结构类似于标准文件目录系统结构

    ZooKeeper's Hierarchical Namespace

特点

ZooKeeper Service

  • zk集群中的每个服务都是可复制的,所以每个服务都了解彼此,并维护单一状态
  • zk服务用数字标记每次数据更新来反映zk事务的顺序
  • zk集群必须部署奇数个服务
为什么要部署成奇数?

涉及关键词:集群脑裂问题、过半机制、paxos协议

Zookeeper集群"脑裂"问题 - 运维总结 - 散尽浮华 - 博客园 (cnblogs.com)

选举机制

每一个服务都需要在 data 目录创建一个存放节点id的文本文件(内容只能是一个1~255的数字),文件名为 myid

  1. myid大的优先选为leader,选出leader后(启动数达到总服务数的半数以上),后面启动的都是follower
  2. leader挂掉会重选,按以下权重:EPOCH(任期)>ZXID(事务)>SID(服务)

下载

Apache ZooKeeper

  1. 将下载的 zookeeper-x.x.xx.tar.gz 复制到 /opt 解压
  2. /etc/profile 配置文件中添加环境变量,并使用 source 命令使新环境变量生效
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.12
export PATH=$PATH:$ZOOKEEPER_HOME/bin
  1. 进入 zookeeper 根路径的 /conf 目录,修改 zoo_sample.cfg 文件为 zoo.cfg
# The number of milliseconds of each tick 端与端通信心跳时间,单位ms
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. 注意这里需要自行指定zk数据的存储路径
dataDir=/tmp/zookeeper  
# the port at which the clients will connect 对外服务端口
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
  1. 为每一个服务创建两个目录:datalog

详细安装配置过程可参考

《深入理解Kafka:核心设计与实践原理》第1.2节

《Java高并发核心编程. 卷1, NIO、Netty、Redis、ZooKeeper》第13.1节

常用命令

  • 启动服务:bin/zkServer.sh start
  • 停止服务:bin/zkServer.sh stop
  • 查看所有命令:help
  • 查看状态:bin/zkServer.sh status
  • 查看节点:ls /
  • 创建节点:create /newnode "description"
  • 获取节点信息:get -s /newnode
  • 删除节点: delete /newnode
节点信息说明

在这里插入图片描述

节点类型

  • 持久(Persistent):客户端和服务端断开连接,节点不删除 create /pnode "持久节点"
  • 持久顺序(Persistent_Sequential):自动为节点添加数字后缀,维护节点的先后顺序
  • 临时(Ephemeral):客户端和服务端断开连接,节点自动删除 create -e /enode "临时节点"
  • 临时顺序(Ephemeral_Sequential):自动为节点添加数字后缀,维护节点的先后顺序

分布式锁

  1. 用创建临时顺序节点表示客户端来抢分布式锁,判定创建后的节点顺序为最小时表示获取到锁
  2. 如果当前节点抢到锁,则开始处理业务流程,完成后删除自己的对应子节点,通知后一节点
  3. 如果当前节点未抢占到锁,则监听前一个节点的变化,收到通知后再次判断是否顺序为最小
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章           查看所有文章
加:2021-08-03 17:23:07  更:2021-08-03 17:23:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 20:54:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码