Zookeeper运维

我是一个目录

  • 1. 参数说明
  • 2. Zookeeper优化建议
  • 3. Zookeeper性能查看
  • 4. 建议

1. 参数说明

工作节点瞬间压力大,导致和集群通信出现延迟,被踢出节点,瞬间释放的连接立即又连接到另外节点,最终集群挂掉。加了一些延迟配置后,集群稳定。

参数说明
tickTime=2000Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime时间就会发送一个心跳。tickTime以毫秒为单位
initLimit=10集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)
syncLimit=5集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)
dataDir=/usr/local/zookeeper/dataZooKeeper存放内存数据结构的snapshot,便于快速恢复
clientPort=2181客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口,接受客户端的访问请求
maxClientCnxns=1000在socket级别限制单个客户端到ZooKeeper集群中单台服务器的并发连接数量,可以通过IP地址来区分不同的客户端,默认是60,设置为0表示不限制并发连接数
minSessionTimeout=30000服务器允许客户端会话的最小超时时间,以毫秒为单位。默认值是2倍的tickTime
maxSessionTimeout=60000服务器允许客户端会话的最大超时时间,以毫秒为单位。默认值是20倍的tickTime
autopurge.snapRetainCount=10当启用自动清理功能后,ZooKeeper将只保留autopurge.snapRetainCount个最近的数据快照(dataDir)和对应的事务日志文件(dataLogDir),其余的将会删除掉。默认值是3,最小值也是3
autopurge.purgeInterval=1用于配置触发清理任务的时间间隔,以小时为单位。要启用自动清理,可以将其值设置为一个正整数(比如1),默认值是0
globalOutstandingLimit=200客户端提交请求的速度可能比ZooKeeper处理的速度快得多,特别是当客户端的数量非常多的时候。为了防止ZooKeeper因为排队的请求而耗尽内存,ZooKeeper将会对客户端进行限流,即限制系统中未处理的请求数量不超过globalOutstandingLimit设置的值,默认的限制是1000
preAllocSize=131072单位KB,用于配置ZooKeeper事务日志文件预分配的磁盘空间大小。默认的块大小是64MB。改变块大小的其中一个原因是当数据快照文件生成比较频繁时可以适当减少块大小。比如1000次事务会新产生一个快照(参数为snapCount),新产生快照后会用新的事务日志文件,假设一个事务信息大小100B,那么事务日志预分配的磁盘空间大小为100kB会比较好
snapCount=300000ZooKeeper将事务记录到事务日志中。当snapCount个事务被写到一个日志文件后,启动一个快照并创建一个新的事务日志文件。snapCount的默认值是100000
leaderServes=yesleader是否接受client请求,默认为yes即leader可以接受client的连接,当节点数为>3时,建议关闭。在ZooKeeper中,Leader服务器主要协调事务更新请求。对于事务更新请求吞吐很高而读取请求吞吐很低的情况可以配置Leader不接受客户端连接,这样就可以专注于协调工作
server.1=192.168.1.5:2888:38882888 leader\follower传输信息端口,3888选举端口
server.2=192.168.1.6:2888:38882888 leader\follower传输信息端口,3888选举端口
server.3=192.168.1.7:2888:38882888 leader\follower传输信息端口,3888选举端口

2. Zookeeper优化建议

a. 将ZooKeeper与其他应用分开部署,避免相互影响

对于ZooKeeper来说,如果在运行过程中,需要和其它应用程序来竞争磁盘、CPU、网络、内存资源,那么整体性能将会大打折扣。我们在使用ZooKeeper初期尝试将ZooKeeper与其他应用公用机器,在系统流量上涨后,由于IO及CPU被其他应用使用很大,造成ZooKeeper的Session经常超时甚至应用与ZooKeeper的连接断开。因此,建议ZooKeeper与其他应用分开部署。

b. 将数据文件和事务日志分开存放,提高ZooKeeper性能

