【zookeeper】zookeeper集群安装

环境规划

实际的生产使用中,我们一般推荐搭建奇数多节点的zookeeper集群,如3/5/7。在本次测试中,我使用了centos7 三台服务器搭建,复用了我搭建k8s集群的环境,如下表。

IPhostname
192.168.2.140k8s-m1
192.168.2.141k8s-m2
192.168.2.142k8s-m3

此次部署的zookeeper版本为3.7.1

java安装

java版本要求

由于zookeeper服务需要java,至于版本要求,可以先将zookeeper的包下载下来解压后查看README.md 文件,里面相应说明。如 apache-zookeeper-3.7.1版本。

[root@k8s-m1 apache-zookeeper-3.7.1-bin]# cat /opt/apache-zookeeper-3.7.1-bin/README.md 
.....
## Java 8
If you are going to compile with Java 1.8, you should use a
recent release at u211 or above
#说明java8的话需要u211以及以上版本

下面提供一个java安装的脚本,需要先下载这个包。直接在oracle上下载貌似要注册账号密码,之前用的下面的命令下载包,但是现在应该不行了。反正先找一个比要求版本高的jdk包安装就行。

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-linux-x64.tar.gz

java安装脚本

注意java需要在所有zookeeper节点上安装,我这就包括k8s-m1、k8s-m2、k8s-m3三个节点。

[root@k8s-m1 ~]# cat install_java.sh 
#!/bin/bash
java -version
if [ $? = 0 ];thenecho "Java is installed"
elseecho "installing Java...."tar -zxf ./jdk-8u65-linux-x64.tar.gz -C /opt/JAVA_HOME="/opt/jdk1.8.0_65"echo "export JAVA_HOME=/opt/jdk1.8.0_65" >> /etc/profileecho "export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar" >> /etc/profileecho "export PATH=$JAVA_HOME/bin:$PATH" >> /etc/profileecho "installed successful"
fi
source /etc/profile
exit##运行脚本
[root@k8s-m1 ~]# sh -x install_java.sh 
[root@k8s-m1 ~]# java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
#找不到命令可以再执行一下source /etc/profile

zookeeper安装

安装包下载

下载地址https://archive.apache.org/dist/zookeeper/zookeeper-3.7.1/,目前该网站还可以下载历史版本的安装包。我们此次使用的是3.7.1版本。注意带有bin名称的包才是我们想要的下载可以直接使用的,里面有编译后的二进制的包,而之前的普通的tar.gz的包里面是只是源码的包无法直接使用。

[root@k8s-m1 ~]# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz[root@k8s-m1 ~]# tar -zxf apache-zookeeper-3.7.1-bin.tar.gz -C /opt/
[root@k8s-m1 ~]# cd /opt/apache-zookeeper-3.7.1-bin/[root@k8s-m1 apache-zookeeper-3.7.1-bin]# ls
bin  conf  docs  lib  LICENSE.txt  log  logs  NOTICE.txt  README.md  README_packaging.md[root@k8s-m1 apache-zookeeper-3.7.1-bin]# ll lib/zookeeper-3.7.1.jar 
-rw-r--r-- 1 kmc kmc 1305907 May  7  2022 lib/zookeeper-3.7.1.jar

配置更改

默认有一个zoo_sample.cfg的配置文件,我们可以留着。直接新创建一个配置文件后再进行修改。修改完成后,可以将整个文件夹拷贝到其他两个节点再更改部分配置。

[root@k8s-m1 apache-zookeeper-3.7.1-bin]# cd conf/
[root@k8s-m1 apache-zookeeper-3.7.1-bin]# vi zoo.cfg 
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeperData
dataLogDir=/zookeeperDataLog
clientPort=2181
server.1=192.168.2.140:2888:3888
server.2=192.168.2.141:2888:3888
server.3=192.168.2.142:2888:3888
4lw.commands.whitelist=*
maxClientCnxns=1000
minSessionTimeout=30000
maxSessionTimeout=60000
autopurge.snapRetainCount=10
autopurge.purgeInterval=1
#globalOutstandingLimit=200
#preAllocSize=131072
#snapCount=300000
#leaderServes=yes#还需要创建上面配置中使用的两个目录,3个节点都需要创建
[root@k8s-m1 apache-zookeeper-3.7.1-bin]# mkdir -p /zookeeperData
[root@k8s-m1 apache-zookeeper-3.7.1-bin]# mkdir -p /zookeeperDataLog

