Kafka集群部署fabric1.4解释以及一些错误总结

Kafka集群部署fabric1.4解释以及一些错误总结

闲谈:一直没啥空去整这个集群,因为遇到的问题太多了。目前我教程都是在《灵龙博客园》的基础上进行修改的,但有一个很致命的缺点就是,首先我们在单机部署那一块使用的是fabric1.4,是官方第一个长期稳定维护的版本,而他的博客教程虽然也是1.4版本,但具体版本是有区别的,我为什么不一开始就按照他的版本来,是因为按照我的教程来的话,一些镜像版本是1.4.6,但他的不是,还是版本较老的1.4.1还是1.4.2来着,记不清了,但我其实做编码的大家应该都知道有时候一个系统比较稳定,也许你升级之后就是一大堆报错;


其次,还有一个问题就是,他的教程跟着一步一步来,大部分是没问题的,但是是真的没有多余的解释啊!有些跟着敲了你还是不明白其中的原理,他也没说他遇到的bug,你看他的教程一步步都是对的,结果你自己来就是会出很多问题。真的很蛋疼。所以就有了这个帖子(还有就是我在构建的时候遇到的一些问题记录)


启动集群

我相信这个问题是最重要的一个问题,也是大家都会遇到的一个问题。很多时候你在这一步出错了,但如果你按照博客当中的流程来操作的话,你是绝对不会第一时间发现问题的出现的,你往往会在启动peer节点的时候,会发现我怎么又启动不了了,我怎么又创建不了channel了,我怎么看到说连接不上order0.example.com了,很正常,因为你根本不知道这个过程到底是出了什么问题。

证书问题

首先,第一个证书问题。这就是我要吐槽的第一个版本问题,报错信息如下:

0 sub-policies were satisfied, but this policy requires 1 of the 'Admins' sub-policies to be satisfied

在这里插入图片描述
在这里插入图片描述
第一张图是我自己写的配置文件,第二张图是灵龙博客园给出的生成证书文件。大家很轻松就能发现问题。是的,版本不一样,但是这一步你不去更改的话,你在后面内一段时间内步骤是不会出任何错误的,等到出错误的时候你就得从头开始。
我们在教程中可以知道,这个配置文件是为了生成证书而编写的,包括你有哪些组织啊,有哪些角色啊。 大家这里如果仔细就可以发现,在配置两个org组织的时候:
在这里插入图片描述
我们这里是写了各种权限的,哪些人可以读,哪些节点可以写,致命的问题就来了,上面版本是不一样的。我记得我在单机部署的时候说过1.4.3是一个分水岭,这里策略哪些他也都更改了,如果在目前我们1.4.6的镜像版本的条件下,使用之前老的策略是不行的,所以我在这把版本修改了一下,否则的话,在开启peer节点之后,试图创建channel的时候,你就会收到报错信息,提示你没有admin权限。这里你没有任何办法,只能关掉删除所服务器上正在运行的容器,并且删除所有服务器上面的证书以及通道配置文件哪些,改用更新了版本的配置文件并且重新生成新的证书文件发送到各个服务器,然后依次运行。

集群启动问题

这里我遇到的问题,其实说到底应该是虚拟机的问题。我电脑内存是16G,新建了8台虚拟机,为保持以前服务器的配置,一核2G,所以内存在8台一起开的情况下就真的很卡,你想想电脑还得开其他的,还得运算虚拟机的内存情况,那卡死是经常的事情,或者虚拟机直接超时无响应。这里我虽然写了8台虚拟机,有四个peer节点,但是在实际的教程中,我两个org分别只开了一个节点机器,否则真的会崩溃,当然如果有钱买8台服务器,或者内存配了32G的有钱大佬请忽略我这句话。与前面四台服务器相比,peer节点的集群并不是那么地重要,因为kafka集群的核心是在那前面四台服务器上,后面peer虽然有证书,但它其实也可以不干事,就比如我们几个peer加入了一个组(配置文件里面写了的),组内的任务我们都是可以去做的,但有些peer是摸鱼的,甚至压根没有启动(只启动一个peer),我启动的peer是可以完成我该干的事情,与其他没开机的peer没有关系,它不像前面那构成zookeeper、kafka、orderer的服务器一样必须得同时开启,大家都得一起干活,一个挂掉整个集群都摆烂。

  • 访问权限问题
    在这里由于整体虚拟机都是按照镜像来整的,肯定是没有云服务器那种什么小工具都安装好的方便,先建议大家安装net-tools以及Telnet这两个工具,挺有用的。
    在我尝试创建channel的时候,有时候也会遇到这个问题:
