节点配置介绍¶
标签:Air版区块链网络
配置
config.ini
config.genesis
端口配置
日志级别
配置
重要
相关软件和环境版本说明!请查看
Air版本FISCO BCOS主要包括创世块配置文件config.genesis
和节点配置文件config.ini
:
config.ini
:节点配置文件,主要配置RPC、P2P、SSL证书、账本数据路径、落盘加密等信息;config.genesis
:创世块配置文件,须保证群组内所有节点的创世块配置一致, 创世块配置文件在链初始化后不可更改, 链初始化后,即使更改了创世块配置,新的配置不会生效,系统仍然使用初始化链时的genesis配置。
1. 创世块配置¶
节点创世块配置位于配置文件config.genesis
中。
注解
须保证群组内所有节点的创世块配置一致
创世块配置文件在链初始化后不可更改
链初始化后,即使更改了创世块配置,新的配置不会生效,系统仍然使用初始化链时的genesis配置
1.1 配置链信息¶
[chain]
配置节点的链信息,该配置下的字段信息,一旦确定就不应该再更改:
[chain].sm_crypto
: 节点是否使用国密账本,默认为false
;[chain].group_id
:群组ID,默认为group0
;[chain].chain_id
:链ID,默认为chain0
.
[chain]
; use SM crypto or not, should nerver be changed
sm_crypto=false
; the group id, should nerver be changed
group_id=group0
; the chain id, should nerver be changed
chain_id=chain0
1.2 共识配置¶
[consensus]
涉及共识相关配置,包括:
[consensus].consensus_type
: 共识类型,默认设置为pbft
,目前FISCO BCOS v3.x仅支持PBFT共识算法;[consensus].block_tx_count_limit
: 每个区块里可包含的最大交易数,默认设置为1000;[consensus].leader_period
: 共识过程中每个leader连续打包的区块数目,默认为 5;[consensus].node.idx
:共识节点列表,配置了参与共识节点的NodeID。
[consensus]
配置示例如下:
[consensus]
consensus_type = pbft
block_tx_count_limit = 1000
leader_period = 5
node.0 = 94172c95917fbf47b4b98aba0cc68f83f61a06b0bc373695590f343464b52c9b40d5f4dd98384c037d4cad938b329c6af826f695a7123007b7e06f24c6a48f20:1
node.1 = 74034fb43f75c63bb2259a63f71d9d1c658945409889d3028d257914be1612d1f2e80c4a777cb3e7929a0f0d671eac2fb9a99fa45d39f5451b6357b00c389a84:1
1.3 gas配置¶
FISCO BCOS兼容EVM和WASM虚拟机,为了防止针对EVM/WASM的DOS攻击,EVM在执行交易时,引入了gas概念,用来度量智能合约执行过程中消耗的计算和存储资源,包括交易最大gas限制,若交易或区块执行消耗的gas超过限制(gas limit),则丢弃交易,创世块的[tx].gas_limit
可配置交易最大gas限制,默认是3000000000,链初始化完毕后,可通过控制台指令动态调整gas限制。
[tx].gas_limit
: 交易执行时gas限制,默认设置为3000000000
[tx].gas_limit
配置示例如下:
[tx]
gas_limit = 3000000000
1.4 数据兼容性配置¶
FISCO BCOS v3.0.0设计并实现了兼容性框架,可支持数据版本的动态升级,该配置项位于[version]
下:
[version].compatibility_version
: 数据兼容版本号,默认为v3.0.0
,新版本升级时,替换所有二进制后,可通过控制台指令setSystemConfigByKey动态升级数据版本。
1.5 执行模块配置¶
[executor]
配置项涉及执行相关的创世块配置,主要包括:
[executor].is_wasm
: 用于配置虚拟机类型,true
表明使用WASM虚拟机,false
表明使用EVM虚拟机,该配置选项不可动态调整,默认为false
;[executor].is_auth_check
: 权限控制的配置开关,true
表明开启权限控制,false
表明关闭权限控制,该配置选项不可动态调整,默认关闭权限控制功能;[executor].is_serial_execute
: 交易执行串行与并行模式的配置开关,true
表明进入串行执行模式,false
表明进入DMC并行执行模式,该配置选项不可动态调整,默认为false
;[executor].auth_admin_account
: 权限管理员账户地址,仅用于权限控制场景中。
2. 节点配置文件¶
config.ini
采用ini
格式,主要包括 p2p、rpc、cert、chain、security、consensus、storage、txpool和log 配置项。
重要
云主机的公网IP均为虚拟IP,若listen_ip填写外网IP,会绑定失败,须填写0.0.0.0
RPC/P2P监听端口必须位于1024-65535范围内,且不能与机器上其他应用监听端口冲突
为便于开发和体验,listen_ip参考配置是 0.0.0.0 ,出于安全考虑,请根据实际业务网络情况,修改为安全的监听地址,如:内网IP或特定的外网IP
2.1 配置P2P¶
P2P相关配置包括:
[p2p].listen_ip
:P2P监听IP,默认设置为0.0.0.0
;[p2p].listen_port
:节点P2P监听端口;[p2p].sm_ssl
: 节点之间的SSL连接是否使用国密SSL协议,true
表示开启国密SSL连接;false
表示采用非国密SSL连接,默认为false
;[p2p].nodes_path
:节点连接信息文件nodes.json
所在目录,默认为当前文件夹;[p2p].nodes_file
:P2P
连接信息文件nodes.json
所在路径。
P2P配置示例如下:
[p2p]
listen_ip=0.0.0.0
listen_port=30300
; ssl or sm ssl
sm_ssl=false
nodes_path=./
nodes_file=nodes.json
p2p
连接配置文件nodes_file
格式:
{"nodes":[连接列表]}
示例:
{"nodes":["127.0.0.1:30300","127.0.0.1:30301","127.0.0.1:30302","127.0.0.1:30303"]}
P2P
支持可配置的网络连接,并且支持服务运行期间动态新增/删减连接节点,流程如下:
修改
[p2p].nodes_file
配置中的连接信息向服务进程发送信号
USR1
:
kill -USR1 网关节点pid
服务会重新加载P2P
连接信息。
2.2 配置RPC¶
RPC配置选项位于[rpc]
,主要包括:
[rpc].listen_ip
: RPC监听IP,为方便节点和SDK跨机器部署,默认设置为0.0.0.0
;[rpc].listen_port
: RPC监听端口,默认设置为20200
;[rpc].thread_count
: RPC服务线程数,默认为 4;[rpc].sm_ssl
: SDK与节点之间的连接是否使用国密SSL连接,true
表示开启国密SSL连接;false
表示采用非国密SSL连接,默认为false
.
RPC配置示例如下:
[rpc]
listen_ip=0.0.0.0
listen_port=20200
thread_count=4
; ssl or sm ssl
sm_ssl=false
; ssl connection switch, if disable the ssl connection, default: false
;disable_ssl=true
2.3 配置证书信息¶
基于安全考虑,FISCO BCOS节点间采用SSL加密通信,[cert]
配置SSL连接的证书信息:
[cert].ca_path
: 证书路径,默认为conf
;[cert].ca_cert
: ca证书名,默认为ca.crt
;[cert].node_key
: 节点SSL连接私钥,默认为ssl.key
;[cert].node_cert
: 节点SSL连接证书,默认为ssl.cert
.
[cert]
; directory the certificates located in
ca_path=./conf
; the ca certificate file
ca_cert=ca.crt
; the node private key file
node_key=ssl.key
; the node certificate file
node_cert=ssl.crt
[security]
配置私钥路径,该私钥主要用于共识模块的消息签名,如下:
[security].private_key_path
:私钥文件路径,默认为conf/node.pem
。
[security]
private_key_path=conf/node.pem
2.4 配置共识信息¶
考虑到PBFT模块打包太快会导致某些区块中仅打包1到2个很少的交易,浪费存储空间,FISCO BCOS在可变配置config.ini
的[consensus]
下引入min_seal_time
配置项来控制PBFT共识打包的最短时间,即:共识节点打包时间超过min_seal_time
且打包的交易数大于0才会开始共识流程,处理打包生成的新区块。
重要
min_seal_time
默认为500msmin_seal_time
不可超过出空块时间1000ms,若设置值超过1000ms,系统默认min_seal_time为500ms
[consensus]
; min block generation time(ms)
min_seal_time=500
2.5 配置存储信息¶
存储配置位于[storage]
,具体包括:
[storage].typs
: 区块链节点数据库类型,默认为RocksDB,支持TiKV,当配置TiKV时,需要对应配置pd_addrs
,pd_ssl_ca_path
,pd_ssl_cert_path
,pd_ssl_key_path
等参数;[storage].data_path
: 区块链节点数据存储路径,默认为data;[storage].enable_cache
: 是否开启缓存,默认为true
;[storage].key_page_size
: KeyPage存储方案中,存储页大小,单位是字节,要求不小于4096
(4KB),默认为10240
(10KB);此配置项可修改为0,表示关闭keypage以获得更好的写入性能,如果已有节点修改此配置项为0,则需要清理数据重新同步区块链数据;[storage].pd_addrs
: TiKV存储时,PD地址,多个地址用逗号分隔;[storage].pd_ssl_ca_path
: TiKV存储时,PD SSL CA证书路径;[storage].pd_ssl_cert_path
: TiKV存储时,PD SSL证书路径;[storage].pd_ssl_key_path
: TiKV存储时,PD SSL私钥路径;[storage].enable_archive
: 是否开启归档服务,默认为false
;[storage].archive_ip
: 归档服务监听的IP;[storage].archive_port
: 归档服务监听的端口;[storage].enable_separate_block_state
: 当使用RocksDB时是否开启区块状态分离,开启后交易收据会存放在另一个单独的数据库中以获得更好的性能,默认为false
;[storage].sync_archived_blocks
: 是否同步归档区块,默认为false
,开启后会通过p2p同步已经归档的历史区块的交易和收据。
[storage]
; type can be tikv or rocksdb
type=rocksdb
data_path=data
enable_cache=true
; The granularity of the storage page, in bytes, must not be less than 4096 Bytes, the default is 10240 Bytes (10KB)
key_page_size=10240
pd_addrs=127.0.0.1:2379
pd_ssl_ca_path=
pd_ssl_cert_path=
pd_ssl_key_path=
enable_archive=false
archive_ip=
archive_port=
;enable_separate_block_state=false
;sync_archived_blocks=false
2.6 配置落盘加密¶
落盘加密配置选项位于[storage_security]
:
[storage_security].enable
: 是否启用落盘加密,默认关闭落盘加密;[storage_security].key_manager_url
: 开启落盘加密时,key_center_url
配置了Key Manager的url,用于获取数据加解密密钥;[storage_security].cipher_data_key
: 数据落盘加密的私钥。
[storage_security]
; enable data disk encryption or not, default is false
enable=false
; url of the key center, in format of ip:port
key_center_url=
cipher_data_key=
2.7 配置交易池信息¶
交易池配置选项位于[txpool]
:
[txpool].limit
: 交易池的容量限制, 默认为15000
;[txpool].notify_worker_num
: 交易通知线程数量,默认为2;[txpool].verify_worker_num
: 交易验证线程数量,默认为机器CPU核数;[txpool].txs_expiration_time
: 交易过期时间,以秒为单位,默认10分钟,即:超过十分钟没有被共识模块打包的交易将会被直接丢弃。
[txpool]
; size of the txpool, default is 15000
limit = 15000
; txs notification threads num, default is 2
notify_worker_num = 2
; txs verification threads num, default is the number of cpu cores
;verify_worker_num = 2
; txs expiration time, in seconds, default is 10 minutes
txs_expiration_time = 600
2.8 配置日志信息¶
FISCO BCOS支持功能强大的boostlog,日志配置主要位于config.ini
的[log]
配置项中。
[log].enable
: 启用/禁用日志,设置为true
表示启用日志;设置为false
表示禁用日志,默认设置为true,性能测试可将该选项设置为false
,降低打印日志对测试结果的影响[log].log_path
:日志文件路径。[log].level
: 日志级别,当前主要包括trace
、debug
、info
、warning
、error
五种日志级别,设置某种日志级别后,日志文件中会输大于等于该级别的日志,日志级别从大到小排序error > warning > info > debug > trace
。[log].max_log_file_size
:每个日志文件最大容量,计量单位为MB,默认为200MB。[log].rotate_time_point
:日志滚动时间点,默认为00:00:00。
日志配置示例如下:
[log]
enable=true
log_path=./log
; info debug trace
level=DEBUG
; MB
max_log_file_size=200
v3.6.0新增配置项¶
log.format
:配置每条日志的格式,关键字用%包裹,支持关键字包括LineID, TimeStamp, ProcessID, ThreadName, ThreadID 和Message
log.enable_rotate_by_hour
:默认为true,配置为false
时log.log_name_pattern,log.rotate_name_pattern,log.archive_path,log.compress_archive_file,log.max_archive_files,log.max_archive_size,log.min_free_space
才生效,否则日志为按小时或文件大小产生新的文件log.log_name_pattern
: 日志文件的文件名模式,可以配置字符串,也支持格式化字符,%前缀,Y,m,d,H,M,S代表年月日时分秒,N代表单调递增的编号,可以%5N使用定长编号log.rotate_name_pattern
: 滚动后产生的日志文件的文件名,支持的格式化字符与log.log_name_pattern 相同log.archive_path
: 历史日志文件的归档文件夹log.compress_archive_file
: 是否压缩归档的日志文件log.max_archive_files
: 归档文件夹中最大文件个数,0为不限制log.max_archive_size
: 归档文件夹最大硬盘空间限制,单位MB,0为不限制log.min_free_space
: 归档文件夹最小空间,默认为0
2.9 网关模块限流¶
网关模块支持在config.ini中配置实现流量速率限制的功能,当流量超限时,通过丢弃数据包实现限流。
根据需求配置如下内容,可实现
出带宽、入带宽限流
特定IP、群组的限流
排除特定模块的限流
在进程依赖的config.ini中的配置如下(请根据需求反注释某些项)
[flow_control]
; rate limiter stat reporter interval, unit: ms
; stat_reporter_interval=60000
; time window for rate limiter, default: 3s
; time_window_sec=3
; enable distributed rate limiter, redis required, default: false
; enable_distributed_ratelimit=false
; enable local cache for distributed rate limiter, work with enable_distributed_ratelimit, default: true
; enable_distributed_ratelimit_cache=true
; distributed rate limiter local cache percent, work with enable_distributed_ratelimit_cache, default: 20
; distributed_ratelimit_cache_percent=20
; the module that does not limit bandwidth
; list of all modules: raft,pbft,amop,block_sync,txs_sync,light_node,cons_txs_sync
;
; modules_without_bw_limit=raft,pbft
; allow the msg exceed max permit pass
; outgoing_allow_exceed_max_permit=false
; restrict the outgoing bandwidth of the node
; both integer and decimal is support, unit: Mb
;
; total_outgoing_bw_limit=10
; restrict the outgoing bandwidth of the the connection
; both integer and decimal is support, unit: Mb
;
; conn_outgoing_bw_limit=2
;
; specify IP to limit bandwidth, format: conn_outgoing_bw_limit_x.x.x.x=n
; conn_outgoing_bw_limit_192.108.0.1=3
; conn_outgoing_bw_limit_192.108.0.2=3
; conn_outgoing_bw_limit_192.108.0.3=3
;
; default bandwidth limit for the group
; group_outgoing_bw_limit=2
;
; specify group to limit bandwidth, group_outgoing_bw_limit_groupName=n
; group_outgoing_bw_limit_group0=2
; group_outgoing_bw_limit_group1=2
; group_outgoing_bw_limit_group2=2
; should not change incoming_p2p_basic_msg_type_list if you known what you would to do
; incoming_p2p_basic_msg_type_list=
; the qps limit for p2p basic msg type, the msg type has been config by incoming_p2p_basic_msg_type_list, default: -1
; incoming_p2p_basic_msg_type_qps_limit=-1
; default qps limit for all module message, default: -1
; incoming_module_msg_type_qps_limit=-1
; specify module to limit qps, incoming_module_qps_limit_moduleID=n
; incoming_module_qps_limit_xxxx=1000
; incoming_module_qps_limit_xxxx=2000
; incoming_module_qps_limit_xxxx=3000