部分配置说明:

  • tickTime:心跳基本时间单位,毫秒级,ZK基本上所有的时间都是这个时间的整数倍。

  • initLimit:tickTime的个数(倍数),表示在leader选举结束后,followers与leader同步需要的时间,如果followers比较多或者说leader的数据灰常多时,同步时间相应可能会增加,那么这个值也需要相应增加。当然,这个值也是follower和observer在开始同步leader的数据时的最大等待时间(setSoTimeout)

  • syncLimit:tickTime的个数(倍数),这时间容易和上面的时间混淆,它也表示follower和observer与leader交互时的最大等待时间,只不过是在与leader同步完毕之后,进入正常请求转发或ping等消息交互时的超时时间。

  • dataDir:内存数据库快照存放地址,如果没有指定事务日志存放地址(dataLogDir),默认也是存放在这个路径下,建议两个地址分开存放到不同的设备上。

  • clientPort:配置ZK监听客户端连接的端口

  • server.serverid=host:tickpot:electionport

    • server:固定写法
    • serverid:每个服务器的指定ID(必须处于1-255之间,必须每一台机器不能重复)
    • host:主机名
    • tickpot:心跳通信端口
    • electionport:选举端口
  • maxClientCnxns:默认值是10,一个客户端能够连接到同一个服务器上的最大连接数,根据IP来区分。如果设置为0,表示没有任何限制。设置该值一方面是为了防止DoS攻击。

  • minSessionTimeout:最小的session time时间,默认值是2个tick time,客户端设置的session time 如果小于这个值,则会被强制协调为这个最小值。

  • maxSessionTimeout:最大的session time 时间,默认值是20个tick time. ,客户端设置的session time 如果大于这个值,则会被强制协调为这个最大值。

  • globalOutstandingLimit:(Java system property: zookeeper.globalOutstandingLimit)默认值是1000,限定了所有连接到服务器上但是还没有返回响应的请求个数(所有客户端请求的总数,不是连接总数),这个参数是针对单台服务器而言,设定太大可能会导致内存溢出。

  • preAllocSize:(Java system property: zookeeper.preAllocSize)默认值64M,以KB为单位,预先分配额定空间用于后续transactionlog 写入,每当剩余空间小于4K时,就会又分配64M,如此循环。如果SNAP做得比较频繁(snapCount比较小的时候),那么请减少这个值。

  • snapCount:(Java system property: zookeeper.snapCount)默认值100,000,当transaction每达到snapCount/2+rand.nextInt(snapCount/2)时,就做一次SNAPSHOT,默认情况下是50,000~100,000条transactionlog就会做一次,之所以用随机数是为了避免所有服务器可能在同一时间做snapshot.

分发文件

[root@k8s-m1 conf]# scp -r /opt/apache-zookeeper-3.7.1-bin/ 192.168.2.141:/opt/
[root@k8s-m1 conf]# scp -r /opt/apache-zookeeper-3.7.1-bin/ 192.168.2.142:/opt/

serverid 配置

最重要的步骤,一定不能忘了。 需要去的各个 ZooKeeper 服务器节点,在新建的dataDir目录中,这个目录就是在 zoo.cfg 中配置的 dataDir 的目录,新建一个名叫 myid的文件,该文件里面的内容就是服务器的 id,而id就是 server.1=192.168.2.140:2888:3888当中对应的id,如k8s-m1节点上myid的内容为1,:

[root@k8s-m1 zookeeperData]# cat  myid 
1

其他两个节点配置类似依次为2,3。 到此,我们 ZooKeeper相关的配置文件就修改完成了。

zookeeper服务启动与停止

3台服务器都需要操作

[root@k8s-m1 ~]# /opt/apache-zookeeper-3.7.1-bin/bin/zkServer.sh start
[root@k8s-m1 ~]# /opt/apache-zookeeper-3.7.1-bin/bin/zkServer.sh stop

zookeeper服务检查

#进程检查,3台机器上都有QuorumPeerMain进程
[root@k8s-m1 opt]# jps | grep QuorumPeerMain
10277 QuorumPeerMain
[root@k8s-m1 opt]# ps -ef |grep zookeeper# 角色查询
[root@k8s-m1 opt]# /opt/apache-zookeeper-3.7.1-bin/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.7.1-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

通过系统服务管理zookeeper

有时候时间久了不记得zookeeper的目录,或者为了方便对zookeeper服务的管理等。3台服务器都需要进行操作。

