Zookeeper集群搭建入门

Zookeeper架构

学习Zookeeper前,得先俯览全局,了解Zookeeper集群的部署模式,看Zookeeper架构设计

C:\Users\39629\AppData\Roaming\Typora\typora-user-images\image-20210123190957993.png
Server可以理解为集群中的节点,在Zookeeper集群中,有一个Server是Leader

在这里插入图片描述

集群节点角色分配

  • leader(领导者):负责进行投票的发起和决议,更新系统状态
  • learner(学习者)
    • follower(跟随者)接收client请求,参与选主投票
    • observer(观察者)接收client请求,不参与选主投票,具有扩展性
      • 通过配置observerMasterPort=2191创建一个监听端口2191的ObserverMaster线程
  • client(客户端)

本文介绍在单机Centos7上搭建2个Server组成的集群(单机集群),没多余的服务器了…55555~

Zookeeper下载

官方下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/

腾讯镜像仓库:https://mirrors.cloud.tencent.com/apache/zookeeper/

apache镜像仓库:http://archive.apache.org/dist/zookeeper/

我选择的是腾讯镜像的zookeeper-3.6.2版本

在这里插入图片描述

这里有两个gz,只需要下其中的一个就行了,我选择的是:apache-zookeeper-3.6.2-bin.tar.gz

在这里插入图片描述

下载完成后解压

tar xzf apache-zookeeper-3.6.2-bin.tar.gz

在这里插入图片描述

Zookeeper启动

一台服务器部署两个节点,将下载好的zookeeper文件夹copy两份

cp -r apache-zookeeper-3.6.2-bin/ apache-zookeeper-3.6.2-bin-server1/
cp -r apache-zookeeper-3.6.2-bin/ apache-zookeeper-3.6.2-bin-server2/
在这里插入图片描述

注意事项

文件解压后,因为zookeeper启动默认读取的配置文件是zoo.cfg,但解压后,conf内配置文件是zoo_sample.cfg

直接启动会报错,有3种解决方式:

进入 apache-zookeeper-3.6.2-bin-server1

  1. 修改启动脚本,把默认读取的配置文件改为zoo_sample.cfg(不推荐)

vim apache-zookeeper-3.6.2-bin-server1/bin/zkEnv.sh

在这里插入图片描述

找到 ZOOCFG=“zoo.cfg” 修改为ZOOCFG=“zoo_sample.cfg”

  1. 重命名zoo_sample.cfg文件名为zoo.cfg

mv conf/zoo_sample.cfg conf/zoo.cfg

  1. 复制文件并重新命名(推荐)

p conf/zoo_sample.cfg conf/zoo.cfg

修改配置

server1配置文件:
apache-zookeeper-3.6.2-bin-server1/conf/zoo.cfg

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/data/zookeeper/server1/data
dataLogDir=/data/zookeeper/server1/dataLog
clientPort=2181
server.1=0.0.0.0:2888:3888
server.2=0.0.0.0:2889:3889

server2配置文件:
apache-zookeeper-3.6.2-bin-server2/conf/zoo.cfg

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/data/zookeeper/server2/data
dataLogDir=/data/zookeeper/server2/dataLog
clientPort=2191
server.1=0.0.0.0:2888:3888
server.2=0.0.0.0:2889:3889

参数说明

  • tickTime:发送心跳的间隔时间,单位:毫秒
  • initLimit:Follower连接到Leader,失败后单次等待时间。等待总时长:tickTime * initLimit
  • syncLimit:Follower发送数据到Leader,失败后单次等待时间。等待总时长:tickTime * initLimit
  • dataDir:存储快照日志的目录
  • dataLogDir:存储事务日志的目录
  • clientPort:监听客户端连接的端口
  • server.N=H:P:B
    • N:服务器编号
    • H:服务器地址
      • localhost或127.0.0.1
      • 0.0.0.0:不建议,不安全
    • P:服务器相互通讯的端口
    • B:P不可用时的备用端口号

因为我是一台服务器部署两个节点,所以P不能相同,为了方便连接,H也使用了0.0.0.0

单机集群与分布式集群的配置区别

  • 单机集群
    • clientPort不同
    • H相同
    • P、B不相同
    • server.1=IP:2888:3888
      server.2=IP:2889:3889
  • 分布式集群
    • clientPort相同
    • H不相同,分别是各个服务器的IP
    • P、B相同
    • server.1=IP1:2888:3888
      server.2=IP2:2888:3888

启动Zookeeper集群

Zookeeper常用命令

  • 启动ZK服务: sh bin/zkServer.sh start
  • 查看ZK服务状态: sh bin/zkServer.sh status
  • 停止ZK服务: sh bin/zkServer.sh stop
  • 重启ZK服务: sh bin/zkServer.sh restart

启动server1

