ZooKeeper集群搭建(四节点)


前言

最近在项目中使用了Kafka,但出现了一些预料之外的情况,所以想深入钻研一下,本来使用的公司的Kafka云产品,但一查看消息就搁那卡半天,极其拉跨,所以就自己在本地搭建一套

参考链接:


1.zookeeper安装概要流程

准备四个虚拟机 主机名改为node01~node04:

  1. 安装jdk,并设置javahome
    *, node01:
  2. 下载zookeeper zookeeper.apache.org
  3. tar xf zookeeper.*.tar.gz
  4. mkdir /opt/mashibing
  5. mv zookeeper /opt/mashibing
  6. vi /etc/profile export ZOOKEEPER_HOME=/opt/mashibing/zookeeper-3.4.6 export PATH= P A T H : PATH: PATH:ZOOKEEPER_HOME/bin
  7. cd zookeeper/conf
  8. cp zoo.sem*.cfg zoo.cfg
  9. vi zoo.cfg dataDir= server.1=node01:2888:3888
  10. mkdir -p /var/mashibing/zk
  11. echo 1 > /var/mashibing/zk/myid
  12. cd /opt && scp -r ./mashibing/ node02:pwd
  13. node02~node04 创建 myid
  14. 启动顺序 1,2,3,4
  15. zkServer.sh start-foreground
    Kafka目录

2.zookeeper常用命令

zkCli.sh
help
ls /
create /ooxx “”
create -s /abc/aaa
create -e /ooxx/xxoo
create -s -e /ooxx/xoxo
get /ooxx

3.zookeeper安装详细流程

概念

ZooKeeper集群是复制集群/主从集群(各个服务上数据相同),而非分片集群/无主集群,写是主leader节点写,查是都可以查(leader、follower)

主从集群肯定要考虑的问题:主是单点,挂掉不可用,不可靠,所以需要解决单点故障问题、

但zookeeper集群其实是高可用,因为它可以快速恢复leader

有两种运行状态,可用和不可用,区别在于leader是否挂掉

不可用恢复到可用应该越快越好

leader选举新leader的时间不到200ms

读写分离时读写比例为10:1时性能最高

客户端可以连接任意节点,但写一定是转发到leader节点去操作

不要把zookeeper当数据库使用:保证对外协调服务的块

节点:持久节点,临时节点,(都支持序列节点)

客户端连接到zookeeper会创建session,session和临时节点生命周期相同

zookeeper使用的弱一致性,最终一致性,过半则写成功通过,sync

安装流程

提前准备工作:

vim /etc/hosts

在这里插入图片描述

zoo.cfg文件

# The number of milliseconds of each tick
# 心跳ms,节点之间确认是否存活
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
# 当有follower追随leader,leader允许等待 2000*10=20s
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
# leader下发操作时,2000*5=10s,10s不回馈则有问题
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
# 快照持久化目录,/var目录存储数据
# /srv :主要用来存储本机或本服务器提供的服务或数据。(用户主动生产的数据、对外提供服务)
# /var :系统产生的不可自动销毁的缓存文件、日志记录。(系统和程序运行后产生的数据、不对外提供服务、只能用户手动清理)(包括mail、数据库文件、日志文件)
# /tmp :保存在使用完毕后可随时销毁的缓存文件。(有可能是由系统或程序产生、也有可能是用户主动放入的临时数据、系统会自动清理)
dataDir=/usr/local/apache-zookeeper-3.6.3-bin/data
# the port at which the clients will connect
# 客户端连接zookeeper的端口号
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
# zookeeper允许连接的最大客户端数,默认没有设置
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

# 配置zookeeper节点
# (行数/2)+1就是过半数
# 3888是如果leader挂掉或者刚启动没有leader,通过该端口投票选出leader
# 2888 选出leader后会启一个2888端口,其他接口连接该端口建立连接,之后都通过该端口号传递操作
# 如何选出leader,谦让,选一个ID最大的,但仍旧遵循过半
# 1234顺序就是3
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
server.4=node04:2888:3888


  1. 在conf目录下 cp zoo.sample.cfg zoo.cfg

    创建data目录用于zokeeper的持久化

    修改zoo.cfg文件内容

