zookeeper集群安装

news2024/9/24 9:26:58

zookeeper集群安装

1. 安装环境介绍

下载地址: http://archive.apache.org/dist/zookeeper/

安装版本: 3.7.0

安装包: apache-zookeeper-3.7.0-bin.tar.gz

安装目录: /opt

机器IP:

10.28.19.107

10.28.19.108

10.28.19.109

2. 安装

将 apache-zookeeper-3.7.0-bin.tar.gz安装包,上传至 /opt目录

分别在3台机器上执行下面步骤:

cd /opt && tar -xf apache-zookeeper-3.7.0-bin.tar.gz
mv apache-zookeeper-3.7.0-bin zookeeper
mkdir /opt/zookeeper/data
cat <<EOF | tee /opt/zookeeper/conf/zoo.cfg
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
tickTime=2000
initLimit=10           
syncLimit=5
dataDir=/opt/zookeeper/data
clientPort=2181
maxClientCnxns=120
autopurge.snapRetainCount=3
autopurge.purgeInterval=24
admin.serverPort=2889
server.1=10.28.19.107:2888:3888
server.2=10.28.19.108:2888:3888
server.3=10.28.19.109:2888:3888
EOF

上面命令介绍:

在/opt目录下解压apache-zookeeper-3.7.0-bin.tar.gz并命名成zookeeper

在/opt/zookeeper目录下创建data目录,用于数据存储

在/opt/zookeeper/data目录当中创建zoo.cfg,并配置集群内容

创建myid

10.28.19.107机器执行:

echo 1 > /opt/zookeeper/data/myid

10.28.19.108机器执行:

echo 2 > /opt/zookeeper/data/myid

10.28.19.109机器执行:

echo 3 > /opt/zookeeper/data/myid

指定zookeeper.out日志文件输出位置:

使用过zookeeper的小伙伴都知道,当前终端处于哪个目录,执行完zkServer.sh start命令, zookeeper.out就会写在哪个目录,下次想看zookeeper日志的时候,又忘记上次在哪执行的命令。

bin目录下的zkEnv.sh,有配置ZOO_LOG_DIR,默认就是保存在终端所在当前目录下,所以果断修改(或者可以在上面配置ZOO_LOG_DIR这个变量)

sed -i 's#ZOO_LOG_DIR="."#ZOO_LOG_DIR="${ZOOKEEPER_PREFIX}/logs"#g' /opt/zookeeper/bin/zkEnv.sh

这样日志文件将会写到zookeeper安装目录下的logs文件夹中(logs不需要创建,它会自己创建)

依次重启3台机器:

sh /opt/zookeeper/bin/zkServer.sh start

查看状态:

sh /opt/zookeeper/bin/zkServer.sh status

10.28.19.107状态:

/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/…/conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader

10.28.19.108状态:

/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/…/conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

10.28.19.109状态:

/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/…/conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

浏览器访问zookeeper 管理控制台:

http://10.28.19.107:2889/commands
http://10.28.19.108:2889/commands
http://10.28.19.109:2889/commands

注意3台机器的防火墙有没有关,或者指定开启下这几个端口

zookeeper常用命令

单节点连接:

./zkCli.sh -server ip:port

集群连接:

./zkCli.sh -server zk1:2181,zk2:2181,zk3:2181

查看所有目录:

ls /

查看指定目录:

ls /xxx

删除目录:

rmr /xxx

3. zookeeper优化

在日常运维 ZooKeeper 中,经常会遇到长时间无法选主,恢复时进程启动又退出,进而导致内存暴涨,CPU飙升,GC频繁,影响业务可用性,这些问题有可能和 jute.maxbuffer 的设置有关,它能够限制 Znode 大小,需要在Server端和Client端合理设置,否则有可能引起异常。

查看zkEnv.sh脚本文件可以看到我们可以通过配置java.env文件来自定义设置jvm内存参数,jute.maxbuffer可以一并设置。

zookeeper_java_env.png

配置java.env:

cat > /opt/zookeeper/conf/java.env << EOF
export JVMFLAGS="-Xms1024m -Xmx2048m -Djute.maxbuffer=204800000 $JVMFLAGS"
EOF

4. zoo.cfg配置参数介绍

自Zookeeper-3.4.0版本开始,就提供了自动清理事务日志和快照日志的功能

由于这些日志是直接落入当前磁盘的,所以长期以往,磁盘肯定会被占满,导致zookeeper服务无法正常提供。