sh apache-zookeeper-3.6.2-bin-server1/bin/zkServer.sh start

启动失败,报错信息:

/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/gz/apache-zookeeper-3.6.2-bin-server1/bin/../conf/zoo.cfg
Starting zookeeper ... FAILED TO START

报错信息太粗略,需要查看报错日志详情,日志文件在apache-zookeeper-3.6.2-bin-server1/logs里

cat apache-zookeeper-3.6.2-bin-server1/logs/zookeeper-root-server-iZ8vbbuidiovq4xf9ykpfkZ.out

[root@iZ8vbbuidiovq4xf9ykpfkZ gz]# cat apache-zookeeper-3.6.2-bin-server1/logs/zookeeper-root-server-iZ8vbbuidiovq4xf9ykpfkZ.out 
2021-01-23 20:55:28,260 [myid:] - INFO  [main:QuorumPeerConfig@174] - Reading configuration from: /data/gz/apache-zookeeper-3.6.2-bin-server1/bin/../conf/zoo.cfg
2021-01-23 20:55:28,267 [myid:] - INFO  [main:QuorumPeerConfig@460] - clientPortAddress is 0.0.0.0:2181
2021-01-23 20:55:28,267 [myid:] - INFO  [main:QuorumPeerConfig@464] - secureClientPort is not set
2021-01-23 20:55:28,267 [myid:] - INFO  [main:QuorumPeerConfig@480] - observerMasterPort is not set
2021-01-23 20:55:28,268 [myid:] - INFO  [main:QuorumPeerConfig@497] - metricsProvider.className is org.apache.zookeeper.metrics.impl.DefaultMetricsProvider
2021-01-23 20:55:28,277 [myid:] - WARN  [main:QuorumPeerConfig@729] - No server failure will be tolerated. You need at least 3 servers.
2021-01-23 20:55:28,277 [myid:] - ERROR [main:QuorumPeerMain@98] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing /data/gz/apache-zookeeper-3.6.2-bin-server1/bin/../conf/zoo.cfg
        at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:198)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:124)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:90)
Caused by: java.lang.IllegalArgumentException: myid file is missing
        at org.apache.zookeeper.server.quorum.QuorumPeerConfig.checkValidity(QuorumPeerConfig.java:812)
        at org.apache.zookeeper.server.quorum.QuorumPeerConfig.setupQuorumPeerConfig(QuorumPeerConfig.java:683)
        at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:507)
        at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:194)
        ... 2 more
Invalid config, exiting abnormally
2021-01-23 20:55:28,279 [myid:] - INFO  [main:ZKAuditProvider@42] - ZooKeeper audit is disabled.
2021-01-23 20:55:28,280 [myid:] - ERROR [main:ServiceUtils@42] - Exiting JVM with code 2

日志的关键信息是:java.lang.IllegalArgumentException: myid file is missing

缺失文件: myid

原因: zookeeper集群模式下,server需要读取myid文件的内容来标识该节点唯一

解决方案: 在${dataDir}下分别创建myid文件,内容为1或2这种数字就行了

指令:

cat > /data/zookeeper/server1/data/myid << E

[root@iZ8vbbuidiovq4xf9ykpfkZ data]# cat > /data/zookeeper/server1/data/myid << E
> 1
> E

[root@iZ8vbbuidiovq4xf9ykpfkZ data]# cat > /data/zookeeper/server2/data/myid << E
> 2
> E

再次启动

指令:

sh apache-zookeeper-3.6.2-bin-server1/bin/zkServer.sh start

[root@iZ8vbbuidiovq4xf9ykpfkZ gz]# sh apache-zookeeper-3.6.2-bin-server1/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/gz/apache-zookeeper-3.6.2-bin-server1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

[root@iZ8vbbuidiovq4xf9ykpfkZ gz]# sh apache-zookeeper-3.6.2-bin-server2/bin/zkServer.sh start 
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/gz/apache-zookeeper-3.6.2-bin-server2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

启动成功,查看集群状态

指令:

sh apache-zookeeper-3.6.2-bin-server1/bin/zkServer.sh status

[root@iZ8vbbuidiovq4xf9ykpfkZ gz]# sh apache-zookeeper-3.6.2-bin-server1/bin/zkServer.sh status 
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/gz/apache-zookeeper-3.6.2-bin-server1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

[root@iZ8vbbuidiovq4xf9ykpfkZ gz]# sh apache-zookeeper-3.6.2-bin-server2/bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/gz/apache-zookeeper-3.6.2-bin-server2/bin/../conf/zoo.cfg
Client port found: 2191. Client address: localhost. Client SSL: false.
Mode: leader

server1:

  • 监听地址:2181
  • 角色:follower

server2:

  • 监听地址:2191
  • 角色:leader

到此单机集群搭建结束,希望本文能给你有所收获~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值