当前位置:   article > 正文

Linux部署 zookeeper集群

Linux部署 zookeeper集群

问题现象:

        Linux 系统如何部署 zookeeper集群


解决方法:

0、环境

环境:

        linux 系统、JDK8、zookeeper 压缩包(bin-tar.gz)。

由于zookeeper 是基于 Java 语言的,因此安装 zookeeper 必须先安装好JAVA(JDK),这里我们安装常用的JDK8

注意:对于 linux 系统上安装 JDK8 感兴趣的小伙伴,可以参考一下文章:

        Linux 安装 JAVA(JDK)_Stephen·You的博客-CSDN博客

1、下载

地址:

        Index of /dist/zookeeper

版本很多不用担心选择哪个,我们直接点击 stable/ (稳定的)文件夹:

这里要注意如果你选择的版本(这里我下载的是 apache-zookeeper-3.6.3-bin.tar.gz)目录下,出现了两种压缩包(tar.gz):

        一种是容量比较大的(如12M),名字以 -bin.tar.gz 结尾的,例如上图中红色标记的压缩包,是我们要下载的

        另一种是容量小的(如3.2M),名字以 .tar.gz 结尾的,例如上图中蓝色标记的压缩包,不是我们要下载的。

2、安装和配置

2.1 新建目录

先新建一个目录,如 zookeeper-cluster

  1. # 进入自定义目录路径,用于存放zookeeper服务,如/home/thp/public
  2. cd /home/thp/public
  3. # 创建文件夹(目录),如zookeeper-cluster
  4. mkdir zookeeper-cluster

2.2 上传zookeeper压缩包到服务器

上传zookeeper压缩包到zookeeper-cluster文件夹下:

  1. # 进入zookeeper-cluster目录路径
  2. cd /home/thp/public/zookeeper-cluster

2.3 解压

  1. # 解压 zookeeper压缩包
  2. tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz

2.4 重命名解压后的文件夹

由于要搭建zookeeper集群,所以为了区分,我们对解压后的文件夹进行重命名:

  1. # 重命名为 zookeeper-3.6.3-1
  2. mv apache-zookeeper-3.6.3-bin zookeeper-3.6.3-1

 2.5 创建logs日志目录和data数据目录

新建 logs目录 和 data目录,分别用来存放 日志数据

  1. # 进入 zookeeper-3.6.3-1目录
  2. cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-1
  3. #创建 logs 和 data 目录
  4. mkdir logs data

2.6 创建 zoo.cfg 配置文件

进入 conf目录后可以看见 zoo_sample.cfg配置文件

  1. # 进入 conf目录
  2. cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-1/conf

将 zoo_sample.cfg 复制一份并命名为 zoo.cfg。

  1. # 复制一份并命名为 zoo.cfg
  2. cp zoo_sample.cfg zoo.cfg

 拓展:

这里说一下为什么要命名为 zoo.cfg。

是因为 zookeeper 的启动脚本 zkServer.sh 中,使用了 zkEnv.sh 脚本文件:

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

启动脚本 zkServer.sh:

 zkEnv.sh 脚本:

  可以看到:

        这里是使用到了 conf 目录下的一个名为 zoo.cfg 的配置文件,而不是 zoo_sample.cfg。

2.7 修改 zoo.cfg配置文件

  1. # 修改配置
  2. vi zoo.cfg

1、修改 dataDir 变量,赋值为 2.5 中创建好的 data目录,如:

dataDir=/home/thp/public/zookeeper-cluster/zookeeper-3.6.3-1/data

2、添加 dataLogDir 变量,赋值为 2.5 中创建好的 logs目录,如:

dataLogDir=/home/thp/public/zookeeper-cluster/zookeeper-3.6.3-1/logs

3、配置 clientPort 客户端端口,用于zookeeper服务集群之间的通信,(默认为2181),如:

clientPort=2181

4、在文件末尾添加zookeeper服务集群实例(本文章将搭建3个服务实例),如:

  1. server.1=服务器ip:2881:3881
  2. server.2=服务器ip:2882:3882
  3. server.3=服务器ip:2883:3883

拓展:

server.1=192.168.16.230:2881:3881 的各参数含义如下:        

server.实例ID=服务器IP:zk服务之间通信端口:zk服务之间投票选举端口

修改后,内容如下,:wq 保存并退出:

2.8 创建 myid数据文件

在 2.5 中创建的 data 目录下创建 myid数据文件:

  1. # 进入自定义数据目录
  2. cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-1/data

前提:

从 2.7 中配置的 clientPort=2181 和 server.1=172.17.80.219:2881:3881 可知,当前服务实例ID为 1 。

2种创建方式:

1、先用 mkdir命令 创建文件,再用vi命令 写入数据(当前服务实例ID):

  1. # 创建 myid文件
  2. mkdir myid
  3. # 编辑 myid文件,写入1
  4. vi myid

