ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

FISCO BCOS 3.0 pro版部署实战:从环境准备到节点搭建全流程

FISCO BCOS 3.0 pro版部署实战:从环境准备到节点搭建全流程 1. 项目概述与pro版定位拆解1.1 FISCO BCOS 3.0到底是什么FISCO BCOS是国内开源联盟链生态里使用面很广的一个底层平台3.0版本是一次彻底的重写从2.x时代的“节点即一切”变成了“模块化拆分”的架构。3.0把共识、同步、交易执行、存储这些核心模块拆得比较干净对外提供的服务也从单一的节点端口变成了RPC、Gateway、节点三层结构。这套设计让联盟链的部署方式变得灵活了很多可以根据业务规模去选不同的组合。pro版是3.0提供的三种部署形态之一。官方把部署形态划分为air版、pro版、max版分别对应轻量单机、中型生产、大规模分布式三种场景。air版适合开发学习一个二进制文件跑起来就是一条链pro版则是面向真实生产环境的基础形态把节点、网关、RPC服务拆成了独立进程可以做水平扩展max版则是把存储和调度进一步拆开支撑跨机房、大规模共识集群。实际接触下来绝大多数企业和项目组选择pro版做生产落地这也是目前社区里资料最多、踩坑案例最丰富的一种。这篇文章梳理的就是pro版的完整搭建过程从环境准备到节点启动、从配置调优到问题排查我会把我在实际部署中碰到的坑和验证过的操作一并写出来。如果你正在评估FISCO BCOS 3.0或者已经决定用pro版搭开发环境、测试环境那么这篇文章可以帮你少走不少弯路。1.2 为什么选择pro版而不是air或max很多第一次接触FISCO BCOS 3.0的同学会纠结版本选型。我的建议是如果只是本机跑通合约、看控制台输出air版足够如果要部署一个能被多个业务方调用、具备一定容错能力的链直接上pro版至于max版如果你的节点数确实超过两位数并且有独立运维团队再去考虑。pro版最适合的场景是“一套足够真实的联盟链环境”。它把节点进程、网关进程、RPC进程分开意味着你可以单独重启网关而不影响节点共识可以对RPC层做负载均衡可以把网关部署到不同的机器上这些都是air版做不到的。对于大多数联盟链项目来说pro版的组件粒度刚刚好不会像max版那样引入过多的部署复杂度。从学习成本来看pro版的架构概念也是理解3.0体系的最佳入口。搞懂pro版之后再看max版的调度器和存储分离会顺畅很多。我见过不少团队一上来就冲max版结果被一堆组件折腾得不行最后退回pro版老老实实跑业务。所以在正式环境前先花时间把pro版的搭建吃透是一个非常划算的投入。2. 搭建前的环境规划与准备工作2.1 硬件配置与操作系统要求pro版对机器的要求不低但也没到离谱的程度。官方推荐最低配置是4核8GB内存这个配置跑一个单机构建的四节点pro链会比较勉强启动没问题但后面跑压测或者频繁部署合约时会卡。我自己实际部署时用的是8核16GB跑四节点pro链加控制台、加一些合约交互整体还是比较从容的。操作系统方面Ubuntu 20.04、22.04、CentOS 7.9这些主流版本都是支持的。我推荐Ubuntu 22.04原因很简单Docker支持好、内核版本新、遇到问题网上资料多。CentOS 7.9虽然也能跑但内核偏老有时候会碰到存储驱动相关的报错需要额外处理。如果你手头只有CentOS建议先把内核升级到4.18以上再做部署。这里要特别注意一个概念pro版的一个节点指的是一个包含了共识、同步、交易执行逻辑的完整节点进程但它依赖独立的Gateway和RPC服务。所以在规划机器时不要以为“四个节点就要四台机器”实际上单台机器完全可以跑一套四节点链也可以把Gateway和RPC都放在同一台机器上。理解了这一点硬件规划就不会出大问题。2.2 Docker环境准备与镜像拉取pro版的节点、网关、RPC服务都是通过Docker容器运行的所以Docker环境是第一道关卡。安装Docker本身不复杂但有几个细节容易踩坑。一是Docker版本不能太老建议20.10以上太老的版本对网络插件和资源限制的支持不好会导致容器启动异常二是安装完成后一定要确认Docker守护进程开机自启否则机器重启后链就断了。我习惯在安装完Docker后顺手配置一下镜像加速因为FISCO BCOS的镜像托管在Docker Hub上直接拉取在有些网络环境下会比较慢。配置加速地址的方式各家云厂商不太一样这里不展开说但有一点要提醒加速地址配置后要执行systemctl daemon-reload和systemctl restart docker才能生效很多人就卡在这步改完配置不重启然后来回来去怀疑配置写错了。节点镜像主要涉及四个节点服务镜像、网关镜像、RPC服务镜像以及一个构建配置的镜像。实际搭建时可以用官方提供的一键构建脚本把镜像拉取和配置生成一起完成不需要手动逐个拉取。但如果你在离线环境部署就得提前在有网的机器上把镜像export出来再导入pro版依赖的镜像文件加起来不小离线部署时一定要提前准备好存储空间。2.3 目录规划与端口梳理在开始跑脚本之前我强烈建议先把目录结构和端口规划好。pro版部署时会生成一堆配置文件、证书文件、节点数据目录如果随便乱放后面找问题会非常痛苦。我习惯的统一目录结构是这样的所有内容放在一个固定的父目录下例如/data/fiscobcos下面按链名建子目录再在里面区分node、gateway、rpc三个子目录。每个子目录里挂载对应的容器数据卷。这样做的好处有三个备份方便直接打包父目录就行排查问题方便日志文件路径规则统一迁移方便把整个目录拷到新机器只要docker环境一致基本可以无缝拉起。端口规划方面要提前想清楚。pro版里节点之间通过channel端口通信默认是20200Gateway监听的是节点连接的端口默认30300RPC服务对外提供JSON-RPC接口默认8545。这三个端口是核心如果它们之间有重叠或者被系统其他进程占用容器起不来不说有时候起来了但日志里全是连接超时那才真是让人头大。我个人的习惯是在同一台机器上部署多个pro链比如一个开发链一个测试链时给每条链分配一个端口段偏移。比如第一条链用默认端口第二条链节点端口用20210、网关用30310、RPC用8555以此类推。这样做的好处是后续只需要通过端口就能区分不同链的流量排查问题时思路清晰很多。另外如果你要跨机器部署记得在云安全组和防火墙里把对应的网关端口和节点端口放通很多跨机器组链失败的问题最后查来查去都是防火墙拦了关键端口。3. pro版节点搭建完整实操流程3.1 获取安装包与一键构建配置FISCO BCOS 3.0提供了官方的build_chain.sh脚本这个脚本负责生成链配置、节点证书、创世区块等一大堆东西。pro版的一键构建是通过项目提供的BcosProBuilder工具或者配套脚本完成的它的作用就是把“初始化链配置”和“生成节点运行配置”这两件事封装起来让用户不用手动写那些又长又容易出错的配置JSON。我建议去官方文档或者GitHub仓库下载对应版本的构建脚本注意版本号要和你想部署的3.0.x版本保持一致。版本不一致会导致生成的配置和镜像不匹配最典型的报错就是容器起来后反复重启日志里出现version mismatch之类的字样。构建脚本的运行方式大致是指定链名、指定要生成的节点IP和端口、指定输出目录然后脚本会帮你生成证书和配置文件。这里的核心动作是“生成链配置”相当于初始化一条链的“基因”。同一个链的所有节点必须使用同一套链配置生成出来的证书和创世信息否则节点之间无法建立共识连接。我见过有人把四个节点用四次脚本分别生成结果四个节点各持一套证书怎么都组不成链折腾了半天这就是没搞懂“同一条链的配置必须一次生成”这个关键点。3.2 初始化节点、网关与RPC配置配置生成之后接下来是把配置文件分别放到node、gateway、rpc对应的目录里然后启动容器。这一步有经验的运维一眼就能看出设计逻辑节点目录里放的是节点证书和节点自身的配置文件网关目录里放的是网关证书和网关配置RPC目录里放的是RPC服务证书和配置。三者通过证书体系建立信任关系所以文件放错位置进程之间就互相不认。启动顺序上我建议先启动节点等节点日志打印出共识相关的正常输出后再启动网关最后启动RPC服务。这个顺序不是强制的但按照这个顺序排查问题时最简单先确保底层共识正常再看网关能不能转发消息最后才看RPC能不能对外提供接口。如果你一次性把所有容器都起来然后发现RPC调用不通你要排查的链路会一下子拉长。启动容器时可以用docker run逐条启动也可以用编排文件一次性启动。对于四节点的本机部署逐条启动其实也很快而且每个容器的日志可以单独查看。不过如果你要管理多个节点我建议还是写一个简单的shell脚本把启动命令固化下来这样后面重启环境时直接执行脚本就行不用每次敲一长串命令。启动完成后一定要做一次状态检查。节点是否正常看容器状态是不是Up还不够要看日志里是否出现了共识正常推进的输出。方法是进入容器查看日志或者通过docker logs跟踪节点容器最近输出。正常情况下节点日志里会有周期性的共识包输出数字在持续增长说明节点在正常出块和同步。这一步千万不能省很多所谓的“搭建成功”其实只是容器起来了节点根本没有进入共识状态。3.3 验证RPC服务与整体联通性节点正常之后验证RPC服务是比较直观的一项工作。RPC服务对外提供JSON-RPC接口你可以用命令行工具直接发一个HTTP请求测试连通性。最简单的测试方法是查看链的基本信息例如通过RPC接口获取区块高度。下面是我在部署完成后经常执行的验证命令走的是RPC接口查询最新区块高度curl -X POST http://127.0.0.1:8545 \ -H Content-Type: application/json \ -d {jsonrpc:2.0,method:eth_blockNumber,params:[],id:1}如果配置正常会返回一个包含十六进制数值的JSON响应比如{jsonrpc:2.0,result:0x10,id:1}表示当前区块高度是16。这个数字会随着链上交易而增长如果你连续执行两次发现返回的高度在变化说明整条链从共识到出块到RPC对外响应这个完整链路都是通的。除了RPC接口我还建议检查一下网关的健康状态。网关的作用是承接节点之间的P2P通信如果网关挂了节点间共识消息就传不出去链会陷入出块停滞的状态。检查网关是否正常主要是看网关日志里有没有和其他节点建立连接的记录。如果单机四节点部署启动后网关日志里应该能看到四条节点连接信息如果看不到说明节点配置和网关配置之间的对应关系有问题。4. 进阶配置与调优建议4.1 共识节点与观察节点的配置逻辑pro版的节点角色分为共识节点和观察节点。共识节点参与出块和投票观察节点只同步链上数据、不参与共识。这个设计非常实用因为很多业务方的诉求仅仅是读取链上数据或者在此之上做统计分析没必要让他们也跑一个共识节点增加整个链的复杂度。搭建时如果你用默认参数构建链生成出来的四个节点默认都是共识节点。要配置观察节点需要在构建配置或者启动配置中做角色声明。观察节点的证书体系和连接方式与共识节点一致只是共识模块被调整为不参与模式。这个配置对理解联盟链的权限模型非常有帮助实际业务中比较常见的部署结构是核心机构各跑一个共识节点业务应用方或者监管方跑观察节点。生产环境的容错性也要提前规划。单机四节点只是开发测试玩法。生产环境如果只有一台机器机器一挂整条链就没了这跟联盟链的初衷是相悖的。pro版支持把节点分散到多台机器上只要网络互通即可。多机部署时构建脚本指定的IP列表就是不同机器的IP每台机器上启动自己那部分的容器就行。要注意的是跨机器部署时证书的传递必须通过安全可靠的方式因为证书就是节点身份的凭证。4.2 关键配置参数与性能调优方向pro版的配置里有几个关键参数值得花时间研究。一个是出块间隔即节点多久尝试产出一个新块默认配置一般是1000毫秒或更低。这个参数直接影响链的吞吐和延迟如果你做一个面向终端用户的业务出块间隔太长会让用户体验变差但出块间隔太短又会增加节点间的通信压力。我的经验是先保持默认值跑通业务等到压测阶段再根据实际TPS和数据量慢慢调整。另一个是存储相关配置。pro版支持多种存储后端数据库的配置会影响数据落盘方式和读写性能。开发环境用默认的本地存储没什么问题生产环境建议根据团队的技术栈去选择合适的数据库方案。这里想提醒一点切换存储方案不是改个配置就完了一定要在搭建初期就想清楚因为链上数据一旦跑起来迁移成本会变得很高。还有一个值得关注的是日志级别。pro版默认的日志比较详细文件增长速度快尤其是在节点长时间运行的情况下。如果你不打算长期看调试日志建议把日志级别调高并且配置日志轮转策略避免日志文件把磁盘占满。磁盘满了节点不会自动停止但写入失败会导致共识异常这种问题排查起来特别隐蔽我在测试环境就碰到过一次节点日志报错不明显最后一看磁盘空间是0%所以说日志管理这种小事也要提前处理。4.3 控制台安装与合约部署验证链跑通之后如果没有一个方便好用的交互工具后面的开发效率会很低。FISCO BCOS官方提供了控制台工具可以用来部署合约、调用合约、查询区块等基本上日常开发和调试的常用操作都能覆盖。控制台实际上是一个连接RPC服务的客户端通过控制台操作链上数据本质上和你自己写程序调RPC接口是一样的。控制台的安装比较简洁下载对应版本的压缩包解压后修改配置里RPC服务的地址和端口即可。这里我要强调一个细节控制台需要配置证书才能连接RPC服务因为pro版的RPC服务开启了TLS认证没有合法证书的客户端会被拒绝连接。所以控制台目录下一定要把RPC服务的证书文件放对位置否则连接时会出现握手失败的报错。合约部署验证建议用一个简单的合约比如一个只有一个存储变量和读写方法的合约。部署成功后通过RPC调用写方法再调用读方法读取数据如果数据正确说明从客户端到RPC到节点到共识再到存储的整条链路完全正常。我通常会再启动一个观察节点部署合约后分别在共识节点和观察节点上查询数据两者一致就说明同步机制也是正常的。5. 常见问题与排查技巧实录5.1 容器反复重启与版本不匹配容器反复重启是pro版搭建过程中最常见的故障。表现形式是docker ps看到容器状态一直在restarting日志里看不到有效输出或者只看到一句类似fatal的报错。绝大多数情况下这个问题的根因是镜像版本和构建脚本版本不一致。比如你用了3.0.1的构建脚本但拉取的节点镜像是3.0.0的启动时就会出现版本不匹配的校验错误。遇到这种情况不要急着去翻各种底层日志先确认版本信息是否对齐。做法是看构建脚本输出信息再看镜像标签两者要完全一致。版本对齐后重新构建配置、重新启动问题基本就解决了。我之前在其他项目上也养成了一个习惯每次部署前先做一个环境基线记录把操作系统版本、Docker版本、构建脚本版本、镜像版本全部记下来后面排错时能省很多时间。还有一种情况是容器启动时报告权限问题通常和Docker的数据卷目录权限有关。节点运行时需要写数据目录如果宿主机的目录权限过于严格容器内进程无法写入就会一直启动失败。解决方法是给对应的数据目录赋予合适的属主权限。这个坑在CentOS上特别容易出现因为SELinux默认策略有时候会拦截容器对挂载目录的读写遇到可疑的权限报错时可以先把SELinux临时设为permissive验证一下。5.2 端口配置与防火墙拦截跨机器部署时节点之间无法连通是另一个高频问题。表现是节点日志里一直在尝试连接对端IP的端口但始终连接失败。很多人第一反应是检查节点配置反复确认IP和端口没错但问题其实出在防火墙。我处理这类问题时有一套固定的检查顺序先在节点所在机器上执行telnet命令测试对端IP和端口是否可达如果不通再看安全组规则和本机防火墙如果通了再检查网关配置和证书。这样层层排除能快速定位是网络层问题还是应用层问题。顺便说一句telnet命令在有些最小化安装的系统里没有可以用nc -vz替代。端口冲突的问题也值得多说一句。如果你在同一台机器上跑过多个FISCO BCOS实例或者跑过其他区块链节点很容易出现端口冲突。容器日志里如果出现port already in use这样的信息就说明冲突了。使用标准端口部署前最好先用ss -lntp查看端口占用情况对冲突做到心里有数。5.3 共识停滞时的快速定位方法链跑了一段时间后突然不出块了这个问题最让人头疼。pro版里共识停滞的原因不外乎几种节点进程假死、网络分区、磁盘满了、时钟偏差过大。由于共识节点之间依赖网络通信任何一环出问题都可能导致整个共识组停摆。我的排查习惯是分三步走。第一步看所有节点容器是否还在运行先排除进程级别的问题。第二步看各节点日志寻找报错内容特别是网络连接失败和存储写入失败的报错。如果日志里什么都看不到就检查磁盘空间和系统负载这两个问题有时候不会直接打印到业务日志里。第三步如果节点之间有大量连接失败或者连接重置的记录就要重点检查网关了。定位到问题后下一步是恢复。如果只是某个节点掉线导致共识停滞可以尝试重启掉线节点对应的容器观察是否能够重新同步并参与共识。这里要提醒一下不要随便同时重启多个节点因为一旦超过共识容忍的故障节点数恢复过程会变得复杂很多。尽可能保持每次只动一个节点确定恢复正常后再操作下一个这是我在多次维护中总结出的稳妥做法。5.4 日志排查的几个实用技巧日志是pro版排错最重要的依据掌握几个实用技巧可以帮你快速定位问题。首先是学会快速过滤关键信息节点日志量大盲搜效率极低。可以先搜error、fatal级别的关键词如果没有再搜连接相关的关键词因为底层网络问题往往会在日志里体现为连接超时、断开重连等模式。其次是善用docker日志命令的时间戳过滤。比如你发现某个时间点之后链就不出块了就可以只查看那个时间点前后的日志而不是从几万行日志里慢慢翻。具体命令可以用docker logs --since按时间过滤再配合grep缩小范围。最后是日志和状态交叉验证。比如节点日志提示某个对端节点无法连接这时候就应该去那台机器上看它的网关进程是否正常而不是一直在本机日志里兜圈子。日志只是线索真正的结论要结合多个信息源来下排查FISCO BCOS这类分布式系统尤其如此。6. 从搭建到落地的一点个人经验pro版这套东西我刚上手时也觉得繁琐容器、证书、端口、配置每个环节都不能错。但当你完整搭过两遍之后就会明白它的复杂度其实是在为后面的生产可用性做铺垫。节点和网关分离、RPC独立部署、证书权限体系这些设计短期内增加了搭建成本长期来看却让系统具备了更大的弹性空间。如果你是按这篇文章的步骤走下来的现在应该已经得到一条可以正常出块、可以部署合约的pro版链了。接下来比较推荐的路线是给这条链配上控制台部署一个简单的存证类合约跑通业务闭环然后做一次节点重启测试观察重启后节点能否自动恢复并继续参与共识。这类实验做得越多对pro版的运行机制理解就越深。最后再分享一个小技巧整个部署过程中的所有命令、脚本、配置文件建议全部记录下来整理成一个部署文档放到团队的Wiki里。即使你自己过三个月回头再看这份文档的价值也远比你记忆里的“当初好像是这样弄的”要可靠得多。踩过的坑是宝贵的但记录下来的坑才真正属于团队。
返回列表