ZooKeeper 安装并实现集群搭建

0. 集群结构

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

slave2

从节点

下面的安装与配置操作需要在三台虚拟机上都执行一遍,这里的虚拟机上安装的是centOS7版本。

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. 客户端访问命令

进入zookeeper客户端:  zkCli.sh

进去之后可输入以下命令进行操作:

  • 查找:ls /  或者  ls /zookeeper
  • 创建并赋值: create /didiok rede
  • 获取: get /didiok
  • 修改值: set /didiok rede1314 

PS1: 任意节点都可以看到zookeeper集群的数据一致性
PS2: 创建节点有俩种类型:短暂(ephemeral) 持久(persistent)

9. 可能出现的问题

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

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

(1)防火墙未关闭

  • 启动防火墙  systemctl start firewalld
  • 关闭防火墙  systemctl stop firewalld
  • 重启防火墙  systemctl restart firewalld
  • 查看防火墙状态  systemctl status firewalld
  • 开机禁用防火墙  systemctl disable firewalld

查看防火墙状态,如果没有关闭的话需要关闭一下。

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

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

10. 设置开机自启动

 在 /etc/rc.d/init.d/  下创建一个文件,名为 zookeeper :

cd /etc/rc.d/init.d/  
touch zookeeper     # 创建文件
chmod 777 zookeeper # 赋给权限:可读可写可执行
vim zookeeper 

文件中加入以下内容:

#!/bin/bash

#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
export JAVA_HOME=/usr/java/jdk8
export PATH=$PATH:$JAVA_HOME/bin
case $1 in
          start) /usr/local/zookeeper-3.7.1/bin/zkServer.sh start;;
          stop) /usr/local/zookeeper-3.7.1/bin/zkServer.sh stop;;
          status) /usr/local/zookeeper-3.7.1/bin/zkServer.sh status;;
          restart) /usr/local/zookeeper-3.7.1/bin/zkServer.sh restart;;
          *)  echo "require start|stop|status|restart"  ;;
esac

chkconfig --add zookeeper    添加一个新服务供 chkconfig 管理

chkconfig zookeeper on         配置为在每次系统启动时启动

chkconfig --list zookeeper      列出 chkconfig 中zookeeper的自启动状态

执行完上面三条命令后,我们就可以用 service zookeeper start/stop 来启动停止zookeeper服务了,使用 service zookeeper status 查看运行状态

如果上面的操作都正常的话;你就可以重启你的linux服务器看下ZooKeeper有没有跟着自启动。

12. ZooKeeper 可视化界面

ZooInspector下载:ZooInspector 

解压之后进入到解压后的文件夹 ZooInspector\build 下,在空白处,按住 shift 键,同时 鼠标右键,进入 Powershell 窗口:

执行命令:

java -jar zookeeper-dev-ZooInspector.jar

  会弹出窗口:

进行连接ZooKeeper节点:

 出现如下界面则显示连接成功:

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Zookeepermyid文件是用来标识每个Zookeeper节点的唯一ID的。每个节点都需要在myid文件配置一个唯一的数字,这个数字必须是1到255之间的整数。在集群中,每个节点的myid文件必须配置不同的数字,否则会导致节点无法启动或者出现其他问题。myid文件的路径默认为ZookeeperdataDir目录下,文件名为myid。在配置myid文件时,需要注意文件的权限必须为可读写,否则会导致节点无法启动。 ### 回答2: zookeeper myid文件是在zookeeper集群中,每个节点必须要有的一个文件。该文件包含一个单独的数字,表示该节点在集群中的唯一标识符,也被称为myid。 一个zookeeper集群通常由多台机器组成,每台机器都运行着一个zookeeper节点。因此,要保证节点之间的通信正常和集群的正常运行,zookeeper要求每个节点都必须有一个唯一的标识符,该标识符即为myidmyid是一个整数,可以是任何数字,但必须在1到255之间。 myid文件通常存储在数据目录下的conf文件夹中。该文件只包含一个数字,表示节点的标识符。 在配置myid文件的过程中,需要确保每个节点的myid是唯一的。可通过执行以下命令来检查myid是否唯一: ``` grep "myid=" /path/to/zookeeper/data/* -r ``` 如果在集群中有多个myid相同的节点,将导致该节点无法正常工作,甚至会导致整个集群崩溃。因此,确保每个节点的myid唯一是非常重要的。 在myid文件指定节点的id,可以通过编辑文件并将一个数字写入其中,也可以通过在启动时通过命令行或脚本参数来指定。在集群中添加新节点时,只需在新节点的myid文件指定一个唯一的整数即可。 总之,zookeeper myid文件是确保zookeeper集群正常工作所必需的文件之一,每个节点必须有唯一的myid,并将其写入myid文件中。在修改或添加节点时,要确保新节点的myid必须区别于其他节点的myid。 ### 回答3: Zookeeper是一个分布式应用程序协调服务,它提供了一个分布式锁、配置管理、负载均衡、服务发现等功能。在Zookeeper集群中,每个节点都有一个唯一的标识符,称为myid。在搭建Zookeeper集群时,需要配置每个节点的myid文件myid文件是一个纯文本文件文件名为”myid‘。该文件应该放在Zookeeper数据目录下,例如: /data/zookeeper/data/myid myid文件只有一行,包含一个数字,代表当前节点的编号。这个编号必须是一个唯一的非零整数,范围从1到255。每个节点的myid文件中都应该有不同的编号。 myid文件配置非常重要。在Zookeeper集群中,节点之间会通过myid文件中的编号来互相识别和通信。如果任意两个节点的myid编号相同,就会导致节点无法识别和通信,从而导致集群无法正常工作。 当节点启动时,Zookeeper会读取myid文件中的编号,并将其作为该节点的唯一标识符。节点启动后,Zookeeper会自动检测集群中的其他节点,并与之建立连接。如果其他节点的myid编号不同,Zookeeper会自动加入集群,并开始协调和管理分布式应用程序。如果其他节点的myid编号相同,Zookeeper会拒绝连接,并且无法被加入到集群中。 总之,配置Zookeeper myid文件是搭建Zookeeper集群的核心步骤之一。只有在myid编号唯一且正确配置的情况下,Zookeeper集群才能正常运作并保持一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值