1.下载zookeeper
- 版本: 3.7.0
- 下载地址: https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
# 下载zookeeper
$ wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
2.解压
$ tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
3.创建data和logs目录
data主要用来存储节点数据,logs主要用来存储服务运行的日志。
# 创建 data 和 logs 目录
$ mkdir data logs
4.修改配置文件
zookeeper默认提供了zoo_sample.cfg
作为示例配置文件
我们将其复制一份改名为zoo.cfg
,去掉注释只保留配置项。
# 将原来的 zoo_sample.cfg 去除注释和空白行之后写入zoo.cfg
$ cat zoo_sample.cfg | grep -v "#" | grep -v "^$" > zoo.cfg
# 用vim编辑器打开 zoo.cfg 更新dataDir配置项 新增dataLogDir配置项
$ vim zoo.cfg
修改完成后保存退出
5.单机模式
如果只需要单机启动的话,启动之前先查看一下zookeeper服务是否已经启动?zookeeper的默认端口为2181是否被占用?启动之后再来验证一下
# 当前有无zookeeper相关进程
$ ps -ef | grep -v grep | grep zookeeper
# 当前2181端口是否被占用
$ netstat - tunlp | grep 2181
进入zookeeper的bin目录,然后运行zkServer.sh
启动
# 启动
$ ./zkServer.sh start
启动之后,看一下该服务器节点状态。
# 查看节点状态
$ ./zkServer.sh status
由上图可见现在是在单机模式下运行的
启动之后,那么如何停止zookeeper?
# 停止
$ ./zkServer.sh stop
6.集群模式
如果是配置集群模式的话,需要进行额外的配置;在这里我就用3个不同的端口来模拟三台机器,有条件的同学可以将相应的地址替换为不同主机的地址。
因为是在一台机器上启动三个zookeeper实例,所以需要三个配置文件分别是zoo_1.cfg
、zoo_2.cfg
、zoo_3.cfg
b并且这三个实例需要有各自的data和logs目录;分别为data1,losg1
、data2,losg2
、data3,losg3
6.1 进入zookeeper主目录创建各自的data和logos目录
# 将原来单机版的 data 改为 data1 , logs 改为 logs1
$ mv data data1
$ mv logs logs1
# 创建 data2 data3 和 logs2 logs3
$ mkdir data2 data3 logs2 logs3
6.2 进入zookeeper主目录下conf修改配置文件
# 将原来单机版的zoo.cfg 改为 zoo_1.cfg
$ mv zoo.cfg zoo_1.cfg
# 用vim编辑器打开 zoo.cfg 新增集群的配置
$ vim zoo_1.cfg
添加三条服务器的配置,格式为:
{服务器ID}={服务器IP地址}:{通信端口}:{投票端口}
服务器ID为集群中服务器的唯一标识,而服务器的IP地址后面有两个端口,用冒号分割;这两个端口分别是:
- 通信端口:zookeeper集群中服务器之间进行数据交换和同步的端口
- 投票端口:zookeeper服务器之间投票选举的端口
修改后的zoo_1.cfg
文件内容如下:
tickTime=2000
initLimit=10
syncLimit=5
# 数据目录
dataDir=/root/soft/apache-zookeeper-3.7.0-bin/data1
# 日志目录
dataLogDir=/root/soft/apache-zookeeper-3.7.0-bin/logs1
# 客户端连接的端口
clientPort=2181
# {服务器ID}={服务器IP地址}:{通信端口}:{投票端口}
server.1=192.168.31.195:2888:3888
server.2=192.168.31.195:2887:3887
server.3=192.168.31.195:2886:3886
将zoo_1.cfg
复制为zoo_2.cfg
和zoo_3.cfg
,并修改zoo_2.cfg
和zoo_3.cfg
中的dataDir、dataLogDir、clientPort
三个配置项
修改后的zoo_2.cfg
文件内容如下:
tickTime=2000
initLimit=10
syncLimit=5
# 数据目录
dataDir=/root/soft/apache-zookeeper-3.7.0-bin/data2
# 日志目录
dataLogDir=/root/soft/apache-zookeeper-3.7.0-bin/logs2
# 客户端连接的端口
clientPort=2182
# 服务器集群列表
server.1=192.168.31.195:2888:3888
server.2=192.168.31.195:2887:3887
server.3=192.168.31.195:2886:3886
修改后的zoo_3.cfg
文件内容如下:
tickTime=2000
initLimit=10
syncLimit=5
# 数据目录
dataDir=/root/soft/apache-zookeeper-3.7.0-bin/data3
# 日志目录
dataLogDir=/root/soft/apache-zookeeper-3.7.0-bin/logs3
# 客户端连接的端口
clientPort=2183
# 服务器集群列表
server.1=192.168.31.195:2888:3888
server.2=192.168.31.195:2887:3887
server.3=192.168.31.195:2886:3886
6.3 分别进入三个data目录创建myid
zookeeper集群中三个服务器需要分配一个编号,也是就和将zookeeper实例和配置中的服务器id对应,在zookeeper服务器选举的时候根据这个编号(服务器id)在配置文件中找到对应的服务器地址。
6.4 使用配置文件依次启动三个实例
# bin目录下依次启动三个实例
$ ./zkServer.sh start zoo_1.cfg
$ ./zkServer.sh start zoo_2.cfg
$ ./zkServer.sh start zoo_3.cfg
来验证下是否启动了
# 查看各节点状态
$ ./zkServer.sh status zoo_1.cfg
$ ./zkServer.sh status zoo_2.cfg
$ ./zkServer.sh status zoo_3.cfg
由上可见,三个节点都正常启动,节点1为Leader,其它两个节点为Follower,我们启动时并没有指定谁为Leader;由此可见zookeeper集群的leader确实时启动时选举产生的。