配置的方式很简单,就是在zoo.cfg中添加以下两个配置即可,示例如下:

# 保存3个快照,3个日志文件
autopurge.snapRetainCount=3
# 间隔1个小时执行一次清理
autopurge.purgeInterval=1

autopurge.snapRetainCount指定的是最多保留几个日志文件

autopurge.purgeInterval指定的是多久去清理一次

需要注意的是:这个配置默认是不开启的,所以需要我们手动添加。

当然,也可以使用zk提供的清除命令来清理:

sh /opt/zookeeper/bin/zkCleanup.sh -n 20

(20代表保留快照日志的数量,不能小于配置的autopurge.snapRetainCount):

clientPort客户端连接server的端口,即对外服务端口,一般设置为2181
dataDir存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能。
tickTimeZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime。
dataLogDir事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能。 (No Java system property)
globalOutstandingLimit最大请求堆积数。默认是1000。ZK运行的时候, 尽管server已经没有空闲来处理更多的客户端请求了,但是还是允许客户端将请求提交到服务器上来,以提高吞吐性能。当然,为了防止Server内存溢出,这个请求堆积数还是需要限制下的。 (Java system property:zookeeper.globalOutstandingLimit. )
preAllocSize预先开辟磁盘空间,用于后续写入事务日志。默认是64M,每个事务日志大小就是64M。如果ZK的快照频率较大的话,建议适当减小这个参数。(Java system property:zookeeper.preAllocSize )
snapCount每进行snapCount次事务日志输出后,触发一次快照(snapshot), 此时,ZK会生成一个snapshot.文件,同时创建一个新的事务日志文件log.。默认是100000.(真正的代码实现中,会进行一定的随机数处理,以避免所有服务器在同一时间进行快照而影响性能)(Java system property:zookeeper.snapCount )
traceFile用于记录所有请求的log,一般调试过程中可以使用,但是生产环境不建议使用,会严重影响性能。(Java system property:? requestTraceFile )
maxClientCnxns单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制。请注意这个限制的使用范围,仅仅是单台客户端机器与单台ZK服务器之间的连接数限制,不是针对指定客户端IP,也不是ZK集群的连接数限制,也不是单台ZK对所有客户端的连接数限制。指定客户端IP的限制策略,这里有一个patch,可以尝试一下:http://rdc.taobao.com/team/jm/archives/1334(No Java system property)
clientPortAddress对于多网卡的机器,可以为每个IP指定不同的监听端口。默认情况是所有IP都监听 clientPort 指定的端口。 New in 3.3.0
minSessionTimeoutmaxSessionTimeoutSession超时时间限制,如果客户端设置的超时时间不在这个范围,那么会被强制设置为最大或最小时间。默认的Session超时时间是在2 * tickTime ~ 20 * tickTime 这个范围 New in 3.3.0
fsync.warningthresholdms事务日志输出时,如果调用fsync方法超过指定的超时时间,那么会在日志中输出警告信息。默认是1000ms。(Java system property: fsync.warningthresholdms )New in 3.3.4
autopurge.purgeInterval在上文中已经提到,3.4.0及之后版本,ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能。(No Java system property) New in 3.4.0
autopurge.snapRetainCount这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。(No Java system property) New in 3.4.0
electionAlg在之前的版本中, 这个参数配置是允许我们选择leader选举算法,但是由于在以后的版本中,只会留下一种“TCP-based version of fast leader election”算法,所以这个参数目前看来没有用了,这里也不详细展开说了。(No Java system property)
initLimitFollower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在 initLimit 时间内完成这个工作。通常情况下,我们不用太在意这个参数的设置。如果ZK集群的数据量确实很大了,F在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数了。(No Java system property)
syncLimit在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了。注意:不要把这个参数设置得过大,否则可能会掩盖一些问题。(No Java system property)
leaderServes默认情况下,Leader是会接受客户端连接,并提供正常的读写服务。但是,如果你想让Leader专注于集群中机器的协调,那么可以将这个参数设置为no,这样一来,会大大提高写操作的性能。(Java system property: zookeeper. leaderServes )。
server.x=[hostname]:nnnnn[:nnnnn]这里的x是一个数字,与myid文件中的id是一致的。右边可以配置两个端口,第一个端口用于F和L之间的数据同步和其它通信,第二个端口用于Leader选举过程中投票通信。 (No Java system property)
group.x=nnnnn[:nnnnn]weight.x=nnnnn对机器分组和权重设置,可以 参见这里(No Java system property)
cnxTimeoutLeader选举过程中,打开一次连接的超时时间,默认是5s。(Java system property: zookeeper. cnxTimeout )
zookeeper.DigestAuthenticationProvider.superDigestZK权限设置相关,具体参见 《 使用super 身份对有权限的节点进行操作 》 和 《 ZooKeeper 权限控制
skipACL对所有客户端请求都不作ACL检查。如果之前节点上设置有权限限制,一旦服务器上打开这个开头,那么也将失效。(Java system property: zookeeper.skipACL )
forceSync这个参数确定了是否需要在事务日志提交的时候调用 FileChannel .force来保证数据完全同步到磁盘。(Java system property: zookeeper.forceSync)
jute.maxbuffer每个节点最大数据量,是默认是1M。这个限制必须在server和client端都进行设置才会生效。(Java system property: jute.maxbuffer )

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

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

