This question is about orderers in different organizations. Is there any communication happens between two orderers of two different organizations? If so, how can we configure that and how does the consensus work?
(OR)
Is every organization has its own ordering service with multiple orderer nodes isolated from other organizations?
Any help understanding this would be appreciated.
There is only 1 ordering 'service'. This service is composed of several orderers. Usually just 3 or 5. All orderers communicate with the Kafka cluster which tells all the orderers what is included in a block. The orderers then send the new blocks to the peers. Peers may use any of the orderers. It is recommended to have all orderers within one Org. But I have run a configuration with 2 orderers in 1 org and 1 orderer in another org and it works fine.
Related
I thought peer's roll is processing transaction, managing chaincode and ledger.
Already I know there are endoring peer, committing peer, anchor peer, leader peer.
My question is how many peers are needed.
According to fabric docs, when client doing something, it approaches the peer by changing the env.
For example, if there are 1000 clients who access the same channel at the same time, do they need at least 1000 peers? I asked this question because there is only one client in the tutorial.
Many clients can access a single peer. Typically there will be multiple organizations in a Fabric network, with each organization having a few peers for redundancy and load balancing of client requests.
How can we connect a single Fabric - node/peer to different Fabric
networks?
A company called ABC is part of 2 networks and hosting 2 different nodes.
Can we create a network of networks where a single node can be part of many networks?
First of All,
In hyperledger fabric, we called network as a consortium
The consortium has a group of organizations, each organization can have (n) of orderers and peers
Coming to your question, yes peer can be part of multiple consortium as long as peer-organization is a member of that consortium
We've a below network setup for hyperledger fabric:
3 Ordering Service nodes, 4 Kafka brokers and 3 Organizations (2 peers in each organization)
Requirement is - we need to make sure leader peer from each organization is receiving blocks via deliver RPC from a "specific" ordering service node.
How can we configure a specific ordering service node for peers in fabric?
There's no "magic" way to configure something like this in Fabric. The orderer endpoint information is stored in the system channel so normally all 3 of the Ordering Service endpoints would be in their so that any peer from any organization is aware of all the endpoints (for fault tolerance).
With the current Kafka-based ordering service, you might be able to achieve what you want by only setting a single endpoint in the orderer addresses section and then making sure that each organization resolved that DNS name to the specific endpoint desired.
P2P has two different structures.
one is unstructured P2P and the other one is structured P2P.
I know fabric use hybrid-P2P.
And is it use strutured P2P?
Hyperledger Fabric really uses "structured" peer to peer communication.
Peers communicate with ordering service nodes and with other peer nodes.
Channels form the basis of the peer to peer communication (meaning that communication is scoped on a per channel basis).
For peer to orderer communication, this is structured based on channel definitions .... when a peer joins a channel, the channel definition is contained in the block passed via the JoinChannel API. This is a special type of block known as a config block and it contains the information about the ordering service endpoints, membership for the channel and optionally the endpoints of peers from other organizations (anchor peers).
Peers which belong to the same organization can also "gossip" and this is configured by setting a bootstrap peer when a peer starts up. From this, the peers within an org will "discover" each other.
If an organization chooses to expose public endpoints from multiple peers, peers from other organizations will discover these peers by connecting the to anchor peer for the other org for a given a channel.
Just looking at crypto-config.yaml for example - if I have an domain and host declared in OrdererOrgs, does this mean I will generate the certificates and keys for that particular host to sign proposed blocks?
If this host is on a separate VPN, what is the best practice for this host to take part in consensus (for example ipsec tunnel)?
First of all, you have to have very clear how is going to be your network, i.e. how many peers and orderers are going to compose your network. There, you can define an orderer or more for each organization.
Then, you start generating the elements that you need for your network:
The cryptogen tool generates you the certificates that you need for your network. You should define the crypto-config.yaml according with your network. If you have a domain and host declared in OrdererOrgs, it will generate the certificates and keys for that particular Orderer.
The configtxgen tool generates you the configuration for your channel. There, int the configtx.yaml, you define wich elements are gointo to take part in your channel.