ClickHouse生产运维系列[部署篇]-02_Zookeeper介绍及集群安装部署_zookeeper clickhouse(1)

3.2 部署JDK

本次选择在三节点部署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)

3.3 部署ZooKeeper

登录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用户操作
 -- 在ZooKeeper节点一/home/目录创建start_zk_cluster.sh集群启动脚本,脚本内容如下所示:
 cat << 'EOF' | sudo tee /home/start_zk_cluster.sh > /dev/null
 #!/bin/bash
 ​
 # 定义服务器列表
 SERVERS=("10.110.5.132" "10.110.5.133" "10.110.5.134")
 ​
 # Zookeeper启动脚本的路径
 ZK_START_SCRIPT="/home/apache-zookeeper-3.8.3-bin/bin/zkServer.sh start"
 ​
 # root密码
 PASSWORD="root"
 ​
 # 遍历服务器列表并通过ssh启动Zookeeper
 for SERVER in "${SERVERS[@]}"; do
     echo "Starting Zookeeper on ${SERVER}..."
     sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no root@$SERVER $ZK_START_SCRIPT
 done
 ​
 echo "Zookeeper cluster startup initiated on all servers."
 EOF
 ​
 -- 然后执行start_zk_cluster.sh脚本
 [root@prod-ck-zk-01 home]# sh start_zk_cluster.sh 
 -- 输出结果如下
 Starting Zookeeper on 10.110.5.132...
 /usr/bin/java
 ZooKeeper JMX enabled by default
 Using config: /home/apache-zookeeper-3.8.3-bin/bin/../conf/zoo.cfg
 Starting zookeeper ... STARTED
 Starting Zookeeper on 10.110.5.133...
 /usr/bin/java
 ZooKeeper JMX enabled by default
 Using config: /home/apache-zookeeper-3.8.3-bin/bin/../conf/zoo.cfg
 Starting zookeeper ... STARTED
 Starting Zookeeper on 10.110.5.134...
 /usr/bin/java
 ZooKeeper JMX enabled by default
 Using config: /home/apache-zookeeper-3.8.3-bin/bin/../conf/zoo.cfg
 Starting zookeeper ... STARTED
 Zookeeper cluster startup initiated on all servers.
 ​
 -- 注意:若报 sshpass: command not found,需各服务器安装 sshpass,通过如下方式安装sshpass
 sudo yum install sshpass

3.4 查看Zookeeper集群状态

 -- 节点一查看ZK当前状态
 [root@prod-ck-zk-01 ~]# /home/apache-zookeeper-3.8.3-bin/bin/zkServer.sh status
 ZooKeeper JMX enabled by default
 Using config: /home/apache-zookeeper-3.8.3-bin/bin/../conf/zoo.cfg
 Client port found: 2181. Client address: localhost. Client SSL: false.
 Mode: follower   ## 显示当前状态为follower
 ​
 -- 节点二查看ZK当前状态
 [root@prod-ck-zk-02 ~]# /home/apache-zookeeper-3.8.3-bin/bin/zkServer.sh status
 ZooKeeper JMX enabled by default
 Using config: /home/apache-zookeeper-3.8.3-bin/bin/../conf/zoo.cfg
 Client port found: 2181. Client address: localhost. Client SSL: false.
 Mode: leader     ## 显示当前状态为leader
 ​
 -- 节点三查看ZK当前状态
 [root@prod-ck-zk-03 ~]# /home/apache-zookeeper-3.8.3-bin/bin/zkServer.sh status
 ZooKeeper JMX enabled by default
 Using config: /home/apache-zookeeper-3.8.3-bin/bin/../conf/zoo.cfg
 Client port found: 2181. Client address: localhost. Client SSL: false.
 Mode: follower    ## 显示当前状态为follower

3.5 ZooKeeper验证

3.5.1 查看四字命令是否有效

分别使用浏览器打开 http://xxx.xxx.xxx.xxx:8080/commands/mntr 验证四字命令是否有效,若输入如下内容表示有效。

 {
     "version": "3.8.3-6ad6d364c7c0bcf0de452d54ebefa3058098ab56, built on 2023-10-05 10:34 UTC",
     "server_state": "leader",
     "peer_state": "leading - broadcast",
     "write_batch_time_in_commit_processor{quantile=\"0.5\"}": "NaN",
     "write_batch_time_in_commit_processor_count": 0,
     "write_batch_time_in_commit_processor_sum": 0,
      ---此处省略部分内容
      ......
     "prep_process_time_count": 0,
     "prep_process_time_sum": 0,
     "reads_after_write_in_session_queue{quantile=\"0.5\"}": "NaN",
     "reads_after_write_in_session_queue_count": 0,
     "reads_after_write_in_session_queue_sum": 0,
     "learner_commit_received_count": 0,
     "command": "monitor",
     "error": null
 }

注:四字命令含义详细解释如下:

 在Zookeeper中,`mntr` 是一种四字命令(four-letter word command),可以用于获取Zookeeper服务的详细运行时状态信息。这些命令通常用于监控和诊断。当你访问 `http://xxx.xxx.xxx.xxx:8080/commands/mntr`,你实际上是通过HTTP接口发送了一个 `mntr` 命令到Zookeeper服务器。
 ​
 Zookeeper的HTTP接口是一个额外的服务,可能是由某个Zookeeper监控或管理工具提供的。如果Zookeeper服务配置了HTTP服务器并且启用了`mntr`命令的HTTP接口,那么你可以通过这种方式获取Zookeeper的状态信息。
 ​
 `mntr` 命令返回的信息通常包含以下内容:
 ​
 - `zk_version`: Zookeeper的版本
 - `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/standalone)
 - `zk_znode_count`: Znode节点的数量
 - `zk_watch_count`: watch的数量


### 最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

### 资料预览

给大家整理的视频资料:

![](https://img-blog.csdnimg.cn/img_convert/02d6e87792e043bc5889255054c0f9ed.png)

给大家整理的电子书资料:

  

![](https://img-blog.csdnimg.cn/img_convert/e31b41b381f9f17a0e6aa48c8d37cd86.png)



**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
子书资料:

  

[外链图片转存中...(img-y1Znh7sy-1714543554567)]



**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值