提前准备工具:
ubunbtu系统服务器 2台 |
---|
Remote Desktop Manager 远程链接工具 |
Winscp 远程文件操作工具(可视化文件操作) |
详细全流程可以参考笔者 B站视频:https://space.bilibili.com/483817038
我们需要准备搭载操作系统环境为:ubuntu 18.04,服务器配置为2核4GB、 带宽 5Mbps
、100GB的高性能云硬盘。
云服务器配置图
其中 将测试服务器1 作为机构A,同时也是生成创世区块的机构,测试服务器2
作为机构B,两个机构 分别代表两台服务器,每台服务器 又分别生成两个节点。
节点网络配置图
官方关于端口配置有详细方介绍:https://mp.weixin.qq.com/s/IiHsPlxmvEEBTC84n27I9A
针对云服务器中的vps服务器,RPC监听地址需要写网卡中的真实地址(如内网地址或127.0.0.1),可能与用户登录的ssh服务器不一致。
搭建底层需要对链搭建过程有一个了解,笔者将机构A和机构B大致证书操作流程进行画图说明。
机构A和机构B操作流程图
使用remote Desktop Manager 工具连接两台服务器,分别进行(1)~(4)的操作。
(1)下载企业部署工具,执行如下命令。
cd ~/ && git clone https://github.com/FISCO-BCOS/generator.git && cd
./generator
(2)安装企业级部署工具,执行如下命令。
cd ~/generator && bash ./scripts/install.sh
(3)获取节点二进制,执行如下命令。
./generator --download_fisco ./meta
(4)检查二进制版本,执行如下命令。
./meta/fisco-bcos -v
底层版本信息图
(5)在机构A的服务器中,进行初始化链证书,执行如下命令。
cd ~/generator
./generator --generate_chain_certificate ./dir_chain_ca
(6) 初始化机构 A,执行如下命令。
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyA
(7)查看机构证书及私钥,执行如下命令。
ls dir_agency_ca/agencyA/
(8)发送链证书、机构证书、机构私钥至机构 A,执行如下命令。
cp ./dir_agency_ca/agencyA/* ~/generator/meta/
(9)在机构B的服务器中,初始化机构 B
通过winscp工具将在机构A中的链证书 copy 给机构 B,就是将机构A服务器上的
dir_chain_ca 文件夹内容 复制给机构B的generator目录下
从机构A中复制给机构B的dir_chain_ca文件夹图
(10)连接机构B生成机构 B 证书,执行如下命令。
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agency
(11)发送链证书、机构证书、机构私钥至机构 B的meta目录,执行如下命令。
cp ./dir_agency_ca/agencyB/* ~/generator/meta/
(12) 修改配置文件
使用winscp工具连接机构A和机构B的服务器,分别手动修改/home/ubuntu/generator目录下的
node_deployment.ini文件配置,p2p_ip改为对应的外网 IP, rpc_ip 要修改为内网 ip
。机构A 和机构B分别有两个节点,可以参照图中复制。
P2P端口,用于区块链节点之间的互联,包括机构内的多个节点,以及多机构间节点和节点的互联。如果其他节点在机构外,那么这个连接要监听公网地址,或者监听内网,且由连接公网的网关(如nginx)转发网络连接。
RPC是客户端与区块链系统交互的一套协议和接口,用户通过RPC接口可查询区块链相关信息(如块高、区块、节点连接等)和发送交易。
详细参考https://mp.weixin.qq.com/s/IiHsPlxmvEEBTC84n27I9A
机构A和机构B配置如图
(13)机构 A 生成节点证书及 P2P 连接信息文件,在机构A终端输入命令。
./generator --generate_all_certificates ./agencyA_node_info
(14)机构 B 生成节点证书及 P2P 连接信息文件,在机构B终端输入命令。
./generator --generate_all_certificates ./agencyB_node_info
备注:假如机构 B 这一步操作失误,需要删除 agencyB_node_info 文件夹,以及 meta
文件夹下生成的节点文件和信息,只保留如下内容
Meta文件夹清单图
(15)创世机构收集节点证书
生成创世区块的机构需要节点证书,示例中由 A 机构生成创世区块,因此 B
机构除了发送节点 P2P 连接地址文件外,还需发送节点证书至机构 A
将机构 B 节点 agencyB_node_info 文件夹 cert_*.crt 文件 copy 到机构 A 的 meta
文件夹中
Meta文件夹目录清单图
各机构节点连接信息 相互收集
比如:机构 A 的 meta 文件夹下多了 peersB,txt,机构 B 的 meta 文件夹下多了
peersA.txt;各种机构的meta目录下,都留存对方的节点连接信息。
(16) 机构 A 生成群组 1创世区块
在 /home/ubuntu/generator/conf目录下,配置 group_genesis.ini
[group]
group_id=1
[nodes]
node0=服务器B的 IP:30300
node1=服务器B的 IP:30301
node2=服务器A的IP:30300
node3=服务器 A 的 IP:30301
在机构A的服务器终端生成群组1的创世区块,在终端执行命令。
./generator --create_group_genesis ./group
(17)分发群组 1 创世区块至机构 B
手动通过winscp工具复制 机构 A ./group/group.1.genesis 文件到机构 B 的 meta
文件夹下
(18)机构A生成所属节点
./generator --build_install_package ./meta/peersB.txt ./nodeA
(19)机构B 生成所属节点
./generator --build_install_package ./meta/peersA.txt ./nodeB
(20)在机构A和机构B启动节点
在终端目录/home/ubuntu/generator目录下启动节点,分别执行如下命令。
bash ./nodeA/start_all.sh
部署报错图
备注:运行到这个步骤可能出错,通常排查问题:先查看服务器开放所有端口;再次使用命令。查找端口是否被占用;
云端安全组配置图
根据端口查找进程,执行如下命令。,其中port端口改为20201
sudo lsof -i:[port]
. 根据PID杀掉进程,执行具体命令。
sudo kill [PID]
最后查找日志
日志文件图
报错信息如下:
error|2019-11-08 10:45:48.895460|INITIALIZERInit
failed,EINFO=/FISCO-BCOS/libinitializer/RPCInitializer.cpp(93):
Throw in function void
dev::initializer::RPCInitializer::initChannelRPCServer(const
boost::property_tree::ptree &)
Dynamic exception type:
boost::exception_detail::clone_impl<dev::ListenPortIsUsed>
std::exception::what: std::exception
[dev::tag_comment*] = Please check channel_listenIP and
channel_listen_port are valid
问题定位:这个是 rpc 没有监听到,四个节点的 rpc 都要进行修改。
官方配置说明:
documentation.readthedocs.io/zh_CN/latest/docs/manual/configuration.html#config-ini
修改 NodeA 文件夹中和 NodeB 文件夹中四个节点的 config.ini 文件
config.ini配置修改图
再次启动两个机构的所有节点
bash ./nodeA/start_all.sh
bash ./nodeB/start_all.sh
都是启动成功
机构B节点启动成功状态图
(21)查看进程,执行命令。
ps -ef | grep fisco
(21)查看节点 log,执行命令。
tail -f ./node*/node*/log/log* | grep +++
节点log 正常共识图