在这里插入图片描述

  1. 在第一个虚拟机执行如下命令:

在这里插入图片描述

  • s c p − r a p a c h e − z o o k e e p e r − 3.6.3 − b i n / 192.168.204.132 : ‘ p w d ‘ scp -r apache-zookeeper-3.6.3-bin/ 192.168.204.132:`pwd` scprapachezookeeper3.6.3bin/192.168.204.132:pwd

  • s c p − r a p a c h e − z o o k e e p e r − 3.6.3 − b i n / 192.168.204.133 : ‘ p w d ‘ scp -r apache-zookeeper-3.6.3-bin/ 192.168.204.133:`pwd` scprapachezookeeper3.6.3bin/192.168.204.133:pwd

  • s c p − r a p a c h e − z o o k e e p e r − 3.6.3 − b i n / 192.168.204.134 : ‘ p w d ‘ scp -r apache-zookeeper-3.6.3-bin/ 192.168.204.134:`pwd` scprapachezookeeper3.6.3bin/192.168.204.134:pwd

  1. 在data目录下,创建myid文件,echo 1 > ./data/myid

在这里插入图片描述

​ 然后各个节点在zookeeper目录内执行

echo 2  > ./data/myid

echo 3  > ./data/myid

echo 4  > ./data/myid
  1. 修改环境变量

    vim /etc/profile

在这里插入图片描述

. /etc/profile (或者source /etc/profile)

scp /etc/profile node02:/etc
scp /etc/profile node03:/etc
scp /etc/profile node04:/etc
  1. 查时间是否一致
date
  1. 启动
    zkServer.sh help(帮助命令)
    在这里插入图片描述

    zkServer.sh start(默认后台)

    zkServer.sh start-foreground(前台启动)

基本操作

zkCli.sh连接zookeeper
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
节点可以放入1MB数据且是二进制安全的
zookeeper的顺序体现在czxid上

cZxid Zookeeper为节点分配的Id
64位,如果前32位是0,一般默认不显示,前32位表示是哪个纪元,第几个leader,后32位是事务递增序列
cTime 节点创建时间

mZxid 修改后的id

mtime 修改时间

pZxid 最后一个子节点id

cversion 子节点的version

dataVersion 当前节点数据的版本号

aclVersion 权限Version

ephemeralOwner:临时节点的所有者(create使用-e参数,和会话生命周期相同),和执行zkCli.sh返回的会话id相同

dataLength 数据长度

numChildren 子节点个数

在这里插入图片描述

zookeeper四字命令功能描述
conf输出相关服务配置的详细信息。
cons列出所有连接到服务器的客户端的完全的连接 /会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。
dump列出未经处理的会话和临时节点。
envi输出关于服务环境的详细信息(区别于 conf命令)。
reqs列出未经处理的请求
ruok测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应。
stat输出关于性能和连接的客户端的列表。
wchs列出服务器 watch的详细信息。
wchc通过 session列出服务器 watch的详细信息,它的输出是一个与watch相关的会话的列表。
wchp通过路径列出服务器 watch的详细信息。它输出一个与 session相关的路径。

zookeeper3.5版本后提供了jetty默认后台管理8080端口,访问地址为:http://localhost:8080/commands/stat(http://192.168.204.134:8080/commands/stat)
http://192.168.204.134:8080/commands

在这里插入图片描述

临时节点测试

1.开一个客户端连接会创建session,显示sessionId:

Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, session id = 0x300000d81430000, negotiated timeout = 30000
临时节点伴随会话的断开而消失
创建sessionId的时候会将消息发给所有节点,所以会占用一个序列id,断开连接也需要同步,所以也消耗一个事务id
在这里插入图片描述

总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值