CentOS 7.x 安装 ZooKeeper 并实现集群搭建

news/2024/7/7 19:01:31

0. 集群结构

 服务器IPhostname节点说明
192.168.31.101master主节点
192.168.31.102slave1从节点
192.168.31.103

slave2

从节点

下面的安装与配置操作需要在三台服务器上都执行一遍。

1. 安装JDK

ZooKeeper要求运行在 JDK 环境上,JDK安装教程可参考 CentOS 7.x 安装 JDK1.8

2. 下载 ZooKeeper

地址:Apache ZooKeeper 

建议下载稳定版本,我这里选择下载 Apache ZooKeeper 3.7.1

3. 上传与解压

将安装包上传到 CentOS 中的 /home/software/ 目录下(目录不存在的就新建)。

解压:

tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz

将解压后的文件夹移动到 /usr/local 目录下,并重命名为 zookeeper-3.7.1

mv apache-zookeeper-3.7.1-bin /usr/local/
cd /usr/local/
mv apache-zookeeper-3.7.1-bin zookeeper-3.7.1

4. 修改配置文件,实现集群

将zookeeper压缩文件解压后,进入到 conf 目录:

将 zoo_sample.cfg 文件复制并重命名为 zoo.cfg 文件。

cp zoo_sample.cfg zoo.cfg

通过 vim zoo.cfg 命令对该文件进行修改:

如果dataDir指定的目录不存在的话需要新建一下:

mkdir /usr/local/zookeeper-3.7.1/data

上面红色框住的内容即是我们要修改的内容,主要有两处:

① 第一个是 dataDir ;

② 第二个是需要新增  server.A=B:C:D 配置:

  • 其中 A 对应下面我们即将介绍的myid 文件,
  • B是集群的各个IP地址,
  • C:D 是端口配置。

对配置文件中的几个参数解释如下:

  ① tickTime:基本事件单元,以毫秒为单位。这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每隔 tickTime时间就会发送一个心跳。

  ② initLimit:这个配置项是用来配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数,当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。

  ③ syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒

  ④ dataDir:存储内存中数据库快照的位置,顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

  ⑤ clientPort: 这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

  ⑥ server.A=B:C:D

    A表示这个是第几号服务器,

    B 是这个服务器的 ip 地址;

    C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;

    D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader 

参考官方文档:ZooKeeper: Because Coordinating Distributed Systems is a Zoo

5. 创建 myid 文件

在 上一步 dataDir 指定的目录下,创建 myid 文件。然后在该文件中写入上一步 server 配置的对应 A 数字。

比如我们上面的 dataDir 配置:

dataDir=/usr/local/zookeeper-3.7.1/data

server 配置是:

server.0=192.168.31.101:2888:3888
server.1=192.168.31.102:2888:3888
server.2=192.168.31.103:2888:3888

那么就必须在 192.168.31.101 机器的的 /usr/local/zookeeper-3.7.1/data 目录下创建 myid 文件,并在该文件中写上 0 即可。

# 显示文件内容
cat myid

其他的ip对应的机器依次创建myid文件,写上相应配置数字即可。192.168.31.102 对应的 myid 文件写上 1,192.168.31.103 对应的 myid 文件写入 2 。

6. 配置环境变量

为了能够在任意目录下启动zookeeper集群,我们需要配置环境变量。

  • 你也可以不配置,这不是搭建集群的必要操作,只不过如果你不配置环境变量,那么每次启动zookeeper需要到安装文件的 bin 目录下去启动。

编辑 /etc/profile 文件,在文件末尾添加相应的配置信息:

#set zookeeper environment
export ZK_HOME=/usr/local/zookeeper-3.7.1
export PATH=$PATH:$ZK_HOME/bin

然后执行如下命令使得环境变量生效:

source /etc/profle

7. 启动zookeeper服务

基本命令:

# 启动命令
zkServer.sh start

# 停止命令
zkServer.sh stop

# 重启命令
zkServer.sh restart

# 查看集群节点状态
zkServer.sh status