[root@k8s-m1 ~]# cat /usr/lib/systemd/system/zookeeper.service [Unit]Description=Zookeeper serviceAfter=network.target[Service]Type=simpleEnvironment=ZOO_LOG_DIR=/opt/apache-zookeeper-3.7.1-bin/logPIDFile=/zookeeperData/zookeeper_server.pidExecStart=/opt/apache-zookeeper-3.7.1-bin/bin/zkServer.sh startExecStop=/opt/apache-zookeeper-3.7.1-bin/bin/zkServer.sh stop[Install]WantedBy=multi-user.target

通过systemctl来管理zookeeper需要修改zkServer.sh 文件。大致位置如下,只需要添加java的home路径

vim /opt/apache-zookeeper-3.7.1-bin/bin/zkServer.sh
......
# use POSIX interface, symlink is followed automatically
ZOOBIN="${BASH_SOURCE-$0}"
ZOOBIN="$(dirname "${ZOOBIN}")"
ZOOBINDIR="$(cd "${ZOOBIN}"; pwd)"
JAVA_HOME='/opt/jdk1.8.0_65
......

然后就可以用systemctl来管理zookeeper

[root@k8s-m1 apache-zookeeper-3.7.1-bin]# systemctl enable zookeeper.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/zookeeper.service to /usr/lib/systemd/system/zookeeper.service.
[root@k8s-m1 apache-zookeeper-3.7.1-bin]# systemctl start zookeeper.service 
[root@k8s-m1 apache-zookeeper-3.7.1-bin]# systemctl status zookeeper.service 

更多关于zookeeper的知识分享,请前往博客主页。编写过程中,难免出现差错,敬请指出

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

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

相关文章

YOLOv5算法改进(7)— 添加SimAM注意力机制

前言:Hello大家好,我是小哥谈。SimAM(Similarity-based Attention Mechanism)是一种基于相似度的注意力机制,它的原理是通过计算查询向量与每个键向量之间的相似度,从而确定每个键向量对于查询向量的重要性…

对HashMap的value做升序、降序

