diff --git a/deploy/deploy-peer/src/main/resources/config/init/ledger.init b/deploy/deploy-peer/src/main/resources/config/init/ledger.init index 8f06ac57..f475f0e9 100644 --- a/deploy/deploy-peer/src/main/resources/config/init/ledger.init +++ b/deploy/deploy-peer/src/main/resources/config/init/ledger.init @@ -82,13 +82,6 @@ cons_parti.0.pubkey= #第0个参与方的角色权限策略,可选值有:UNION(并集),INTERSECT(交集);可选项; #cons_parti.0.roles-policy=UNION -#第0个参与方的共识服务的主机地址; -cons_parti.0.consensus.host=127.0.0.1 -#第0个参与方的共识服务的端口; -cons_parti.0.consensus.port=8900 -#第0个参与方的共识服务是否开启安全连接; -cons_parti.0.consensus.secure=false - #第0个参与方的账本初始服务的主机; cons_parti.0.initializer.host=127.0.0.1 #第0个参与方的账本初始服务的端口; @@ -96,7 +89,6 @@ cons_parti.0.initializer.port=8800 #第0个参与方的账本初始服务是否开启安全连接; cons_parti.0.initializer.secure=false - #--------------------- #第1个参与方的名称; cons_parti.1.name= @@ -110,13 +102,6 @@ cons_parti.1.pubkey= #第1个参与方的角色权限策略,可选值有:UNION(并集),INTERSECT(交集);可选项; #cons_parti.1.roles-policy=UNION -#第1个参与方的共识服务的主机地址; -cons_parti.1.consensus.host=127.0.0.1 -#第1个参与方的共识服务的端口; -cons_parti.1.consensus.port=8910 -#第1个参与方的共识服务是否开启安全连接; -cons_parti.1.consensus.secure=false - #第1个参与方的账本初始服务的主机; cons_parti.1.initializer.host=127.0.0.1 #第1个参与方的账本初始服务的端口; @@ -137,13 +122,6 @@ cons_parti.2.pubkey= #第2个参与方的角色权限策略,可选值有:UNION(并集),INTERSECT(交集);可选项; #cons_parti.2.roles-policy=UNION -#第2个参与方的共识服务的主机地址; -cons_parti.2.consensus.host=127.0.0.1 -#第2个参与方的共识服务的端口; -cons_parti.2.consensus.port=8920 -#第2个参与方的共识服务是否开启安全连接; -cons_parti.2.consensus.secure=false - #第2个参与方的账本初始服务的主机; cons_parti.2.initializer.host=127.0.0.1 #第2个参与方的账本初始服务的端口; @@ -164,13 +142,6 @@ cons_parti.3.pubkey= #第3个参与方的角色权限策略,可选值有:UNION(并集),INTERSECT(交集);可选项; #cons_parti.3.roles-policy=INTERSECT -#第3个参与方的共识服务的主机地址; -cons_parti.3.consensus.host=127.0.0.1 -#第3个参与方的共识服务的端口; -cons_parti.3.consensus.port=8930 -#第3个参与方的共识服务是否开启安全连接; -cons_parti.3.consensus.secure=false - #第3个参与方的账本初始服务的主机; cons_parti.3.initializer.host=127.0.0.1 #第3个参与方的账本初始服务的端口; diff --git a/deploy/deploy-peer/src/main/resources/docs/安装部署.MD b/deploy/deploy-peer/src/main/resources/docs/安装部署.MD index 573d4e48..3157a953 100644 --- a/deploy/deploy-peer/src/main/resources/docs/安装部署.MD +++ b/deploy/deploy-peer/src/main/resources/docs/安装部署.MD @@ -1,6 +1,6 @@ # JDChain安装部署指南 -本部署指南基于JDChain1.0.0.RELEASE版本来构建。 +本部署指南基于JDChain1.3.0.RELEASE版本来构建。 ## 1. 部署环境 ### 1.1 系统部署结构 ![部署结构](imgs/structure.png) @@ -21,7 +21,7 @@ JDChain默认共识机制采用的是BFTSmart,该共识算法要求最低四 ### 1.2 服务器配置 #### 1.2.1 硬件配置 -为了更好的运行,JDChain推荐使用 **Linux** 操作系统,Peer节点自身运行对内存要求较低,但对于Rocksdb存储而言,其对运行环境有较高要求,以下为单Peer节点可正常运行 **亿级交易** 的参考指标: +为了更好的运行,JDChain推荐使用 **Linux** 操作系统,Peer节点自身运行对内存要求较低(单节点建议Xms>=4g),但对于Rocksdb存储而言,其对运行环境有较高要求,以下为单Peer节点可正常运行 **亿级交易** 的参考指标: + 内核2.7.x及以上; + CPU主频 ≥ 2.0GHz; + 内存 ≥ 64G; @@ -59,8 +59,10 @@ Peer打包程序解压完后的安装包结构如下: + bin - keygen.sh - ledger-init.sh - - startup.sh - - shutdown.sh + - peer-startup.sh + - peer-shutdown.sh + - manager-startup.sh + - manager-shutdown.sh + config - init + ledger.init @@ -71,7 +73,6 @@ Peer打包程序解压完后的安装包结构如下: + %.pub + %.pwd - ledger-binding.conf - - application.properties + docs + libs + system @@ -152,8 +153,9 @@ local.parti.pwd=DYu3G8aGTMBW1WrTw76zxQJQU4DHLw9MLyy7peG4LKkY ledger.binding.out=../config #账本数据库的连接字符,下为rocksdb样例 -#rocksdb数据库连接格式:rocksdb://{path} -#redis数据库连接格式:redis://{ip}:{prot}/{db} +#rocksdb数据库连接格式:rocksdb://{path},例如:rocksdb:///export/App08/peer/rocks.db/rocksdb0.db +#redis数据库连接格式:redis://{ip}:{prot}/{db},例如:redis://127.0.0.1:6379/0 +#kvdb数据库连接格式:kvdb://{ip}:{prot}/{db},例如:kvdb://127.0.0.1:7078/test ledger.db.uri=rocksdb:///export/app/peer/rocks.db/rocksdb0.db #账本数据库的连接口令 @@ -168,32 +170,86 @@ ledger.db.pwd= ledger.seed=932dfe23-fe23232f-283f32fa-dd32aa76-8322ca2f-56236cda-7136b322-cb323ffe #账本的描述名称;此属性不参与共识,仅仅在当前参与方的本地节点用于描述用途; -#ledger.name= - -#声明的账本创建时间;格式为 “yyyy-MM-dd HH:mm:ss.SSSZ”,表示”年-月-日 时:分:秒:毫秒时区“;例如:“2019-10-17 05:21:58.069+0800”,其中,+0800 表示时区是东8区 -created-time=2019-10-17 05:21:58.069+0800 - +ledger.name= + +#声明的账本创建时间;格式为 “yyyy-MM-dd HH:mm:ss.SSSZ”,表示”年-月-日 时:分:秒:毫秒时区“;例如:“2019-08-01 14:26:58.069+0800”,其中,+0800 表示时区是东8区 +created-time=2019-08-01 14:26:58.069+0800 + + +#----------------------------------------------- +# 初始的角色名称列表;可选项; +# 角色名称不区分大小写,最长不超过20个字符;多个角色名称之间用半角的逗点“,”分隔; +# 系统会预置一个默认角色“DEFAULT”,所有未指定角色的用户都以赋予该角色的权限;若初始化时未配置默认角色的权限,则为默认角色分配所有权限; +# +# 注:如果声明了角色,但未声明角色对应的权限清单,这会忽略该角色的初始化; +# +#security.roles=DEFAULT, ADMIN, MANAGER, GUEST + +# 赋予角色的账本权限清单;可选项; +# 可选的权限如下; +# AUTHORIZE_ROLES, SET_CONSENSUS, SET_CRYPTO, REGISTER_PARTICIPANT, +# REGISTER_USER, REGISTER_DATA_ACCOUNT, REGISTER_CONTRACT, UPGRADE_CONTRACT, +# SET_USER_ATTRIBUTES, WRITE_DATA_ACCOUNT, +# APPROVE_TX, CONSENSUS_TX +# 多项权限之间用逗点“,”分隔; +# +#security.role.DEFAULT.ledger-privileges=REGISTER_USER, REGISTER_DATA_ACCOUNT + +# 赋予角色的交易权限清单;可选项; +# 可选的权限如下; +# DIRECT_OPERATION, CONTRACT_OPERATION +# 多项权限之间用逗点“,”分隔; +# +#security.role.DEFAULT.tx-privileges=DIRECT_OPERATION, CONTRACT_OPERATION + +# 其它角色的配置示例; +# 系统管理员角色:只能操作全局性的参数配置和用户注册,只能执行直接操作指令; +#security.role.ADMIN.ledger-privileges=CONFIGURE_ROLES, AUTHORIZE_USER_ROLES, SET_CONSENSUS, SET_CRYPTO, REGISTER_PARTICIPANT, REGISTER_USER +#security.role.ADMIN.tx-privileges=DIRECT_OPERATION + +# 业务主管角色:只能够执行账本数据相关的操作,包括注册用户、注册数据账户、注册合约、升级合约、写入数据等;能够执行直接操作指令和调用合约; +#security.role.MANAGER.ledger-privileges=CONFIGURE_ROLES, AUTHORIZE_USER_ROLES, REGISTER_USER, REGISTER_DATA_ACCOUNT, REGISTER_CONTRACT, UPGRADE_CONTRACT, SET_USER_ATTRIBUTES, WRITE_DATA_ACCOUNT, +#security.role.MANAGER.tx-privileges=DIRECT_OPERATION, CONTRACT_OPERATION + +# 访客角色:不具备任何的账本权限,只有数据读取的操作;也只能够通过调用合约来读取数据; +#security.role.GUEST.ledger-privileges= +#security.role.GUEST.tx-privileges=CONTRACT_OPERATION + + +#----------------------------------------------- #共识服务提供者;必须; consensus.service-provider=com.jd.blockchain.consensus.bftsmart.BftsmartConsensusProvider -#共识服务的参数配置;必须; -#consensus.conf=/export/app/peer/config/init/bftsmart.config +#共识服务的参数配置;推荐使用绝对路径;必须; consensus.conf=bftsmart.config #密码服务提供者列表,以英文逗点“,”分隔;必须; crypto.service-providers=com.jd.blockchain.crypto.service.classic.ClassicCryptoService, \ com.jd.blockchain.crypto.service.sm.SMCryptoService +#从存储中加载账本数据时,是否校验哈希;可选; +crypto.verify-hash=true + +#哈希算法; +crypto.hash-algorithm=SHA256 + + #参与方的个数,后续以 cons_parti.id 分别标识每一个参与方的配置; cons_parti.count=4 - +#--------------------- #第0个参与方的名称; cons_parti.0.name= #第0个参与方的公钥文件路径; cons_parti.0.pubkey-path= #第0个参与方的公钥内容(由keygen工具生成);此参数优先于 pubkey-path 参数; cons_parti.0.pubkey= + +#第0个参与方的角色清单;可选项; +#cons_parti.0.roles=ADMIN, MANAGER +#第0个参与方的角色权限策略,可选值有:UNION(并集),INTERSECT(交集);可选项; +#cons_parti.0.roles-policy=UNION + #第0个参与方的账本初始服务的主机; cons_parti.0.initializer.host=127.0.0.1 #第0个参与方的账本初始服务的端口; @@ -201,24 +257,71 @@ cons_parti.0.initializer.port=8800 #第0个参与方的账本初始服务是否开启安全连接; cons_parti.0.initializer.secure=false +#--------------------- #第1个参与方的名称; cons_parti.1.name= #第1个参与方的公钥文件路径; cons_parti.1.pubkey-path= #第1个参与方的公钥内容(由keygen工具生成);此参数优先于 pubkey-path 参数; cons_parti.1.pubkey= + +#第1个参与方的角色清单;可选项; +#cons_parti.1.roles=MANAGER +#第1个参与方的角色权限策略,可选值有:UNION(并集),INTERSECT(交集);可选项; +#cons_parti.1.roles-policy=UNION + #第1个参与方的账本初始服务的主机; cons_parti.1.initializer.host=127.0.0.1 #第1个参与方的账本初始服务的端口; cons_parti.1.initializer.port=8810 #第1个参与方的账本初始服务是否开启安全连接; cons_parti.1.initializer.secure=false + +#--------------------- +#第2个参与方的名称; +cons_parti.2.name= +#第2个参与方的公钥文件路径; +cons_parti.2.pubkey-path= +#第2个参与方的公钥内容(由keygen工具生成);此参数优先于 pubkey-path 参数; +cons_parti.2.pubkey= + +#第2个参与方的角色清单;可选项; +#cons_parti.2.roles=MANAGER +#第2个参与方的角色权限策略,可选值有:UNION(并集),INTERSECT(交集);可选项; +#cons_parti.2.roles-policy=UNION + +#第2个参与方的账本初始服务的主机; +cons_parti.2.initializer.host=127.0.0.1 +#第2个参与方的账本初始服务的端口; +cons_parti.2.initializer.port=8820 +#第2个参与方的账本初始服务是否开启安全连接; +cons_parti.2.initializer.secure=false + +#--------------------- +#第3个参与方的名称; +cons_parti.3.name= +#第3个参与方的公钥文件路径; +cons_parti.3.pubkey-path= +#第3个参与方的公钥内容(由keygen工具生成);此参数优先于 pubkey-path 参数; +cons_parti.3.pubkey= + +#第3个参与方的角色清单;可选项; +#cons_parti.3.roles=GUEST +#第3个参与方的角色权限策略,可选值有:UNION(并集),INTERSECT(交集);可选项; +#cons_parti.3.roles-policy=INTERSECT + +#第3个参与方的账本初始服务的主机; +cons_parti.3.initializer.host=127.0.0.1 +#第3个参与方的账本初始服务的端口; +cons_parti.3.initializer.port=8830 +#第3个参与方的账本初始服务是否开启安全连接; +cons_parti.3.initializer.secure=false ``` 账本初始化过程中,需要其他Peer节点的公钥信息进行验证及保存,因此每个节点都需要获取其他Peer节点的公钥信息至本地。配置中cons_parti.N.*****中的N需按照实际每个参与方定义的序号配置(该配置为local.conf中的local.parti.id)。其他参数根据实际环境进行配置。 > 注意:上述config中只显示了两个参与方(Peer节点)的配置信息,其他参与方(默认是4个节点)的配置方式一致! -##### 2.3.1.1 bftsmart.config配置 +##### 2.3.1.3 bftsmart.config配置 ```config system.server.0.network.host=127.0.0.1 system.server.0.network.port=16000 @@ -247,25 +350,33 @@ system.initial.view = 0,1,2,3 cd bin ./ledger-init.sh ``` -执行命令之后,会在 *config* 目录下生成ledger-binding.conf文件,该文件即账本初始化生成的文件,Peer节点启动时需要依赖该文件。 +执行命令之后,控制台会显示如下类似信息: +``` +------ Web controller of Ledger Initializer[127.0.0.1:30010] was started. ------ + +Init settings and sign permision... +[PERMISSION_READY] Ledger init permission has already prepared! Any key to continue... +``` +然后需要依次启动剩余节点的初始化脚本(*ledger-init.sh*),根据提示按任意键继续。 +如果其它节点没有准备好,控制台会展示“Connection refused”异常信息,不断进行重试操作。目前默认设置为重试180次操作,每次间隔时间10秒。 +执行成功后会在 *config* 目录下生成ledger-binding.conf文件,该文件即账本初始化生成的文件,Peer节点启动时需要依赖该文件。 > 1)注意:因为JDChain支持多账本形式,若config/ledger-binding.conf文件在初始化之前就存在的话,初始化操作后不会覆盖其中的内容,会以追加的方式写入。若第一次创建账本,建议先将该文件删除再进行初始化! -> 2)注意:Peer节点会定时检测ledger-binding.conf,有新账本加入时会自动进行更新,不需要重启Peer节点!目前默认时间为封5自动更新,即:每个小时的5/15/25/35/45/55分钟会执行; +> 2)注意:Peer节点会定时检测ledger-binding.conf,有新账本加入时会自动进行更新,不需要重启Peer节点!目前默认时间每隔5秒钟自动更新; 账本初始化成功后,每个Peer节点对应的Rocksdb都会写入该账本相关的数据。 ### 2.4 Peer节点安装 -Peer节点启动依赖于 *config* 目录下ledger-binding.conf的配置,该文件由 *2.3章节* 操作生成,无须做任何修改;application.properties文件中主要用于配置Peer节点对外HTTP端口。 -> 注意:application.properties文件可能不存在,可手动创建。该文件中配置适用于SpringBoot2.x版本的相关参数,不限于目前内置的启动端口。 +Peer节点启动依赖于 *config* 目录下ledger-binding.conf的配置,该文件由 *2.3章节* 操作生成,无须做任何修改。 由于Peer节点启动后会自动与其他参与节点进行通信,因此需要同时启动4个Peer节点,只需要执行startup.sh即可,参考命令: ```shell cd bin -./startup.sh +./peer-startup.sh ``` > 1)注意:startup.sh命令中可修改启动端口,默认为:-p 7080; -> 2)注意:Peer节点会与账本中涉及到的参与方进行通信,当通信不成功(例如有节点尚未启动)时,会自动进行重试,因此多个Peer节点启动可不必完全同时进行。目前默认设置为重试16次操作,每次间隔时间2秒。 +> 2)注意:Peer节点会与账本中涉及到的参与方进行通信,当通信不成功(例如有节点尚未启动)时,会自动进行重试,因此多个Peer节点启动可不必完全同时进行。目前默认设置为重试601次操作,每次间隔时间3秒。 ### 2.5 Gateway节点安装 GateWay(网关)节点可以认为是一个过滤节点,交易的提交及账本的查询都需要通过网关节点与Peer节点进行通信。