- 前言
- 一、ZooKeeper集群搭建
- 1.zookeeper安装
- 2.zookeeper常用命令
- 3.详细流程
- 概念
- 安装流程
- 基本操作
- 临时节点测试
- 二、Kafka集群搭建
- 1.二级标题
- 总结
前言
最近在项目中使用了Kafka,但出现了一些预料之外的情况,所以想深入钻研一下,本来使用的公司的Kafka云产品,但一查看消息就搁那卡半天,极其拉跨,所以就自己在本地搭建一套
参考链接:
一、ZooKeeper集群搭建 1.zookeeper安装
准备四个虚拟机 主机名改为node01~node04:
- 安装jdk,并设置javahome
*, node01: - 下载zookeeper zookeeper.apache.org
- tar xf zookeeper.*.tar.gz
- mkdir /opt/mashibing
- mv zookeeper /opt/mashibing
- vi /etc/profile export ZOOKEEPER_HOME=/opt/mashibing/zookeeper-3.4.6 export PATH= P A T H : PATH: PATH:ZOOKEEPER_HOME/bin
- cd zookeeper/conf
- cp zoo.sem*.cfg zoo.cfg
- vi zoo.cfg dataDir= server.1=node01:2888:3888
- mkdir -p /var/mashibing/zk
- echo 1 > /var/mashibing/zk/myid
- cd /opt && scp -r ./mashibing/ node02:pwd
- node02~node04 创建 myid
- 启动顺序 1,2,3,4
- zkServer.sh start-foreground
zkCli.sh
help
ls /
create /ooxx “”
create -s /abc/aaa
create -e /ooxx/xxoo
create -s -e /ooxx/xoxo
get /ooxx
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
-
在conf目录下 cp zoo.sample.cfg zoo.cfg
创建data目录用于zokeeper的持久化
修改zoo.cfg文件内容
- 在第一个虚拟机执行如下命令:
-
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` scp−rapache−zookeeper−3.6.3−bin/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` scp−rapache−zookeeper−3.6.3−bin/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` scp−rapache−zookeeper−3.6.3−bin/192.168.204.134:‘pwd‘
- 在data目录下,创建myid文件,echo 1 > ./data/myid
然后各个节点在zookeeper目录内执行
echo 2 > ./data/myid echo 3 > ./data/myid echo 4 > ./data/myid
-
修改环境变量
vim /etc/profile
. /etc/profile (或者source /etc/profile)
scp /etc/profile node02:/etc scp /etc/profile node03:/etc scp /etc/profile node04:/etc
- 查时间是否一致
date
-
启动
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:
二、Kafka集群搭建 1.二级标题Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, session id = 0x300000d81430000, negotiated timeout = 30000
临时节点伴随会话的断开而消失
创建sessionId的时候会将消息发给所有节点,所以会占用一个序列id,断开连接也需要同步,所以也消耗一个事务id
总结