2、由于该文件是文本文件,所以可以使用echo 命令,在创建的同时写入数据:

  1. # 创建 myid文本文件,同时写入当前服务实例ID(1)
  2. echo 1 > myid

这里强烈推荐使用方法2,简单快捷!!!

创建后,myid数据文件的内容如下:

至此服务实例1就完成了!!!

拓展: 

这里说一下为什么要命名为 myid因为 zookeeper 的启动脚本 zkServer.sh 中,使用到了名为 myid的数据文件:

myid数据文件的作用是:文件中记载了当前服务实例的id,也就是上面配置服务实例时的实例ID:

        server.实例ID=实例IP:zk服务之间通信端口:zk服务之间投票选举端口

实例ID可用于zookeeper识别和管理当前服务实例,以便服务实例之间的通信。

2.9 部署其他服务实例

有了上面已经配置好的服务实例1,接下来部署其他服务实例就容易多了:

1、复制 zookeeper-3.6.3-1 文件夹到 /home/thp/public/zookeeper-cluster 目录下 ,命名为 zookeeper-3.6.3-2 :

  1. # 进入 zookeeper-cluster目录路径
  2. cd /home/thp/public/zookeeper-cluster
  3. # 复制 zookeeper-3.6.3-1 并命名为 zookeeper-3.6.3-2
  4. cp -r zookeeper-3.6.3-1 zookeeper-3.6.3-2

2、仿照 2.7 ,修改 /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-2/conf 目录下的 zoo.conf文件,需要修改的内容如下:

  1. dataDir=/home/thp/public/zookeeper-cluster/zookeeper-3.6.3-2/data
  2. dataLogDir=/home/thp/public/zookeeper-cluster/zookeeper-3.6.3-2/logs
  3. clientPort=2182

修改后内容如下:

3、修改 /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-2/data 目录下的 myid文件,修改后内容如下:

4、同样的,仿照上面的1、2、3、步骤再配置一个服务实例:

  1. # 进入 zookeeper-cluster目录路径
  2. cd /home/thp/public/zookeeper-cluster
  3. # 复制 zookeeper-3.6.3-1 并命名为 zookeeper-3.6.3-3
  4. cp -r zookeeper-3.6.3-1 zookeeper-3.6.3-3

 

 至此3个服务实例都安装并配置完成!!!

3、启动

3.1 开放防火墙端口

开放上面 2.7 中配置的所有端口号,如下:

2181、2182、2183

2881、2882、2883

3881、3882、3883

依次执行一下代码:

  1. # 开放端口
  2. sudo firewall-cmd --zone=public --add-port=2181/tcp --permanent
  3. sudo firewall-cmd --zone=public --add-port=2182/tcp --permanent
  4. sudo firewall-cmd --zone=public --add-port=2183/tcp --permanent
  5. sudo firewall-cmd --zone=public --add-port=2881/tcp --permanent
  6. sudo firewall-cmd --zone=public --add-port=2882/tcp --permanent
  7. sudo firewall-cmd --zone=public --add-port=2883/tcp --permanent
  8. sudo firewall-cmd --zone=public --add-port=3881/tcp --permanent
  9. sudo firewall-cmd --zone=public --add-port=3882/tcp --permanent
  10. sudo firewall-cmd --zone=public --add-port=3883/tcp --permanent
  11. # 重启防火墙
  12. sudo firewall-cmd --reload
  13. # 查看开放端口列表
  14. sudo firewall-cmd --zone=public --list-ports

查看端口开放列表,可以看见已经以上端口开放成功: 

3.2 进入到3个服务实例对应的 bin目录下,执行启动脚本 zkServer.sh 即可

  1. # 启动 服务实例1
  2. cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-1/bin
  3. ./zkServer.sh start
  4.  
  5. # 启动 服务实例2
  6. cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-2/bin
  7. ./zkServer.sh start
  8.  
  9. # 启动 服务实例3
  10. cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-3/bin
  11. ./zkServer.sh start

3.3 查看状态 

  1. # 查看 服务实例1 状态
  2. cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-1/bin
  3. ./zkServer.sh status
  4.  
  5. # 查看 服务实例2 状态
  6. cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-2/bin
  7. ./zkServer.sh status
  8.  
  9. # 查看 服务实例3 状态
  10. cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-3/bin
  11. ./zkServer.sh status

 出现如下信息,则表示zookeeper集群搭建完成!!!

拓展:

如果在查看服务实例状态时,出现如下报错:

则需要注意以下几点:

1、请保证严格按照本文章的步骤执行,仔细查看各配置是否有误!

2、因为是配置了集群,所以需要把所有服务实例都启动了,再去查看服务状态;如果没有起完所有的服务实例,就查看状态,也会报错,报错原因也可以通过查看logs下的日志 zookeeper-thp-server-NewGIS-GRCTest.out 文件可以查看服务运行日志:

 3、网上会提到说关闭防火墙,但其实不完全正确,因为未必所有的linux服务器都会去关闭防火墙,其实只需要保证,该服务中涉及到的端口号都开放了即可。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号