Endorser and orderer connections initialized Got status: &{BAD_REQUEST}

(这里你就应该想到是集群出问题了)
或者他会显示连接order0.example.com连接不到,我找不到错误日志了,但相信大家能看得懂那几句英文错误。

Cannot set up producer = kafka: client has run out of available brokers to talk to

(这个时候就该知道是kafka问题是没有连接的了)

Cannot open channel to * at election address zookeeper1:3888

(这个问题就是困扰我最久的一个问题,zookeeper互相访问被拒绝,导致集群永远无法构成)

集群这里还是统一一个最根本的要求:遇到这种问题,先去集群所在服务器查看当前运行的docker:

docker ps -a

加上-a,显示已经寄了的docker,很多时候你就会发现这个时候orderer节点已经是关闭了的,但是很意外的是大家应该都会发现kafka和zookeeper容器都还是开着的,对此可能会有些疑惑,但其实这里orderer挂掉是因为kafka出问题,kafka出问题是zookeeper出问题,一环扣一环的,所以这也就是为什么启动的时候一定得按照zookeeper 到kafka再到orderer节点的原理。

言归正传,先说说这一系列的问题,归根结底上面那所有的报错其实都是zookeeper出问题,和我们学java的一样,往往报错信息一大堆就看最下面错误at是在哪。这里我是使用的虚拟机缘故,针对于使用服务器的人可能还得考虑安全组的问题。虽然我是关闭了zookeeper1的防火墙,但我使用netstat查看3888端口确实是运行任何ip进行访问,但是在其他服务器用telnet去访问端口就会被拒绝。这个时候在zookeeper1服务器上面只能打开防火墙,将3888端口给永久开放(添加到那个上面zone里)这一步还请大家自行百度,有很多博文的,关于为什么关闭了防火墙他还是不放行3888端口,我也不知道,真的是很神奇。

  • 启动docker错误
docker-compose up:ERROR: Encountered errors while bringing up the project

偶尔会出现这个错误,原因暂且不明。解决方法很简单,重启docker服务就行:

docker-compose down
docker-compse up

这里只是说了这些集群启动遇到的问题,但我相信这一步是如何排查出来才是大家应该学习的,并且如何去理解这几个docker什么什么up了之后到底干了些什么事情。这也是本文的重点。

docker-compose -f docker-compose-zookeeper.yaml up -d
docker-compose -f docker-compose-kafka.yaml up -d
docker-compose -f docker-compose-orderer.yaml up -d

短短三句话,屏幕上也不会显示过多,这是因为我们在后面加了个-d, 这是不输出日志的意思,其实不建议这么做,因为万一zookeeper这种报错了,你看他还是启动,但实际并没有连接到一起。
所以我们来看看正常的成功流程,这些日志一般会输出哪些东西:你就会看到他们都是在一直互相尝试发送连接请求,然后收到ACK,然后选举出leader:

docker-compose -f docker-compose-zookeeper.yaml up

在这里插入图片描述
这是zookeeper0那台机器的情况,我们转过来去看看zookeeper1和zookeeper2的情况:
在这里插入图片描述
在这里插入图片描述
在zookeeper2这里收到了前面两台机器发过来的ack确认信息,所以这个时候ctrl+z退出日志查看,然后我们去zookeeper2那天服务器里,进到容器内部看一看情况:

docker exec -it zookeeper2 bash

然后进去容器,里面有个bin文件夹,包含了很多的可运行脚本,我们简单用其中一个看看状态:

zkServer.sh status

在这里插入图片描述
可以看到这里zookeeper2就是三个zookeeper推选出来的leader了,那么很明显剩下的那两台都是跟随者:
在这里插入图片描述
这个时候日志就一般不动了,除非你进行后续操作,当然如果这个时候出了问题就会一直有日志说在尝试连接什么什么的,然后我们进行下一步。

docker-compose -f docker-compose-kafka.yaml up 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个时候就差不多表示kafka集群也启动了,一般不会打印新的日志,有时候或多或少会有,但我箭头所指那四个最关键的日志有就行了。

最后我们就启动order:

docker-compose -f docker-compose-orderer.yaml up

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
日志都是一样的,这个时候集群算是成功构建起来了。


大概要讲的过程就是这么多,主要是集群在这里就算是启动起来了,后续的操作就跟着教程走,这一步算是解释一下那几行命令,也顺便教一下怎么去发现bug,因为搭建这个东西你解决问题的唯一途径就是看日志文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值