public class MapUtils {// Map的value值降序排序public static <K, V extends Comparable<? super V>> Map<K, V> sortDescend(Map<K, V> map) {List<Map.Entry<K, V>> list new ArrayList<>(map.entrySet());list.sort((o1, o2)…

【高级程序设计语言C++】C++11

1. lambda表达式2. 移动构造函数和移动赋值运算符重载3. default关键字4. delete关键字5. 可变参数模板6. push_back和emplace_back的区别6.1. emplace_back的优势 7. 包装器7.1. 包装器的语法格式 1. lambda表达式 在C中&#xff0c;lambda表达式是一种用于创建匿名函数的语法…

时序预测 | Matlab实现CNN-XGBoost卷积神经网络结合极限梯度提升树时间序列预测

时序预测 | Matlab实现CNN-XGBoost卷积神经网络结合极限梯度提升树时间序列预测 目录 时序预测 | Matlab实现CNN-XGBoost卷积神经网络结合极限梯度提升树时间序列预测效果一览基本描述程序设计参考资料 效果一览 基本描述 时序预测 | Matlab实现CNN-XGBoost卷积神经网络结合极限…

Web安全——信息收集下篇

Web安全 一、网络空间搜索引擎二、扫描敏感目录/文件1、御剑2、7kbstorm3、bbscan4、dirmap5、dirsearch6、gobuster7、网站文件 三、扫描网页备份四、网站头信息收集五、敏感文件搜索1、GitHub搜索2、Google-hacking3、wooyun漏洞库4、网盘搜索5、社工库6、网站注册信息7、js敏…

【Linux操作系统】信号量实现生生产者消费者模型

当涉及到多线程编程时&#xff0c;经常会遇到生产者消费者问题。在Linux系统编程中&#xff0c;我们可以使用信号量来实现生产者消费者模型&#xff0c;以确保线程之间的同步和互斥。 文章目录 什么是生产者消费者问题&#xff1f;使用信号量实现生产者消费者模型信号量的原理信…

java的ide有哪些(含代码示例)

java的ide有哪些(含代码示例 编辑功能编辑功能常用的Java IDE有&#xff1a;Eclipse&#xff1a;Eclipse是一个开放源代码的、基于Java的可扩展开发平台。它提供了强大的代码编辑功能&#xff0c;包括语法高亮显示、自动补全、代码折叠、智能代码导航以及调试功能等。 编辑功…

iPhone 14 Plus与iPhone 14 Pro:你应该买哪一款

又到了iPhone季,这意味着你可能会在几种不同的机型之间左右为难,无法决定买哪一款。更令人困惑的是,苹果推出的iPhone变体——iPhone 14 Plus,只比老款iPhone 14 Pro低100美元。 有这么多选择,你可能想知道哪款iPhone最适合你。你应该买一部大屏幕的iPhone 14 Plus并节省…

Jenkins自动化部署-Jenkins的安装

首先我们需要安装docker 安装 yum-utils包 yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 --skip-broken 设置镜像地址 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce…

【ES6】Promise的入门介绍

Promise 是 JavaScript 中的一个对象&#xff0c;用于处理异步操作。Promise 对象代表一个最终可能完成&#xff08;并得到结果&#xff09;或失败&#xff08;并被拒绝&#xff09;的操作&#xff0c;以及其结果的值。 一个 Promise 有三种状态&#xff1a; Pending&#xf…

包含文心一言在内的首批国产大模型 全面开放

8月31起&#xff0c;国内 11 家通过《生成式人工智能服务管理暂行办法》备案的 AI 大模型产品将陆续上线&#xff0c;面向全社会开放。北京 5 家大模型产品分别是百度的 “文心一言”、抖音的 “云雀”、百川智能的 “百川大模型”、清华系 AI 公司智谱华章旗下的 “智谱清言”…

python爬虫入门教程(非常详细):如何快速入门Python爬虫?

示例示例Python爬虫入门教程什么是爬虫爬虫&#xff08;又称网络爬虫&#xff09;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。它可以自动地抓取网页内容&#xff0c;并从中提取有用的数据&#xff0c;存储到本地文件或数据库中。 Python爬虫入门教…

vue3 Table 分页保留选中状态

//指定id值,数据更新之后保留之前选中的数据 const getRowKeys (row) > {return row.siteId; }; // 这存的是选中的数据 const userSelectionChange (values) > {state.selectedData [...values]; }; // 两个数组对比&#xff0c;判断表格中的数据是否开启选中 cons…

linux EOF 用法

这篇文章主要讲解了“linux的eof怎么使用”&#xff0c;文中的讲解内容简单清晰&#xff0c;易于学习与理解&#xff0c;下面请大家跟着小编的思路慢慢深入&#xff0c;一起来研究和学习“linux的eof怎么使用”吧&#xff01; linux的eof是自定义终止符&#xff0c;其全称是“E…

chrono学习(一)

我想用chrono进行沙土的仿真&#xff0c;首先学习demo_GPU_ballCosim.cpp&#xff0c;这个例子仿真了一些沙土的沉降过程。 首先&#xff0c;运行编辑完成的文件demo_GPU_ballCosim&#xff1a; (base) eowyneowyn-MS-7D20:~/build_chrono/bin$ ./demo_GPU_ballCosim 运行完得…

编译链接的流程

编译链接的流程 编译链接是将源代码转换为可执行程序的过程&#xff0c;一般包括以下几个步骤&#xff1a; 预处理&#xff08;Preprocessing&#xff09;&#xff1a;预处理器根据以字符 ‘#’ 开头的预处理指令&#xff0c;对源代码进行处理。这些指令可以包括宏定义、头文…

Spring源码分析(十)Bean实例化(下)

目录 1.1 循环依赖1.2 属性填充1.2.1 populateBean方法1.2.2 initializeBean方法执行Aware方法执行BeanPostProcessor后置处理器的前置处理方法执行初始化方法执行BeanPostProcessor后置处理器的后置处理方法&#xff1a;postProcessAfterInitialization()&#xff0c;允许对be…

MySQL数据库基本操作

目录 一、数据库中常用的数据类型 二、常用命令与操作 1.DDL数据库定义语言 1、登录用户的数据库 2、查看当前服务器中的数据库 3、切换/进入数据库 并 查看数据库中包含的表 4、查看数据库中表的结构 5、创建数据库 7、展示创建数据表时的结构 8、创建表&#xff0c…

clickhouse中replacingMergeTree

ReplacingMergeTree是在MergeTree上添加了去重的功能&#xff0c;但是这个功能不可控&#xff0c;合并是一个后台的操作&#xff0c;除非手动触发&#xff0c;不然无法控制&#xff0c;并且它会删除具有相同(区内)主键的重复项。 特点&#xff1a; 1&#xff0c;去重时机不定&a…

Linux 三剑客

grep grep主打的就是查找功能 &#xff0c;它能够在一个或者多个文件中搜索某一特定的字符模式。 grep的语法 grep [选项] 模式 文件名 先说选项&#xff1a; 1.选项 要么是正则要么是字符串 -c 列出共出现多少次 -i 忽略大小写 -n 在前面列出行号 -v …