相关文章

字符矩阵内单词搜索

单词搜索 问题链接&#xff1a;word search&#xff01;&#xff01;&#xff01; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通…

【阅读笔记】c++ Primer Plus——第九章

内存模型和命名空间 单独编译 c程序分成三部分 第一部分&#xff1a;包含结构声明和使用这些结构的函数原型(头文件)第二部分&#xff1a;包含与结构有关的函数代码(源代码文件)第三部分&#xff1a;包含调用与结构相关的函数代码(源代码文件)头文件包含了用户定义类型的定义…

FPGA 20个例程篇:19.OV7725摄像头实时采集送HDMI显示(二)

第七章 实战项目提升&#xff0c;完善简历 19.OV7725摄像头实时采集送HDMI显示&#xff08;二&#xff09; 在正式介绍OV7725 CMOS Sensor视频采集前&#xff0c;首先需要去详细说明OV7725的寄存器配置接口&#xff0c;这里有OmniVision公司推出的官方手册 “OV7725_software_…

8个必须掌握的Blender拓扑技巧

组合 3D 模型的过程对后续过程影响很大 - 稍后编辑的难易程度、应用光照和着色器时的外观效果如何、动画时变形的难易程度等等。 一个好的模型对于 CG 管道的所有其他部分的良好运行至关重要。 另一方面&#xff0c;凌乱的拓扑结构会使流程的其余部分成为一场灾难。 你能做些…

IB地理科补习有用吗?

IB地理科的补习如何帮助学生改变学科的表现&#xff1f;这可以从几方面来做分析。 1. 训练 第一是训练。我们老师会按来补习的同学的个人需求、时间和个性&#xff0c;提供很多不同程度的训练&#xff0c;帮助他们建立一个正确的能力系统&#xff08;skill set&#xff09;去应…

二、预训练模型预测(Datawhale组队学习)

文章目录安装配置环境ImageNet预训练图像分类模型预测单张图像-英文载入预训练图像分类模型图像预处理执行图像分类预测预测结果分析ImageNet预训练图像分类模型预测单张图像-中文预训练图像分类模型图像预处理执行图像分类预测预测结果分析ImageNet预训练图像分类模型预测视频…

汽车CAN总线硬件电路原理

根据ISO 11898的定义&#xff0c;物理层被细分成3 个子层&#xff0c;它们分别是物理信令&#xff08;位编码定时和同步&#xff09;、物理媒体连接&#xff08;驱动器和接收器特性&#xff09;和媒体相关接口&#xff08;总线连接器&#xff09;。物理信令子层和数据链路层之间…

打包iOS App并上架到TestFlight测试

开发者账号 首先需要注册一个开发者账号&#xff0c;不然什么都免谈。在手机Apple Developer上注册给钱就行了&#xff0c;个人开发者一年688元。 打包App App开发好后&#xff0c;就可以通过XCode打包。打包前选好版本号&#xff0c;不要跟以前提交的一样&#xff0c;重复的…

亚马逊云科技携手普华永道,助力泉峰集团破解数据治理与使用难题

大数据时代的到来&#xff0c;掀起了企业数字化转型的热潮&#xff0c;对于制造行业的企业来说&#xff0c;除了顺应发展潮流快速开启数字转型之外&#xff0c;以创新思维不断拓展业务广度&#xff0c;对于自身发展也有着格外重要的意义。数字化水平能否与创新发展的脚步保持一…

Acwing---1237.螺旋折线