我们先分析一下磁盘对ZooKeeper性能的影响。客户端对ZK的更新操作都是永久的,不可回退的,ZK会将每次更新操作以事务日志的形式写入磁盘,写入成功后才会给予客户端响应。明白这点之后,你就会明白磁盘的吞吐性能对于ZK的影响了,磁盘写入速度制约着ZK每个更新操作的响应。因此,我们在选择机型时尽量选择多块硬盘的机器,ZK的事务日志输出是一个顺序写文件的过程,本身性能是很高的,所以尽量保证不要和其它随机写的应用程序共享一块磁盘,尽量避免对磁盘的竞争。

c. 尽量避免内存与磁盘空间的交换,确保设置一个合理的JVM堆大小

如果设置太大,会让内存与磁盘进行交换,这将使ZK的性能大打折扣。例如一个4G内存的机器的,如果你把JVM的堆大小设置为4G或更大,那么会使频繁发生内存与磁盘空间的交换,通常设置成3G就可以了。

3. Zookeeper性能查看

1、Zookeeper服务器当前节点配置信息: echo conf|nc localhost 2181
2、cons:echo cons|nc localhost 2181 输出当前服务器所有客户端连接的详细信息
3、crst:重置所有客户端连接统计信息
4、dump:echo dump|nc localhost 2181,输出当前集群的所有会话消息
5、envi:echo envi|nc localhost 2181,输出服务器运行时的环境信息
6、ruok:echo ruok|nc localhost 2181,输出当前Zookeeper是否正在运行。是,则返回 ‘imok’
7、stat:echo stat|nc localhost 2181,服务器运行时状态信息
8、srvr:和stat功能一致,但不会输出客户端连接情况
9、srst:重置所有服务器统计信息
10、wchs:echo wchs|nc localhost 2181,输出当前服务器管理的Watcher信息
11、wchp:echo wchp|nc localhost 2181,与wchs类似,但以节点路径为单位对Watcher信息进行归组
12、mntr:echo mntr|nc localhost 2181,比stat更为详尽的服务器信息
mntr:列出服务器的健康状态:
zk_version

版本

zk_avg_latency

平均延时

zk_max_latency

最大延时

zk_min_latency

最小延时

zk_packets_received

收包数

zk_packets_sent

发包数

zk_num_alive_connections

连接数

zk_outstanding_requests

堆积请求数

zk_server_state

leader/follower 状态

zk_znode_count

znode数量

zk_watch_count

watch数量

zk_ephemerals_count

临时节点(znode)

zk_approximate_data_size

数据大小

zk_open_file_descriptor_count

打开的文件描述符数量

zk_max_file_descriptor_count

最大文件描述符数量

zk_followers

follower 数量,leader角色才会有这个输出

zk_synced_followers

同步的 follower 数量

shell终端输入:echo mntr| nc localhost 2181

参数解析如下:

zk_server_state 说明:集群中有且只能有一个leader,没有leader,则集群无法正常工作;两个或以上的leader,则视为脑裂,会导致数据不一致问题

zk_followers /zk_synced_followers 说明:如果上述两个值不相等,就表示部分follower异常了需要立即处理,很多低级事故,都是因为单个集群故障了太多的follower未及时处理导致

zk_outstanding_requests 说明:常态下该值应该持续为0,不应该有未处理请求

zk_pending_syncs 说明:常态下该值应该持续为0,不应该有未同步的数据

zk_znode_count 说明:节点数越多,集群的压力越大,性能会随之急剧下降 经验值:不要超过100万 建议:当节点数过多时,需要考虑以机房/地域/业务等维度进行拆分

zk_approximate_data_size 说明:当快照体积过大时,ZK的节点重启后,会因为在initLimit的时间内同步不完整个快照而无法加入集群 经验值:不要超过1GB体积 建议:不要把ZK当做文件存储系统来使用

zk_open_file_descriptor_count/zk_max_file_descriptor_count 说明:当上述两个值相等时,集群无法接收并处理新的请求 建议:修改/etc/security/limits.conf,将线上账号的文件句柄数调整到100万

zk_watch_count 说明:对于watch的数量较多,那么变更后ZK的通知压力也会较大

