更新文章
This commit is contained in:
342
docs/notes/ops/blockchain/theory/fisco-bcos-node-type.md
Normal file
342
docs/notes/ops/blockchain/theory/fisco-bcos-node-type.md
Normal file
@@ -0,0 +1,342 @@
|
||||
---
|
||||
title: fisco-bcos-node-type
|
||||
createTime: 2025/10/05 13:07:05
|
||||
permalink: /ops/blockchain/theory/fisco-bcos-node-type/
|
||||
---
|
||||
|
||||
## 节点的基础概念
|
||||
|
||||
FISCO BCOS 引入了[游离节点、观察者节点和共识节点](https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/design/security_control/node_management.html#id6),这三种节点类型可以通过控制台互相转换。
|
||||
|
||||
组员:
|
||||
- 共识节点:参与共识的节点,拥有群组的所有数据(搭链时默认都生成共识节点)。
|
||||
- 观察者节点:不参与共识,但能实时同步链上数据的节点。
|
||||
|
||||
非组员:
|
||||
- 游离节点:已启动,等待加入群组的节点。处在一种暂时的节点状态,不能获取链上的数据。
|
||||
|
||||
## 节点配置文件详解
|
||||
|
||||
节点搭建完成之后会有`config.ini`、`conf/group.%group_id.genesis`、`conf/group.%group_id.ini`、`node.nodeid` 等配置文件
|
||||
|
||||
::: code-tabs
|
||||
@tab config.ini
|
||||
```bash
|
||||
# RPC (Remote Proceduce Call 远程过程调用)
|
||||
# 用于配置节点对外提供的 RPC 服务,包括 JSON-RPC ( 用于 Web3.js,控制台等 )和 Channel 通信( 用于 SDK,Java 应用等 )
|
||||
[rpc]
|
||||
# 允许外部访问
|
||||
channel_listen_ip=0.0.0.0
|
||||
channel_listen_port=20200
|
||||
# 只允许内部访问
|
||||
jsonrpc_listen_ip=127.0.0.1
|
||||
jsonrpc_listen_port=8545
|
||||
|
||||
# P2P (Peer-to-Peer 点对点通信)
|
||||
# 用于配置节点之间的 P2P 通信
|
||||
[p2p]
|
||||
listen_ip=0.0.0.0
|
||||
listen_port=30300
|
||||
; nodes to connect
|
||||
node.0=127.0.0.1:30300
|
||||
node.1=127.0.0.1:30301
|
||||
node.2=127.0.0.1:30400
|
||||
node.3=127.0.0.1:30401
|
||||
node.4=127.0.0.1:30500
|
||||
node.5=127.0.0.1:30501
|
||||
node.6=127.0.0.1:30600
|
||||
node.7=127.0.0.1:30601
|
||||
|
||||
# 证书的黑白名单控制
|
||||
[certificate_blacklist]
|
||||
; crl.0 should be nodeid, nodeid's length is 128
|
||||
;crl.0=
|
||||
|
||||
[certificate_whitelist]
|
||||
; cal.0 should be nodeid, nodeid's length is 128
|
||||
;cal.0=
|
||||
|
||||
# 群组的配置目录和数据目录
|
||||
# 启动的时候会自动加载 group_config_path 下的所有群组
|
||||
[group]
|
||||
group_data_path=data/
|
||||
group_config_path=conf/
|
||||
|
||||
# 配置网络安全
|
||||
[network_security]
|
||||
; directory the certificates located in
|
||||
# 网络部分的配置文件目录
|
||||
data_path=conf/
|
||||
; the node private key file
|
||||
# 节点的私钥文件
|
||||
key=node.key
|
||||
; the node certificate file
|
||||
# 节点的证书文件
|
||||
cert=node.crt
|
||||
; the ca certificate file
|
||||
# CA 的证书文件
|
||||
ca_cert=ca.crt
|
||||
|
||||
# 配置加密存储
|
||||
# 用于对接 KMS ,实现落盘数据加密
|
||||
# 具体的可以查看参考文献中的第2篇文章,落盘加密
|
||||
[storage_security]
|
||||
enable=false
|
||||
key_manager_ip=
|
||||
key_manager_port=
|
||||
cipher_data_key=
|
||||
|
||||
# 链的基本信息
|
||||
[chain]
|
||||
# 链的 ID ,不同链ID的节点无法通信
|
||||
id=1
|
||||
; use SM crypto or not, should nerver be changed
|
||||
# 是否启动国密算法,这一步在创建的时候就应该规划好
|
||||
# 一旦设定,不可更改,否则无法和其他节点通信
|
||||
sm_crypto=false
|
||||
# cannel 是否启用国密,需和 SDK 一致
|
||||
sm_crypto_channel=false
|
||||
|
||||
# 兼容性配置
|
||||
[compatibility]
|
||||
; supported_version should nerver be changed
|
||||
# 指定节点兼容的 FISCO BCOS 的版本
|
||||
# 默认值即可,不应手动修改
|
||||
supported_version=2.8.0
|
||||
|
||||
# 日志配置
|
||||
[log]
|
||||
# 启用配置
|
||||
enable=true
|
||||
# 日志配置目录
|
||||
log_path=./log
|
||||
; enable/disable the statistics function
|
||||
# 是否启用统计功能
|
||||
enable_statistic=false
|
||||
; network statistics interval, unit is second, default is 60s
|
||||
# 统计信息刷新间隔(单位:秒)
|
||||
stat_flush_interval=60
|
||||
; info debug trace
|
||||
# 日志级别,可选值(trace < debug < info < warning < error)
|
||||
level=info
|
||||
; MB
|
||||
# 单个日志文件最大大小(单位:MB)
|
||||
max_log_file_size=200
|
||||
# 是否实时刷盘
|
||||
flush=true
|
||||
|
||||
# 流量控制
|
||||
[flow_control]
|
||||
; restrict QPS of the node
|
||||
# 限制 QPS 每秒请求数,防止 DDOS
|
||||
;limit_req=1000
|
||||
; restrict the outgoing bandwidth of the node
|
||||
; Mb, can be a decimal
|
||||
; when the outgoing bandwidth exceeds the limit, the block synchronization operation will not proceed
|
||||
# 限制节点出带宽(单位Mbps)
|
||||
# 超出之后会暂停区块同步,避免网络拥塞
|
||||
;outgoing_bandwidth_limit=2
|
||||
```
|
||||
@tab group.1.genesis
|
||||
```bash
|
||||
# 共识机制配置
|
||||
[consensus]
|
||||
; consensus algorithm now support PBFT(consensus_type=pbft), Raft(consensus_type=raft)
|
||||
; rpbft(consensus_type=rpbft)
|
||||
# 共识算法
|
||||
consensus_type=pbft
|
||||
; the max number of transactions of a block
|
||||
# 每个区块的最大打包量,超出的部分会留在交易池,等待下一次打包
|
||||
max_trans_num=1000
|
||||
; in seconds, block consensus timeout, at least 3s
|
||||
# 共识算法的超时时间
|
||||
consensus_timeout=3
|
||||
; rpbft related configuration
|
||||
; the working sealers num of each consensus epoch
|
||||
# 仅在 rpbft 的时候生效,每轮共识 epoch 中参与打包的共识节点数。
|
||||
epoch_sealer_num=2
|
||||
; the number of generated blocks each epoch
|
||||
# 仅在 rpbft 的时候生效,每轮 epoch 持续的区块数。
|
||||
epoch_block_num=1000
|
||||
; the node id of consensusers
|
||||
# 群组中共识节点的列表
|
||||
node.0=f0535616759000b473a285d60814bc2c5927a9cb897644da46890de71e59df590cd6fe1b226a95e19a566b6fc127fd85032de0d9fdd3d529e5e50cd96ad51f28
|
||||
node.1=d036a22f16909cba4c8521cd3c31db3be381e673c9749e3fd2848ab25eca134ef917cb9306f41893295c535078bce77bdc241eba3f92549a73efe4699d3c0df8
|
||||
|
||||
# 存储区块链的状态信息
|
||||
# 支持 storage state 和 MPT state
|
||||
# storage state 效率高
|
||||
# MPT state 效率低,但是包含完整的历史信息
|
||||
[state]
|
||||
type=storage
|
||||
# transaction (交易)相关配置
|
||||
# gas 是一种计算智能合约执行过程中消耗的计算和存储资源,包括交易的gas的最大值的限制和区块的gas最大值的限制
|
||||
# 如果交易或区块执行消耗的 gas 超过限制,则会丢弃交易区块
|
||||
# FISCO BCOS 是联盟链,简化了 gas 的设计,仅保留交易最大 gas 限制,区块最大 gas 是通过共识配置的
|
||||
[tx]
|
||||
; transaction gas limit
|
||||
gas_limit=300000000
|
||||
# 群组的配置
|
||||
[group]
|
||||
# 群组 ID
|
||||
id=1
|
||||
# 群组的创世区块的时间戳(ms)
|
||||
timestamp=1759397321000
|
||||
|
||||
# 群组的 EVM 配置
|
||||
# 是否开启 free storage
|
||||
# 这里具体的内容,可以查看参考文献中的第4篇文章,【教程】如何修改FISCO-BCOS内的EVM的gas...
|
||||
[evm]
|
||||
enable_free_storage=false
|
||||
```
|
||||
@tab group.1.ini
|
||||
```bash
|
||||
# 共识运行参数(PBFT 优化)
|
||||
[consensus]
|
||||
; the ttl for broadcasting pbft message
|
||||
# PBFT 消息在网络中最多转发 2 跳
|
||||
ttl=2
|
||||
; min block generation time(ms)
|
||||
# 最小出块时间 500ms
|
||||
min_block_generation_time=500
|
||||
# 动态调整区块大小 genesis 中的 max_trans_num
|
||||
enable_dynamic_block_size=true
|
||||
# 优化 TLL 转发逻辑,提升 PBFT 在大规模网络中的效率
|
||||
enable_ttl_optimization=true
|
||||
# Prepare 消息中只包含交易哈希,减少网络传输量
|
||||
# 大幅提示大区块场景下的共识效率
|
||||
enable_prepare_with_txsHash=true
|
||||
; The following is the relevant configuration of rpbft
|
||||
; set true to enable broadcast prepare request by tree
|
||||
# 使用树状拓扑广播 Prepare 广播(而非全网广播)
|
||||
# 适合节点多的场景
|
||||
# 仅在 rpbft 或优化版 PBFT 中有效
|
||||
broadcast_prepare_by_tree=true
|
||||
; percent of nodes that broadcast prepare status to, must be between 25 and 100
|
||||
# 广播 Prepare 状态给33%的节点,必须在 25%~100% 之间
|
||||
prepare_status_broadcast_percent=33
|
||||
; max wait time before request missed transactions, ms, must be between 5ms and 1000ms
|
||||
# 请求缺失交易前,最多等待 100ms(收集更多交易)
|
||||
# 范围 5 ~ 1000ms
|
||||
max_request_missedTxs_waitTime=100
|
||||
; maximum wait time before requesting a prepare, ms, must be between 10ms and 1000ms
|
||||
# 请求缺失 Prepare 消息前,最多等待 100ms
|
||||
# 范围 10ms ~ 1000ms
|
||||
max_request_prepare_waitTime=100
|
||||
|
||||
[storage]
|
||||
; storage db type, rocksdb / mysql / scalable, rocksdb is recommended
|
||||
# 存储引擎
|
||||
# 推荐使用 rocksdb (高性能,嵌入式 KV 数据库)
|
||||
# 支持 mysql ( 不推荐,性能差 ) , scalable (分布式存储,实验性)
|
||||
type=rocksdb
|
||||
; set true to turn on binary log
|
||||
# 开启二进制日志,默认关闭,开启会增加IO
|
||||
binary_log=false
|
||||
; scroll_threshold=scroll_threshold_multiple*1000, only for scalable
|
||||
# 仅在 scalable 存储引擎下生效
|
||||
scroll_threshold_multiple=2
|
||||
; set fasle to disable CachedStorage
|
||||
# 启用缓存层(非常推荐)
|
||||
cached_storage=true
|
||||
; max cache memeory, MB
|
||||
# 缓存最大内容,32MB
|
||||
max_capacity=32
|
||||
# 允许节点最多超前同步10个区块
|
||||
max_forward_block=10
|
||||
; only for external, deprecated in v2.3.0
|
||||
# 最大重试次数,默认 60 次
|
||||
max_retry=60
|
||||
topic=DB
|
||||
; only for mysql
|
||||
db_ip=127.0.0.1
|
||||
db_port=3306
|
||||
db_username=
|
||||
db_passwd=
|
||||
db_name=
|
||||
# 交易池
|
||||
[tx_pool]
|
||||
# 交易池最大容量,默认 150000
|
||||
limit=150000
|
||||
; transaction pool memory size limit, MB
|
||||
# 交易池最大内存占用:512 MB
|
||||
memory_limit=512
|
||||
; number of threads responsible for transaction notification,
|
||||
; default is 2, not recommended for more than 8
|
||||
# 用于通知 SDK 交易上链结果的线程数
|
||||
notify_worker_num=2
|
||||
# 区块同步优化
|
||||
[sync]
|
||||
; max memory size used for block sync, must >= 32MB
|
||||
# 区块同步最大内存:512MB,必须大于等于 32 MB
|
||||
max_block_sync_memory_size=512
|
||||
# 同步空闲时,等待 200ms 再检查新块
|
||||
idle_wait_ms=200
|
||||
; send block status by tree-topology, only supported when use pbft
|
||||
# 使用树状拓扑同步区块
|
||||
# 可以大幅度降低网络带宽
|
||||
# 仅在 PBFT 下支持
|
||||
sync_block_by_tree=true
|
||||
; send transaction by tree-topology, only supported when use pbft
|
||||
; recommend to use when deploy many consensus nodes
|
||||
# 交易广播也使用树状拓扑
|
||||
send_txs_by_tree=true
|
||||
; must between 1000 to 3000
|
||||
; only enabled when sync_by_tree is true
|
||||
# Gossip 协议心跳间隔
|
||||
gossip_interval_ms=1000
|
||||
# 每个节点维护 3 个gossip邻居
|
||||
gossip_peers_number=3
|
||||
; max number of nodes that broadcast txs status to, recommended less than 5
|
||||
# 交易状态最多广播给5个节点
|
||||
txs_max_gossip_peers_num=5
|
||||
|
||||
# 群组级的流量控制
|
||||
[flow_control]
|
||||
; restrict QPS of the group
|
||||
# 限制群组的 QPS 为 1000
|
||||
;limit_req=1000
|
||||
; restrict the outgoing bandwidth of the group
|
||||
; Mb, can be a decimal
|
||||
; when the outgoing bandwidth exceeds the limit, the block synchronization operation will not proceed
|
||||
# 限制群组的出链带宽为 2Mbps/s
|
||||
;outgoing_bandwidth_limit=2
|
||||
|
||||
# SDK 连接白名单
|
||||
[sdk_allowlist]
|
||||
; When sdk_allowlist is empty, all SDKs can connect to this node
|
||||
; when sdk_allowlist is not empty, only the SDK in the allowlist can connect to this node
|
||||
; public_key.0 should be nodeid, nodeid's length is 128
|
||||
;public_key.0=
|
||||
```
|
||||
@tab node.nodeid
|
||||
```bash
|
||||
# 节点的 ID
|
||||
f0535616759000b473a285d60814bc2c5927a9cb897644da46890de71e59df590cd6fe1b226a95e19a566b6fc127fd85032de0d9fdd3d529e5e50cd96ad51f28
|
||||
```
|
||||
:::
|
||||
|
||||
## 节点操作命令
|
||||
|
||||
- `addSealer`:将节点转换为共识节点。
|
||||
- `addObserver`:将节点转换为观察节点。
|
||||
- `removeNode`:将节点设置为游离节点。
|
||||
|
||||
- `getSealerList`:查询当前的共识节点的列表
|
||||
- `getObserverList`:查询当前的观察者节点的列表·
|
||||
- `getNodeList`:查询当前的所有节点的列表
|
||||
|
||||
操作节点的时候是通过节点ID进行操作的,节点ID可以在节点目录的`conf/node.nodeid`中获取
|
||||
|
||||
请确保节点加入的区块链所有节点共识正常:正常的节点会输出`+++`日志
|
||||
|
||||
|
||||
## 参考文章:
|
||||
|
||||
1. [组员节点管理](https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/manual/node_management.html)
|
||||
|
||||
2. [落盘加密](https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/design/features/storage_security.html)
|
||||
|
||||
3. [【全网首发】FISCO-BCOS从底层讲起链从配置文件开始解析...](https://blog.csdn.net/LforikQ/article/details/130920092)
|
||||
|
||||
4. [【教程】如何修改FISCO-BCOS内的EVM的gas值,让区块链预防DOS攻击...](https://blog.csdn.net/qq_57309855/article/details/126334115)
|
||||
Reference in New Issue
Block a user