螺旋折线1.题目2.基本思想3.代码实现1.题目 如下图所示的螺旋折线经过平面上所有整点恰好一次。 对于整点 (X,Y)(X,Y)(X,Y)&#xff0c;我们定义它到原点的距离 dis(X,Y)dis(X,Y)dis(X,Y) 是从原点到 (X,Y)(X,Y)(X,Y) 的螺旋折线段的长度。 例如 dis(0,1)3,dis(−2,−1)9di…

账户系统从0到1搭建

一、什么是账户/账户的作用&#xff1f;账户是记录账户所属人&#xff08;账户主体&#xff09;资产增减变化的载体&#xff0c;简单来说账户系统就是用来记账的&#xff0c;这也是账户系统最核心的功能&#xff0c;在这个基础之上也会根据业务需要衍生出来的其他附属功能。为了…

Kotlin 元编程之 KSP 实战:通过自定义注解配置Compose导航路由

在上一篇 Kotlin 元编程之 KSP 全面突破 中&#xff0c;通过几个设计模式相关的例子来生成代码&#xff0c;其逻辑都比较简单&#xff0c;没有涉及到Android相关的API 业务类&#xff0c;而本文的例子会涉及到使用 Android API 相关的代码。 在之前Jetpack Compose中的导航路由…

【MySQL进阶】MySQL事务隔离与锁机制底层原理万字总结(建议收藏!!)

【MySQL进阶】MySQL事务隔离与锁机制底层原理万字总结&#xff08;建议收藏&#xff01;&#xff01;&#xff09; 参考资料&#xff1a; 美团技术团队&#xff1a;Innodb中事务隔离级别和锁的关系 数据库的锁&#xff0c;到底锁的是什么&#xff1f; 阿里面试&#xff1a;说说…

来给博客除草了:Learned Indexes for a Google-scale Disk-based Database

1. 引言 这是一篇业界发表在NeurlIPS 2020的Wip论文《Google规模的基于磁盘的数据库的学习索引》。自从学习索引祖师爷Tim KraskaMIT在SIGMOD 2018发表了第一篇learned index的工作之后&#xff0c;有关学习索引的paper呈现 increasing trend。目前&#xff0c;较多的工作focu…

Java基础漏洞(四)

&#xff08;1&#xff09;递归调用的内存 我们定义一个类A&#xff0c;在类A中定义方法test来验证递归。在程序中&#xff0c;当条件符合的时候会不断的递归&#xff0c;只有遇到终止条件时才不再递归&#xff0c;然后便会执行递归语句之下的语句。 如以下程序&#xff1a;当…

高效节能 | 智慧灯杆综合管理解决方案

智慧灯杆的应用越来越广泛&#xff0c;园区、景区、道路照明&#xff0c;三站一场等户外场所大规模铺设路灯&#xff0c;通过智慧物联平台远程控制&#xff0c;可以实现高效节能和智能化运维管理。以解决传统运维管理中&#xff0c;不同路线路灯设备控制不统一&#xff0c;设备…

Yjs解析

本文引用自 摸鱼wiki 1. YATA算法解析 YATA算法是Yjs库的核心冲突解决算法&#xff0c;这里主要讲解下这个算法成立的三个规则&#xff1a; 规则1&#xff1a;禁止发生冲突的插入操作之间的origin连线&#xff08;红线&#xff09;发生交叉。 如上图所示&#xff0c;图中展示…

IDEA创建SpringBoot的Web项目,并使用外部Tomcat

IDEA创建SpringBoot的Web项目&#xff0c;并使用外部Tomcat 目录IDEA创建SpringBoot的Web项目&#xff0c;并使用外部Tomcat一、创建工程二、使用外部Tomcat一、创建工程 1.首先新建一个springboot的war工程&#xff0c;并且将外部的Tomcat整合进我们的idea中&#xff0c;我们…

GW1NSR-LV4CQN48GC6/I5 FPGA呼吸灯

环境 pwm.v $ cat pwm.v module Pwm( input clk, input [31:0] period, input [31:0] duty, output pwmout ); reg [31:0] counter; reg r_pwmout; always (posedge clk) begin if(counter < duty) begin r_pwmout 1; end…

裸机与RTOS到FreeRTOS基础 | FreeRTOS一

目录 一、裸机与RTOS 1.1、裸机 1.2、RTOS 二、FreeRTOS简介 2.1、介绍 2.2、特点 2.3、如何查找相关资料 三、FreeROTS基础 3.1、任务调度 3.2、任务状态 一、裸机与RTOS 1.1、裸机 不带操作系统&#xff0c;又称为前后台系统&#xff0c;前台系统指中断服务函数&a…