zk_packets_received/zk_packert_sent 说明:ZK节点接收/发送的packet的数量,每个节点的具体值均不同,通过求和的方式来获取集群的整体值 建议:通过两次命令执行间隔1s来获取差值

zk_num_alive_connections 说明:ZK节点的客户端连接数量,每个节点的具体值均不同,通过求和的方式来获取集群的整体值 建议:通过两次命令执行间隔1s来获取差值

zk_avg_latency/zk_max_latency/zk_min_latency 说明:需要关注平均延时的剧烈变化,业务上对延时有明确要求的,则可以针对具体阈值进行设置

4. 建议

Zookeeper 不落盘配置,对使用dlock分布式锁非常频繁,IO占用很高的情况下可以使用此方案,提升ZK性能,分布式锁单独部署zk,数据不落盘: 在/dev/shm下创建两个目录datadir和logdir,zk的配置文件把datadir和logdir指向对应创建目录,并设置forceSync=no. 这个方案是在zk服务器内存充足时使用,并将zk快照数量控制在5个左右。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/79666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云创新中心黑湖科技:将智能制造进行到底

编辑:阿冒 设计:沐由 一如去年,第二届828 B2B企业节从8月28日-9月15日期间,再一次成为广大企业界关注的焦点。 当前,数字技术已经被广泛被融入到产品、服务与流程当中,用以转变客户的业务成果,以…

ChatGPT在职业规划中的智能助手

随着科技的不断发展,人工智能(AI)正逐渐成为我们日常生活的一部分。ChatGPT作为一种智能语言模型,可以在职业规划中充当智能助手的角色。本文将探讨ChatGPT在职业规划中的应用,以及它如何成为未来工作的智能伙伴。 首先…

基于SpringBoot+Vue实现的党校培训管理系统源代码+数据库

一、简介 项目简介: 基于微服务架构的党校培训管理系统, 完整代码下载地址:党校培训管理系统 大体总结: 前端使用Vue.js框架,UI组件库使用Element UI与Ant Design Vue,后端基于Spring Boot,使…

实现客户端pineline的思路

背景: redis集群不支持客户端的mget操作,但是业务上对这个redis集群的批量操作的需求一直都在,所以有各种客户端实现了各式各样的pineline实现,本文就记录下我们公司的实现方式 pineline实现思路 1.pineline要快 pineline之所以快是因为可…

mybatis mapper.xml 文件外键映射

1.业务背景 最近负责标签管理业务,因为设计打标签功能就需要用到中间表。在之前的写法,将符合的数据先查询出来在应用层做匹配封装。如果是大表关联性复杂考虑到之后的扩展性,这种写法符合要求的,唯一缺点就是让你代码看的很臃肿&…

面试算法6:排序数组中的两个数字之和

