0、顺利完成安装需要的知识储备

1. 基础的Linux系统知识
2. 基本的Vim编辑器使用方法

1、系统环境

操作系统:Linux CentOS 7 64位
JDK版本:1.8.0_262

2、单机安装步骤

①下载并解压安装包

官网下载zookeeper最新稳定版本
在这里插入图片描述
在这里插入图片描述
复制上图红框中的地址,选择一个路径打开终端下载压缩包。这里我选择的是在/home/<username>/Software目录下安装
在这里插入图片描述
使用如下命令解压压缩文件

$ wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
$ tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz

②修改配置文件并启动单机节点

首先删除多余的压缩包

$ ll
总用量 12224
drwxrwxr-x 6 vm1 vm1      133 824 14:38 apache-zookeeper-3.6.3-bin
-rw-rw-r-- 1 vm1 vm1 12516362 413 03:06 apache-zookeeper-3.6.3-bin.tar.gz
$ rm apache-zookeeper-3.6.3-bin.tar.gz

接下来把zookeeper路径命改得简单一些

$ mv apache-zookeeper-3.6.3-bin zookeeper
$ ll
总用量 0
drwxrwxr-x 6 vm1 vm1 133 824 14:38 zookeeper

复制配置文件并启动zookeeper(这里直接改配置文件名字也可以,但是保险起见还是复制一份比较好)

$ cd zookeeper/conf
$ cp zoo_sample.cfg zoo.cfg
$ cd ../bin
$ sh zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/vm1/Software/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

等待一段时间后查看zookeeper运行状态(不要开启后立刻查看状态,因为zookeeper开启需要一定的时间)

$ sh zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/vm1/Software/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone

可以看到我们的zookeeper已经开启成功了,并且运行在单机(standalone)状态。

3、搭建zookeeper集群

如果在服务器端一台一台搭建zookeeper节点组成集群,需要多次重复单机安装步骤。这里为了简化操作,我们选择直接在一台物理机上复制虚拟机的方法创建集群。

①修改配置文件

在刚刚创建单机节点的虚拟机下,找到zookeeper的配置文件路径。这是我的

$ pwd
/home/vm1/Software/zookeeper/conf

然后更改zoo.cfg配置文件,在文件的末尾添加配置:

server.1=192.168.188.131:2888:3888
server.2=192.168.188.132:2888:3888
server.3=192.168.188.133:2888:3888

请注意,这里的三个ip地址都是我自己的虚拟机的地址。你需要根据实际情况配置你自己的虚拟机ip地址。
zookeeper需要用到三个端口,请确保它们没有被占用。它们的作用如下:

1、2181 : 对 client 端提供服务
2、2888 : 集群内机器通信使用
3、3888 : 选举 leader 使用(Leader监听此端口)

最后关闭虚拟机的防火墙。如果这里不是在root用户下操作的,则还需要输入root用户密码

$ systemctl stop firewalld

②克隆虚拟机

首先关闭虚拟机。然后在VMware Workstation中克隆两台相同配置的虚拟机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最好把虚拟机放在被克隆虚拟机相同的文件夹下,便于管理
在这里插入图片描述
点击完成等待克隆结束。用同样的方式再克隆一台VM3,这样我们就有三个节点了。

③启动集群

首先启动克隆机,可以看到用户名还是vm1,所以我们先更改克隆机用户名。
注销当前用户,用root用户登录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
打开终端,执行命令

$ usermod -l vm2 -d /home/vm2 -m vm1
$ reboot

更改用户名为vm2
在这里插入图片描述
在这里插入图片描述
更改系统语言为汉语,然后重启,更改用户组名

$ su
密码:
$ groupmod -n vm2 vm1

用同样的方式修改vm3。
然后检查一下两台克隆机的ip是否正确

$ ifconfig | grep inet
        inet 192.168.188.131  netmask 255.255.255.0  broadcast 192.168.188.255
        inet6 fe80::edef:af82:3e5a:a5d7  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::ed50:b27b:ded7:f31c  prefixlen 64  scopeid 0x20<link>
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255

我这里修改过虚拟机的配置(删除了一台虚拟机,并移动了虚拟机的位置),所以各克隆机的节点ip不是按顺序排列下来的。下面是我的三台虚拟机的ip地址

vm1 : 192.168.188.134
vm2 : 192.168.188.131
vm3 : 192.168.188.133

那么就要更改配置文件。把三台机器上的zoo.cfg末尾的配置改成下面这样

server.1=192.168.188.134:2888:3888
server.2=192.168.188.131:2888:3888
server.3=192.168.188.133:2888:3888

为三个节点分别配置myid,这里以节点1(ID为1)为例,2和3同理(ID为2和3)

vim /tmp/zookeeper/myid
#写入1
$ cat /tmp/zookeeper/myid
1

然后分别启动三台虚拟机上的zookeeper

$ sh zkServer.sh start

接下来查看三台机器的状态,应该能看到如下信息

#vm1
$ sh zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/vm1/Software/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
#vm2
$ sh zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/vm2/Software/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
#vm3
$ sh zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/vm3/Software/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader

如果你没有顺利地查看到上面的提示信息,有可能是因为你的虚拟机防火墙拦截了zookeeper端口的通信。只要先关闭zkServer,再用$ systemctl stop firewalld命令关闭防火墙后重启zkServer即可。
*如果仍然无法正确开启zookeeper集群模式,可以查看zookeeper/logs路径下的.out文件排查原因。

当然在你的机器上未必是vm3为leader,哪台机器作为leader是由选举结果决定的,这里面涉及到zookeeper的选举机制,在这里就不做展开了。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