我的初始Hyperledger Fabric网络如下:
org1.example.com
有2个RAFT节点。系统通道名称为system-channel
(仅定义了1个联盟)。应用程序通道名称为channel1
,其中org1.example.com
的对等方运行chaincode1
。请注意,没有单独的订购者组织。
系统频道配置文件为:
OrdererGenesis:
<<: *ChannelDefaults
Orderer:
<<: *OrdererDefaults
Organizations:
- *Org1
Consortiums:
SampleConsortium:
Organizations:
- *Org1
我想添加另一个组织org2.example.com
,以便最终的网络为:
我为system-channel
采取的步骤(我遵循了https://hyperledger-fabric.readthedocs.io/en/release-1.4/raft_configuration.html#reconfiguration):
Org2MSP
中的订购者渠道组添加system-channel
定义Org2MSP
的Consortium渠道组中添加system-channel
定义channel_group.groups.Orderer.values.ConsensusType.value.metadata.consenters
中的system-channel
orderer0.org2.example.com
system-channel
(即.channel_group.values.OrdererAddresses.value.addresses
)中的订购者地址列表中以上所有步骤均运作良好,orderer0.org2.example.com
服务system-channel
继续,我为channel1
采取的步骤:
Org2MSP
中的订购者渠道组添加channel1
定义Org2MSP
中的应用程序通道组添加channel1
定义orderer0.org2.example.com
添加到channel1
中的订购者地址列表中,即.channel_group.values.OrdererAddresses.value.addresses
orderer0.org2.example.com
的信息(tls证书等)添加到同意者列表,即channel_group.groups.Orderer.values.ConsensusType.value.metadata.consenters
中的channel1
直到步骤3,一切正常。完成第4步后,我开始在新添加的订购者channel1 does not exist
中看到orderer0.org2.example.com
错误:
2019-05-09 09:38:03.360 UTC [comm.grpc.server] 1 -> INFO 05a streaming call completed grpc.service=orderer.Cluster grpc.method=Step grpc.peer_address=192.168.224.6:43116 grpc.peer_subject="CN=orderer0.org1.example.com,OU=peer+OU=org1,O=org1.example.com,L=Singapore,ST=Singapore,C=SG" error="channel channel1 doesn't exist" grpc.code=Unknown grpc.call_duration=711.5µs
在当前的RAFT负责人中,也有错误消息(3表示orderer0.org2.example.com
:
2019-05-09 09:38:02.859 UTC [orderer.consensus.etcdraft] logSendFailure -> ERRO 0c5 Failed to send StepRequest to 3, because: aborted channel=channel1 node=1
似乎orderer0.org2.example.com
不知道它应该为channel1
服务。我也看不到channel1
的{{1}}中的/var/hyperledger/production/orderer/chains
文件夹
作为故障排除的一部分,我尝试保留所有包含链的订购者的orderer0.org2.example.com
文件夹。关闭/var/hyperledger/production/orderer
和orderer0.org1.example.com
,并将orderer0.org2.example.com
文件夹从channel1
复制到orderer0.org1.example.com
,最后启动两个订购者。
现在orderer0.org2.example.com
知道它需要为orderer0.org2.example.com
提供服务,如日志所证明的那样
channel1
基于上述内容,很明显2019-05-10 02:36:04.161 UTC [orderer.consensus.etcdraft] apply -> INFO 044 Applied config change to add node 1, current nodes in channel: [1] channel=channel1 node=3
2019-05-10 02:36:04.161 UTC [orderer.consensus.etcdraft] apply -> INFO 045 Applied config change to add node 2, current nodes in channel: [1 2] channel=channel1 node=3
2019-05-10 02:36:04.161 UTC [orderer.consensus.etcdraft] writeBlock -> INFO 046 Got block [6], expect block [7], this node was forced to catch up channel=channel1 node=3
2019-05-10 02:36:04.161 UTC [orderer.consensus.etcdraft] apply -> INFO 047 Applied config change to add node 3, current nodes in channel: [1 2 3] channel=channel1 node=3
无法接收orderer0.org2.example,com
的块来开始为频道提供服务。对于同级,同级可以接收该阻止并发出channel1
,但订购者不能这样做。我想知道我要走哪一步。
要模拟环境并重现问题,请参阅:https://github.com/aldredb/bring-your-own-orderer
答案 0 :(得分:0)
此问题已解决。问题是我没有使用最新的配置块作为新订购者orderer0.org2.example.com
中的引导块。完成上述操作后,orderer0.org2.example.com
就可以检测到channel1
:
2019-05-10 14:06:04.778 UTC [orderer.common.server] replicateDisabledChains -> INFO 072 Successfully replicated 0 chains: []
2019-05-10 14:06:44.680 UTC [orderer.common.server] replicateDisabledChains -> INFO 073 Found 1 inactive chains: [channel1]
2019-05-10 14:06:44.689 UTC [orderer.common.cluster] ReplicateChains -> INFO 074 Will now replicate chains [channel1]