分别对集群的三台机器执行启动命令。执行完毕后,分别查看集群节点状态:

出现如下即是集群搭建成功:

三台机器,slave1 成功的通过了选举称为了leader,而剩下的两台成为了 follower。这时候,如果将slave1关掉,会发现剩下两台又会有一台变成了 leader节点。

8. 可能出现的问题

如果没有出现第 7 步显示的集群状态,说明搭建过程出了问题,那么解决问题的首先就是查看日志文件:

zookeeper 日志文件目录在:dataDir 配置的目录下,文件名称为:zookeeper.out。通过查看日志来解决相应的问题。下面是两个可能的原因:

(1)防火墙未关闭

  查看防火墙状态:

service iptables status

       如果没有关闭,则需要关闭一下:

chkconfig iptables off

(2)dataDir 配置的目录没有创建

  在 zoo.cfg 文件中,会有对 dataDir 的一项配置,需要创建该目录,并且注意要在该目录下创建 myid 文件,里面的配置和 zoo.cfg 中的server.x 配置保持一致。


http://lihuaxi.xjx100.cn/news/1102174.html

相关文章

Wireless-Sensor-Network-master_WSN_无线传感网络(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 近年来,随着对等网络、云计算和网格计算等分布式环境的发展,无线传感器网络(WSN&#xff0…

33. Kubernetes 核心组件讲解——etcd

本章讲解知识点 etcd 概述Raft 原理简介etcd 其他应用场景etcd 不算 Kubernetes 自研组件,etcd 自身是一个开源组件,Kubernetes 集成了它而已。但我们还是有必要讲讲 etcd。 1. etcd 概述 1.1 概述 etcd 是一个高可用的分布式键值存储系统,被用来存储 Kubernetes 集群中的…

Vuex从了解到实际运用(二)——获取vuex中的全局状态(state getters)

vuex从了解到实际运用——获取vuex中的全局状态state getters 知识回调(不懂就看这儿!)场景复现项目实战vuex定义一个store实例在store中定义数据在组件中获取值vuex的计算属性通过getters获取全局状态state和getters获取全局状态的区别 知识…

【边缘设备】yolov5训练与rknn模型导出并在RK3588部署(亲测有效)

保姆级教程,看这一篇就够用了 环境准备 将宿主机和开发板接入同一个局域网,方便开发。 宿主机 PC电脑,x86_64, 带显卡, 配置不表, 能训练和开发即可。系统: ubuntu 22.04 LTS 版本( ubuntu 18.04 LTS 以上)自带的远程软件&…

从 PC 解锁 Android 手机的 6 种有效方法

在这个数字时代,手机已成为我们生活的重要组成部分。我们将它们用于各种用途,从跟踪我们的工作和社交日程到与亲人交流。 然而,有时我们的手机会成为令人沮丧的源头,尤其是当我们不小心将自己拒之门外时。但是您知道可以使用计算…

正则表达式匹配密码(字符串)

正则表达式匹配密码(字符串) 验证字符串至少由4种字符组成且长度大于等于8。 实例如下: import java.util.regex.Matcher; import java.util.regex.Pattern;public class Main {public static void main(String[] args) {String input &quo…

搭建Stable Diffusion WebUI详细过程

文章目录 1、环境搭建1.1、GPU服务器选择1.2、配置服务器环境 2、源码和模型下载3、安装依赖库文件4、运行项目5、视频教程 1、环境搭建 为了方便,这里直接选择Vultr提供的已安装Anaconda的Ubuntu 22.04系统。 如果你自己电脑有足够的显存,你也可以在自…

30. Kubernetes 核心组件讲解——Scheduler

本章讲解知识点 Scheduler 概述Scheduler 原理分析Scheduler 旧版本的两阶段调度流程Scheduler Framework1. Scheduler 概述 Kubernetes Scheduler 是 Kubernetes 集群中的一个核心组件,用于将 Pod 调度到适合的 Node 上运行。在 Kubernetes 中,Pod 是最小的可调度单元,而 …