赞
踩
功能
社区和支持
稳定性和成熟度
开发语言
快照和日志处理
针对上述内容,可以通过一个简单的图表来将二者做个对比,表格内容如下所示。
维度 | ClickHouse-Keeper | ZooKeeper |
---|---|---|
集成度 | 与ClickHouse紧密集成,减少第三方依赖 | 作为独立服务运行,需要额外设置 |
性能 | 针对性能进行了优化,尤其是在高负载下 | 在多种场景下表现稳定,但未针对性优化 |
配置和维护 | 简化了配置和维护过程 | 需要单独配置和维护,学习曲线较陡 |
兼容性 | 专为ClickHouse设计,可能缺乏更广泛的生态系统兼容性 | 广泛兼容分布式系统 |
功能 | 覆盖核心功能,可能缺少一些高级功能 | 成熟、功能丰富 |
社区和支持 | 属于ClickHouse社区的一部分,相对较少 | 大型、活跃的社区,支持广泛 |
稳定性和成熟度 | 相对较新,稳定性可能有边缘情况 | 经过时间考验的稳定性和成熟度 |
开发语言 | 与ClickHouse相同(主要是C++) | 主要使用Java,对Java生态系统有利 |
快照和日志处理 | 针对ClickHouse用例进行了优化 | 可靠的机制,未针对ClickHouse特别优化 |
另外ClickHouse-Keeper在处理zxid Overflow[溢出]方面相对原生ZooKeeper做了优化,一定程度解决了zxid Overflow问题。
注:zxid是一个64位数字,分为两部分:高32位标识Leader周期,低32位标识事务序号。每个新事务使低32位加1。当低32位满(0xffffffff),触发选主,重置zxid:新周期开始,序号归零。
为了更好模拟线上ZooKeeper集群环境,本次仍选用部署Apache ZooKeeper集群,未选择ClickHouse-Keeper,后期会对ClickHouse-Keeper进行调研测试,对比两者的性能差异。
本次选择三台部署CentOS 7.9操作系统的虚拟机用来部署ZooKeeper三节点集群,ZooKeeper版本为3.8.3
主机名 | IP地址 | ZooKeeper版本 |
---|---|---|
prod-ck-zk-01 prod-ck-zk-02 prod-ck-zk-03 | 10.110.5.132 10.110.5.133 10.110.5.134 | apache-zookeeper-3.8.3 |
本次选择在三节点部署jdk1.8.0_321版本。
-- root用户,三节点都需操作,此处以其中一节点为例 [root@prod-ck-zk-01 ~]# cd /home/ [root@prod-ck-zk-01 home]# tar -zxf jdk1.8.0_321.tar.gz -- 编辑环境变量 [root@prod-ck-zk-01 ~]# cat << EOF | sudo tee -a /etc/profile export JAVA_HOME=/home/jdk1.8.0_321 export PATH=\$JAVA_HOME/bin:\$PATH export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar EOF -- 生效环境变量 [root@prod-ck-zk-01 ~]# source /etc/profile -- 查看java版本 [root@prod-ck-zk-01 ~]# java -version java version "1.8.0_321" Java(TM) SE Runtime Environment (build 1.8.0_321-b07) Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)
登录ZooKeeper官网下载地址 Index of /dist/zookeeper,下载对应的ZooKeeper版本,本次我选择下载zookeeper-3.8.3/ 这个版本,这个版本是 2023-10-09发布的。
将下载的apache-zookeeper-3.8.3-bin.tar.gz安装包分别上传到三台服务器某个目录下,比如/home目录,保持目录统一。接下来按照如下方式一步步采用二进制方式部署apache-zookeeper-3.8.3。
1)解压tar包
-- root用户,三节点都需操作,此处以其中一节点为例
[root@prod-ck-zk-01 ~]# cd /home
[root@prod-ck-zk-01 home]# tar -zxf apache-zookeeper-3.8.3-bin.tar.gz
-- 创建目录
[root@prod-ck-zk-01 home]# mkdir -p /data/zookeeper
2)修改配置文件
-- root用户,三节点都需操作,此处以其中一节点为例 [root@prod-ck-zk-01 home]# cd apache-zookeeper-3.8.3-bin/conf/ [root@prod-ck-zk-01 conf]# cp -p zoo_sample.cfg zoo.cfg -- 编辑后的zoo.cfg文件内容如下 tickTime=2000 initLimit=10 syncLimit=5 dataDir=/data/zookeeper clientPort=2181 metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider metricsProvider.httpPort=7000 metricsProvider.exportJvmInfo=true admin.enableServer=true admin.serverPort=8080 server.1=10.110.5.132:2888:3888 server.2=10.110.5.133:2888:3888 server.3=10.110.5.134:2888:3888 autopurge.purgeInterval=1 autopurge.snapRetainCount=5 -- 以上参数具体含义如下 各个参数的含义如下: - `tickTime=2000`: ZooKeeper使用的基本时间单位,单位是毫秒。这个值用于心跳和超时等。 - `initLimit=10`: 这是follower初始化与leader之间的连接时能容忍的最多心跳次数(tickTime的数量)。 - `syncLimit=5`: 这是leader和follower之间发送消息,请求和应答时间长度,单位是tickTime。 - `dataDir=/data/zookeeper`: ZooKeeper存储数据的目录。 - `clientPort=2181`: 客户端连接ZooKeeper服务器的端口号。 - `metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider`: ZooKeeper的度量提供者类名,这里配置的是PrometheusMetricsProvider,表示使用Prometheus进行监控。 - `metricsProvider.httpPort=7000`: Prometheus的HTTP服务端口。 - `metricsProvider.exportJvmInfo=true`: 是否导出JVM的相关信息给Prometheus。 - `admin.enableServer=true`: 是否启用ZooKeeper的admin server。 - `admin.serverPort=8080`: ZooKeeper admin server的端口号。 - `server.X=ip:port:port`: ZooKeeper集群中的服务器配置,X代表服务器的编号,ip是服务器的IP地址,第一个端口是服务器之间通信的端口,第二个端口是leader选举使用的端口。 - `autopurge.purgeInterval=1`: 自动清理的间隔(单位是小时),这里配置的是1小时清理一次。 - `autopurge.snapRetainCount=5`: 保留的快照文件数量,超过这个数量的旧文件会被清理。
3)添加java.env配置文件
-- root用户,三节点都需操作,此处以其中一节点为例 -- 通过如下命令在/home/apache-zookeeper-3.8.3-bin/conf目录下新增 java.env 配置文件,命令及配置文件内容如下: cat << 'EOF' | tee -a /home/apache-zookeeper-3.8.3-bin/conf/java.env #!/bin/sh export JVMFLAGS="-Xms128m \ -Xmx6g \ -Xloggc:/var/log/zookeeper/zookeeper-gc.log \ -XX:+UseGCLogFileRotation \ -XX:NumberOfGCLogFiles=16 \ -XX:GCLogFileSize=16M \ -verbose:gc \ -XX:+PrintGCTimeStamps \ -XX:+PrintGCDateStamps \ -XX:+PrintGCDetails \ -XX:+PrintTenuringDistribution \ -XX:+PrintGCApplicationStoppedTime \ -XX:+PrintGCApplicationConcurrentTime \ -XX:+PrintSafepointStatistics \ -XX:+UseG1GC \ -Djute.maxbuffer=8388608 \ -XX:MaxGCPauseMillis=50 $JVMFLAGS" EOF -- 以上各参数解释如下 这些是JVM启动参数,用于调整内存、垃圾收集和日志: - `-Xms128m`: 初始堆内存128MB。 - `-Xmx6g`: 最大堆内存6GB。 - `-Xloggc`: 垃圾收集日志路径。 - `-XX:+UseGCLogFileRotation`: 启动日志轮转。 - `-XX:NumberOfGCLogFiles=16`: 日志文件数16个。 - `-XX:GCLogFileSize=16M`: 日志文件大小16MB。 - `-verbose:gc`: 输出垃圾收集信息。 - `-XX:+PrintGCTimeStamps`: 添加GC时间戳。 - `-XX:+PrintGCDateStamps`: 添加GC日期戳。 - `-XX:+PrintGCDetails`: 输出GC详细信息。 - `-XX:+PrintTenuringDistribution`: 新生代年龄分布信息。 - `-XX:+PrintGCApplicationStoppedTime`: 应用暂停时间。 - `-XX:+PrintGCApplicationConcurrentTime`: 应用运行时间。 - `-XX:+PrintSafepointStatistics`: 安全点统计信息。 - `-XX:+UseG1GC`: 使用G1垃圾收集器。 - `-Djute.maxbuffer=8388608`: ZooKeeper序列化缓冲区大小8MB。 - `-XX:MaxGCPauseMillis=50`: 期望最大GC暂停时间50毫秒。 `$JVMFLAGS`: 累加已有的JVMFLAGS参数。
4)增加myid文件
-- root用户,三节点都需操作
-- 在ZooKeeper集群各数据目录/data/zookeeper,增加myid文件,标识当前节点,用于ZooKeeper集群选举【注意,各节点myid值不同】
-- 节点一 prod-ck-zk-01
[root@prod-ck-zk-01 ~]# echo 1 >> /data/zookeeper/myid
-- 节点二 prod-ck-zk-02
[root@prod-ck-zk-02 ~]# echo 2 >> /data/zookeeper/myid
-- 节点二 prod-ck-zk-03
[root@prod-ck-zk-03 ~]# echo 3 >> /data/zookeeper/myid
5)启动Zookeeper集群
-- root用户操作 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。** **深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!** **因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**      **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!** **由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新** **如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)**  为了做好运维面试路上的助攻手,特整理了上百道 **【运维技术栈面试题集锦】** ,让你面试不慌心不跳,高薪offer怀里抱! 这次整理的面试题,**小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。**  本份面试集锦涵盖了 * **174 道运维工程师面试题** * **128道k8s面试题** * **108道shell脚本面试题** * **200道Linux面试题** * **51道docker面试题** * **35道Jenkis面试题** * **78道MongoDB面试题** * **17道ansible面试题** * **60道dubbo面试题** * **53道kafka面试** * **18道mysql面试题** * **40道nginx面试题** * **77道redis面试题** * **28道zookeeper** **总计 1000+ 道面试题, 内容 又全含金量又高** * **174道运维工程师面试题** > 1、什么是运维? > 2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的? > 3、现在给你三百台服务器,你怎么对他们进行管理? > 4、简述raid0 raid1raid5二种工作模式的工作原理及特点 > 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择? > 6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择? > 7、Tomcat和Resin有什么区别,工作中你怎么选择? > 8、什么是中间件?什么是jdk? > 9、讲述一下Tomcat8005、8009、8080三个端口的含义? > 10、什么叫CDN? > 11、什么叫网站灰度发布? > 12、简述DNS进行域名解析的过程? > 13、RabbitMQ是什么东西? > 14、讲一下Keepalived的工作原理? > 15、讲述一下LVS三种模式的工作过程? > 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟? > 17、如何重置mysql root密码? [**一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0) **AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算** > 17、如何重置mysql root密码? [**一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0) **AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。