最近自己开发springcloud项目,需要部署zookeeper集群,这里顺便记录一下部署过程。

准备环境:

  1. 多台服务器环境,需要提前安装jdk。(我这是使用的是VM虚拟机服务器,只需要在一台服务器上安装好jdk环境,然后克隆虚拟机即可。)
  2. 提前下载zookeeper压缩包。

接下来进行部署吧!

1.上传zk压缩包并解压

使用scp命令将本地的zk包上传到虚拟机指定路径下:

scp apache-zookeeper-3.5.7-bin.tar.gz root@192.168.59.xxx:/home/yq/myzookeeper

解压: 

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

将文件夹apache-zookeeper-3.5.7-bin修改为zookeeper-3.5.7(只是为了简洁,非必须)

mv apache-zookeeper-3.5.7-bin zookeeper-3.5.7

2.配置服务器编号

zk集群通过服务器编号建立联系,相互通信。

(1)在zookeeper-3.5.7目录下创建zkData目录

mkdir zkData

(2)在zkData目录下创建myid文件,并写入一个数字,(任何数字都行,是zk服务器编号,唯一标识)这里我写的是1.

vi myid
1

esc退出编辑,:wq保存退出。

(3)将zookeeper-3.5.7目录同步到其他服务器

xsync zookeeper-3.5.7

修改其他服务器的myid文件内容,我这里部署了3台服务器,另外2台的myid内容分别改为23

3.修改zoo.cfg配置文件

(1)将zoo_sample.cfg的名称修改为zoo.cfg

mv zoo_sample.cfg zoo.cfg

(2)打开zoo.cfg并修改

vim zoo.cfg

将dataDir修改如下:

dataDir=/home/yq/myzookeeper/zookeeper-3.5.7/zkData

(3)在zoo.cfg增加集群配置

###################cluster################
server.1=192.168.59.128:2888:3888
server.2=192.168.59.129:2888:3888
server.3=192.168.59.130:2888:3888

配置参数解析:

server.A=B:C:D

A 是一个数字,表示这个是第几号服务器;
集群模式下配置一个文件 myid, 这个文件在 dataDir 目录下,这个文件里面有一个数据
就是 A 的值, Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比
较从而判断到底是哪个 server。
B 是这个服务器ip;
C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;
D 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的
Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

(4)同步zoo.cfg文件到其他服务器

xsync zoo.cfg

4.启动zk集群

分别启动zk服务器

bin/zkServer.sh start

查看启动状态

成功状态:

leader状态:

[root@virtual01 zookeeper-3.5.7]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/yq/myzookeeper/zookeeper-3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

follower状态:

[root@virtual01 zookeeper-3.5.7]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/yq/myzookeeper/zookeeper-3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

失败状态:

[root@virtual01 zookeeper-3.5.7]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/yq/myzookeeper/zookeeper-3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.

出现上面显示的错误,有3个可能:

(1)只启动一台zk服务器,会出现上述失败状态,这是正常的。因为其他zk服务器没启动,无法建立通信。请启动其他zk服务器。

(2)服务器防火墙没有关闭,请关闭所有服务器的防火墙。

(3)请检查dataDir路径是否正确,能确保找到myid文件。zk启动会读取zkData下的myid文件的内容,如果dataDir路径找不着,zk集群服务器都会变成单机,所有zk服务器启动后并没有leader和follower,查看zk状态都会有如上失败提示。

如有不同见解,请指正!!!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