题目 输入一个递增排序的数组和一个值k,请问如何在数组中找出两个和为k的数字并返回它们的下标?假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次。例如,输入数组[1,2,4,6&…

【华为重启门】华为/荣耀手机一直自动重启原因解决方案(荣耀V10)

文章目录 【目前:系统回退安卓10、CPU贴了硅胶片。一天没重启了】1.问题描述2.分析原因3.解决方案4.实际操作 【目前:系统回退安卓10、CPU贴了硅胶片。一天没重启了】 1.问题描述 荣耀V10,莫名其妙的、无规律的死机重启。 一开始是重启后进…

Ubuntu22.04配置WiFi

Ubuntu22.04配置WiFi 注意:在/etc/netplan/​下的配置文件,格式一定要正确,否则用sudo netplan try​的时候会报错 一、查看无线网卡的名称 //choice-1 ls /sys/class/net//choice-2 ip a//choice-3 ifconfig -a‍ 二、修改配置文件 文件…

jmeter接口测试及详细步骤以及项目实战教程

在接口测试项目实战中,JMeter是一款非常强大和流行的自动化测试工具,它可以测试各种类型的应用程序,并通过采样和报告来识别性能瓶颈和API的问题。本文将为你提供一个基于实际项目的JMeter接口测试项目实战教程,指导你如何使用JMe…

分布式事务解决方案之2PC

分布式事务解决方案之2PC 前面已经学习了分布式事务的基础理论,以理论为基础,针对不同的分布式场景业界常见的解决方案有2PC、 TCC、可靠消息最终一致性、最大努力通知这几种。 什么是2PC 2PC即两阶段提交协议,是将整个事务流程分为两个阶段…

一种新的图像去噪方式:图像修补+斑点检测的预处理

灵感来源于我之前写的一篇博客:图像处理:基于cv2.inpaint()图像修补。 这种方式可以有效的去除白色的噪点,这里我们需要一张噪点的图像,你可以用下面的代码随机生成一张噪点图片: import cv2 import numpy as np # i…

软件设计模式系列之六——单例模式

1 模式的定义 单例模式(Singleton Pattern)是一种常见的创建型设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点来获取该实例。这意味着无论何时何地,只要需要该类的实例,都会返回同一个…

二刷力扣--栈和队列

栈和队列 栈和队列基础(Python) 栈一种先进后出,队列先进后出。 Python中可以用list实现栈,用append()模拟入栈,用pop()模拟出栈。 也可以用list实现队列,但是效率较低,一般用collections.deq…

vue2以ElementUI为例构建notify便捷精美提示

我们先引入一个 第三方UI库 这里 我们以elementUI为例 先引入依赖 npm install element-ui --save然后 在 main.js 入口文件中 引入一下 import ElementUI from element-ui import element-ui/lib/theme-chalk/index.cssVue.use(ElementUI)然后 在组件中使用 this.$notify({…

如何使用 RunwayML 进行创意 AI 创作

标题:如何使用 RunwayML 进行创意 AI 创作 介绍 RunwayML 是一个基于浏览器的人工智能创作工具,可让用户使用各种 AI 功能来生成图像、视频、音乐、文字和其他创意内容。RunwayML 的功能包括: * 图像生成:使用生成式对抗网络 (…

每日刷题-6

目录 一、选择题 二、算法题 1.Fibonacci数列 2.合法括号序列判断 一、选择题 1、 解析:内联函数是一种可以提高函数执行效率的方法,它的原理是编译时在函数调用点直接展开函数体的代码,从而避免了函数调用的开销。 但是,内联函…

Haproxy负载均衡集群 超详细 (附部署实例)

Haproxy 一、Web集群调度器1.1 常用的Web集群调度器1.2 常用集群调度器的优缺点(LVS ,Nginx,Haproxy)1.2.1 Nginx1.2.2 LVS1.2.3 Haproxy 1.3 LVS、Nginx、Haproxy的区别 二、Haproxy2.1 简介2.2 Haproxy的主要特性2.3 Haproxy应用分析2.4 Haproxy的调度算法(负载均…

uni-app 微信小程序movable-area遮盖 遮挡住 点击事件

问题描述&#xff1a; 使用了movable-area拖拽在页面有点击事件的地方会覆盖住点击事件 直接上代码&#xff1a; <movable-area class"movable-area"><movable-view class"movable-view" :x"x" :y"y" direction"all&q…

牛客: BM5 合并k个已排序的链表

牛客: BM5 合并k个已排序的链表 文章目录 牛客: BM5 合并k个已排序的链表题目描述题解思路题解代码 题目描述 题解思路 合并链表数组中的前两条链表,直到链表数组的长度为一, 返回这个唯一的链表 题解代码 package main/** type ListNode struct{* Val int* Next *ListN…

#循循渐进学51单片机#步进电机与蜂鸣器#not.8

1、能够理解清楚单片机IO口的结构。 2)t1相当于PnP三级管&#xff0c;t2相当于npn三极管 3&#xff09; 强推挽io具有较强的驱动能力&#xff0c;电流输出能力很强。 2、能够看懂上下拉电阻的电路应用&#xff0c;并且熟练使用上下拉电阻。 3、理解28BYJ-48减速步进电机的工作…