赞
踩
Linux 系统如何部署 zookeeper集群?
linux 系统、JDK8、zookeeper 压缩包(bin-tar.gz)。
由于zookeeper 是基于 Java 语言的,因此安装 zookeeper 必须先安装好JAVA(JDK),这里我们安装常用的JDK8。
注意:对于 linux 系统上安装 JDK8 感兴趣的小伙伴,可以参考一下文章:
Linux 安装 JAVA(JDK)_Stephen·You的博客-CSDN博客
版本很多不用担心选择哪个,我们直接点击 stable/ (稳定的)文件夹:
这里要注意如果你选择的版本(这里我下载的是 apache-zookeeper-3.6.3-bin.tar.gz)目录下,出现了两种压缩包(tar.gz):
一种是容量比较大的(如12M),名字以 -bin.tar.gz 结尾的,例如上图中红色标记的压缩包,是我们要下载的;
另一种是容量小的(如3.2M),名字以 .tar.gz 结尾的,例如上图中蓝色标记的压缩包,不是我们要下载的。
先新建一个目录,如 zookeeper-cluster:
- # 进入自定义目录路径,用于存放zookeeper服务,如/home/thp/public
- cd /home/thp/public
-
- # 创建文件夹(目录),如zookeeper-cluster
- mkdir zookeeper-cluster
zookeeper
压缩包到服务器上传zookeeper
压缩包到zookeeper-cluster
文件夹下:
- # 进入zookeeper-cluster目录路径
- cd /home/thp/public/zookeeper-cluster
- # 解压 zookeeper压缩包
- tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz
由于要搭建zookeeper集群,所以为了区分,我们对解压后的文件夹进行重命名:
- # 重命名为 zookeeper-3.6.3-1
- mv apache-zookeeper-3.6.3-bin zookeeper-3.6.3-1
新建 logs目录 和 data目录,分别用来存放 日志 和 数据:
- # 进入 zookeeper-3.6.3-1目录
- cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-1
-
- #创建 logs 和 data 目录
- mkdir logs data
进入 conf目录后可以看见 zoo_sample.cfg配置文件:
- # 进入 conf目录
- cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-1/conf
将 zoo_sample.cfg 复制一份并命名为 zoo.cfg。
- # 复制一份并命名为 zoo.cfg
- cp zoo_sample.cfg zoo.cfg
这里说一下为什么要命名为 zoo.cfg。
是因为 zookeeper 的启动脚本 zkServer.sh 中,使用了 zkEnv.sh 脚本文件:
启动脚本 zkServer.sh:
zkEnv.sh 脚本:
可以看到:
这里是使用到了 conf 目录下的一个名为 zoo.cfg 的配置文件,而不是 zoo_sample.cfg。
- # 修改配置
- 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个服务实例),如:
- server.1=服务器ip:2881:3881
- server.2=服务器ip:2882:3882
- server.3=服务器ip:2883:3883
server.1=192.168.16.230:2881:3881 的各参数含义如下:
server.实例ID=服务器IP:zk服务之间通信端口:zk服务之间投票选举端口
修改后,内容如下,:wq 保存并退出:
在 2.5 中创建的 data 目录下创建 myid数据文件:
- # 进入自定义数据目录
- 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):
- # 创建 myid文件
- mkdir myid
-
- # 编辑 myid文件,写入1
- vi myid
2、由于该文件是文本文件,所以可以使用echo 命令,在创建的同时写入数据:
- # 创建 myid文本文件,同时写入当前服务实例ID(1)
- echo 1 > myid
这里强烈推荐使用方法2,简单快捷!!!
创建后,myid数据文件的内容如下:
至此服务实例1就完成了!!!
这里说一下为什么要命名为 myid。因为 zookeeper 的启动脚本 zkServer.sh 中,使用到了名为 myid的数据文件:
myid数据文件的作用是:文件中记载了当前服务实例的id,也就是上面配置服务实例时的实例ID:
server.实例ID=实例IP:zk服务之间通信端口:zk服务之间投票选举端口
实例ID可用于zookeeper识别和管理当前服务实例,以便服务实例之间的通信。
有了上面已经配置好的服务实例1,接下来部署其他服务实例就容易多了:
1、复制 zookeeper-3.6.3-1 文件夹到 /home/thp/public/zookeeper-cluster 目录下 ,命名为 zookeeper-3.6.3-2 :
- # 进入 zookeeper-cluster目录路径
- cd /home/thp/public/zookeeper-cluster
-
- # 复制 zookeeper-3.6.3-1 并命名为 zookeeper-3.6.3-2
- 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文件,需要修改的内容如下:
- dataDir=/home/thp/public/zookeeper-cluster/zookeeper-3.6.3-2/data
- dataLogDir=/home/thp/public/zookeeper-cluster/zookeeper-3.6.3-2/logs
- clientPort=2182
修改后内容如下:
3、修改 /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-2/data 目录下的 myid文件,修改后内容如下:
4、同样的,仿照上面的1、2、3、步骤再配置一个服务实例:
- # 进入 zookeeper-cluster目录路径
- cd /home/thp/public/zookeeper-cluster
-
- # 复制 zookeeper-3.6.3-1 并命名为 zookeeper-3.6.3-3
- cp -r zookeeper-3.6.3-1 zookeeper-3.6.3-3
至此3个服务实例都安装并配置完成!!!
开放上面 2.7 中配置的所有端口号,如下:
2181、2182、2183
2881、2882、2883
3881、3882、3883
依次执行一下代码:
- # 开放端口
- sudo firewall-cmd --zone=public --add-port=2181/tcp --permanent
- sudo firewall-cmd --zone=public --add-port=2182/tcp --permanent
- sudo firewall-cmd --zone=public --add-port=2183/tcp --permanent
- sudo firewall-cmd --zone=public --add-port=2881/tcp --permanent
- sudo firewall-cmd --zone=public --add-port=2882/tcp --permanent
- sudo firewall-cmd --zone=public --add-port=2883/tcp --permanent
- sudo firewall-cmd --zone=public --add-port=3881/tcp --permanent
- sudo firewall-cmd --zone=public --add-port=3882/tcp --permanent
- sudo firewall-cmd --zone=public --add-port=3883/tcp --permanent
-
- # 重启防火墙
- sudo firewall-cmd --reload
-
- # 查看开放端口列表
- sudo firewall-cmd --zone=public --list-ports
查看端口开放列表,可以看见已经以上端口开放成功:
- # 启动 服务实例1
- cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-1/bin
- ./zkServer.sh start
-
- # 启动 服务实例2
- cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-2/bin
- ./zkServer.sh start
-
- # 启动 服务实例3
- cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-3/bin
- ./zkServer.sh start
- # 查看 服务实例1 状态
- cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-1/bin
- ./zkServer.sh status
-
- # 查看 服务实例2 状态
- cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-2/bin
- ./zkServer.sh status
-
- # 查看 服务实例3 状态
- cd /home/thp/public/zookeeper-cluster/zookeeper-3.6.3-3/bin
- ./zkServer.sh status
出现如下信息,则表示zookeeper集群搭建完成!!!
如果在查看服务实例状态时,出现如下报错:
则需要注意以下几点:
1、请保证严格按照本文章的步骤执行,仔细查看各配置是否有误!
2、因为是配置了集群,所以需要把所有服务实例都启动了,再去查看服务状态;如果没有起完所有的服务实例,就查看状态,也会报错,报错原因也可以通过查看logs下的日志 zookeeper-thp-server-NewGIS-GRCTest.out 文件可以查看服务运行日志:
3、网上会提到说关闭防火墙,但其实不完全正确,因为未必所有的linux服务器都会去关闭防火墙,其实只需要保证,该服务中涉及到的端口号都开放了即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。