构建联盟链,基于generator实现多机构对等部署(重点针对不同情况的操作步骤)
委员会议定
群组、机构、节点、创世区块机构
下载generator
## 前置准备
# 下载
cd ~/
git clone https://gitee.com/FISCO-BCOS/generator.git
# 安装
cd ~/generator && bash ./scripts/install.sh
./generator -h
# 获取节点二进制
./generator --download_fisco ./meta
# 检查二进制版本
./meta/fisco-bcos -v
初始化机构
# 初始化证书颁发机构
# cp -r ~/generator
# 初始化机构A
cp -r ~/generator ~/generator-A
# 初始化机构B
cp -r ~/generator ~/generator-B
# 初始化机构C
cp -r ~/generator ~/generator-C
1 创建链,生成初始群组和初始机构
1群组2机构4节点
- 机构A
- 节点30301 群组1
- 节点30302 群组1
- 机构B
- 节点30303 群组1
- 节点30304 群组1
1.1 链证书
证书颁发机构生成
## 证书颁发机构: 初始化链证书
cd ~/generator
# 证书颁发机构: 生成国密证书
./generator --generate_chain_certificate ./dir_chain_ca -g
# 证书颁发机构: 生成普通证书
./generator --generate_chain_certificate ./dir_chain_ca_normal
ls ./dir_chain_ca # gmca.crt gmca.key 分别为 链证书、链私钥
ls ./dir_chain_ca_normal # ca.crt ca.key 分别为 为链证书、链私钥
1.2 新机构(含节点)
1.2.1 证书颁发机构 生成、发送机构证书
cd ~/generator
# 证书颁发机构: 生成机构A证书
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyA -g
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca_normal agencyA_normal
# 证书颁发机构: 发送链证书、机构证书、机构私钥至机构A
cp ./dir_agency_ca/agencyA/* ~/generator-A/meta/
cp ./dir_agency_ca/agencyA_normal/* ~/generator-A/meta/
# 证书颁发机构: 生成机构B证书
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyB -g
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca_normal agencyB_normal
# 证书颁发机构: 发送链证书、机构证书、机构私钥至机构B
cp ./dir_agency_ca/agencyB/* ~/generator-B/meta/
cp ./dir_agency_ca/agencyB_normal/* ~/generator-B/meta/
1.2.2 机构 配置node_deployment.ini、生成节点证书和节点P2P端口地址文件
## 机构A:修改配置文件
cd ~/generator-A
# 机构A:配置文件内容
cat > ./conf/node_deployment.ini << EOF
[group]
group_id=1
[node0]
; host ip for the communication among peers.
; Please use your ssh login ip.
p2p_ip=127.0.0.1
; listen ip for the communication between sdk clients.
; This ip is the same as p2p_ip for physical host.
; But for virtual host e.g. vps servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
; for more instructions.
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30300
channel_listen_port=20200
jsonrpc_listen_port=8545
[node1]
p2p_ip=127.0.0.1
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30301
channel_listen_port=20201
jsonrpc_listen_port=8546
EOF
# 机构A:根据node_deployment.ini生成节点证书、节点P2P连接地址文件
./generator --generate_all_certificates ./agencyA_node_info -g
ls ./agencyA_node_info
## 机构B:修改配置文件
cd ~/generator-B
# 机构B:配置文件内容
cat > ./conf/node_deployment.ini << EOF
[group]
group_id=1
[node0]
; host ip for the communication among peers.
; Please use your ssh login ip.
p2p_ip=127.0.0.1
; listen ip for the communication between sdk clients.
; This ip is the same as p2p_ip for physical host.
; But for virtual host e.g. vps servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
; for more instructions.
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30302
channel_listen_port=20202
jsonrpc_listen_port=8547
[node1]
p2p_ip=127.0.0.1
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30303
channel_listen_port=20203
jsonrpc_listen_port=8548
EOF
# 机构B:根据node_deployment.ini生成节点证书、节点P2P连接地址文件
./generator --generate_all_certificates ./agencyB_node_info -g
ls ./agencyB_node_info
1.2.3 机构 相互交换连接信息文件
# 机构A:将节点P2P连接地址文件发送至机构B
cd ~/generator-A
cp ./agencyA_node_info/peers.txt ~/generator-B/meta/peersA.txt
# 机构B:将节点P2P连接地址文件发送至机构A
cd ~/generator-B
cp ./agencyB_node_info/peers.txt ~/generator-A/meta/peersB.txt
1.2.5 新群组
1.2.5.1 委员会 选取一个机构生成群组创世块
这里选定 机构A
1.2.5.2 生成创世区块的机构 收集其他机构节点的节点证书
# 机构B:发送节点证书至生成创世区块机构A
cd ~/generator-B
cp ./agencyB_node_info/gmcert*.crt ~/generator-A/meta/
1.2.5.3 生成创世区块的机构 配置group_genesis.ini
# 机构A:配置文件内容
cd ~/generator-A
cat > ./conf/group_genesis.ini << EOF
[group]
group_id=1
[nodes]
node0=127.0.0.1:30300
node1=127.0.0.1:30301
node2=127.0.0.1:30302
node3=127.0.0.1:30303
EOF
1.2.5.4 生成创世块的机构 生成群组创世区块
# 机构A:生成群组创世区块
cd ~/generator-A
./generator --create_group_genesis ./group -g
1.2.5.5 生成创世区块的机构 将生成的创世块文件至其他机构
# 机构A:分发群组1创世区块至机构B
cd ~/generator-A
cp ./group/group.1.genesis ~/generator-B/meta
1.2.6 机构 生成启动节点
# 机构A:生成所属节点
cd ~/generator-A
./generator --build_install_package ./meta/peersB.txt ./nodeA -g
ls ./nodeA
# 机构A:启动节点
bash ./nodeA/start_all.sh
ps -ef | grep fisco
## 机构B:生成所属节点
cd ~/generator-B
./generator --build_install_package ./meta/peersA.txt ./nodeB -g
bash ./nodeB/start_all.sh
##查看群组1节点运行状态
ps -ef | grep fisco
tail -f ~/generator-A/node*/node*/log/log* | grep +++
tail -f ~/generator-B/node*/node*/log/log* | grep +++
2 已有链创建新机构,加入已有群组
1群组3机构6节点
- 机构A
- 节点30301 群组1
- 节点30302 群组1
- 机构B
- 节点30303 群组1
- 节点30304 群组1
- 机构C
- 节点30305 群组1
- 节点30306 群组1
2.1 新机构
2.1.1 证书颁发机构 生成、发送机构证书
## 机构A:修改配置文件
cd ~/generator-C
# 机构A:配置文件内容
cat > ./conf/node_deployment.ini << EOF
[group]
group_id=1
[node0]
; host ip for the communication among peers.
; Please use your ssh login ip.
p2p_ip=127.0.0.1
; listen ip for the communication between sdk clients.
; This ip is the same as p2p_ip for physical host.
; But for virtual host e.g. vps servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
; for more instructions.
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30304
channel_listen_port=20204
jsonrpc_listen_port=8549
[node1]
p2p_ip=127.0.0.1
rpc_ip=127.0.0.1
channel_ip=0.0.0.0
p2p_listen_port=30305
channel_listen_port=20205
jsonrpc_listen_port=8550
EOF
# 机构C:根据node_deployment.ini生成节点证书、节点P2P连接地址文件
./generator --generate_all_certificates ./agencyC_node_info -g
ls ./agencyC_node_info
2.1.2 机构 配置node_deployment.ini、生成节点证书和节点P2P端口地址文件
# 机构C:将节点P2P连接地址文件发送至机构A
cd ~/generator-C
cp ./agencyC_node_info/peers.txt ~/generator-A/meta/peersC.txt
# 机构C:将节点P2P连接地址文件发送至机构B
cd ~/generator-C
cp ./agencyC_node_info/peers.txt ~/generator-B/meta/peersC.txt
# 机构A:将节点P2P连接地址文件发送至机构C
cd ~/generator-A
cp ./agencyA_node_info/peers.txt ~/generator-C/meta/peersA.txt
# 机构B:将节点P2P连接地址文件发送至机构C
cd ~/generator-B
cp ./agencyB_node_info/peers.txt ~/generator-C/meta/peersB.txt
2.1.3 机构 生成启动节点
cd ~/generator-C
# 机构C:合并A和B的
cat peersA.txt peersB.txt > peersAandB.txt
# 机构C:生成所属节点
./generator --build_install_package ./meta/peersAandB.txt ./nodeC -g
ls ./nodeC
# 机构C:启动节点
bash ./nodeC/start_all.sh
ps -ef | grep fisco
##查看群组1节点运行状态
ps -ef | grep fisco
tail -f ~/generator-C/node*/node*/log/log* | grep +++
3 已有链创建新群组,已有机构加入群组
2群组2机构6节点
- 机构A
- 节点30301 群组1 群组2
- 节点30302 群组1 群组2
- 机构B
- 节点30303 群组1 群组2
- 节点30304 群组1 群组2
- 机构C
- 节点30305 群组1
- 节点30306 群组1
3.1 选定新群组机构
3.1.1 委员会 选定新群组包含的机构
这里选定群组A 包含 机构A、机构B
3.2 新建组
3.2.1 委员会 选取一个机构生成群组创世块
这里选定 机构B
3.2.2 生成创世区块的机构 收集其他机构节点的节点证书
# 机构A:发送节点证书至生成创世区块机构B
cd ~/generator-A
cp ./agencyA_node_info/gmcert*.crt ~/generator-B/meta/
3.2.3 生成创世区块的机构 配置group_genesis.ini
# 机构B:配置文件内容
cd ~/generator-B
cat > ./conf/group_genesis.ini << EOF
[group]
group_id=2
[nodes]
node0=127.0.0.1:30300
node1=127.0.0.1:30301
node2=127.0.0.1:30302
node3=127.0.0.1:30303
EOF
3.2.4 生成创世块的机构 生成群组创世区块
# 机构A:生成群组创世区块
cd ~/generator-B
./generator --create_group_genesis ./group -g
3.2.5 生成创世区块的机构 将生成的创世块文件至其他机构
# 机构B:分发群组1创世区块至机构A
cd ~/generator-B
cp ./group/group.2.genesis ~/generator-A/meta
3.3 重启节点
# 机构A为现有节点初始化群组2
cd ~/generator-A
# 添加群组2配置文件至已有节点
./generator --add_group ./meta/group.2.genesis ./nodeA
# 重启机构A节点
bash ./nodeA/stop_all.sh
bash ./nodeA/start_all.sh
# 机构B为现有节点初始化群组2
cd ~/generator-B
# 添加群组2配置文件至已有节点
./generator --add_group ./meta/group.2.genesis ./nodeB
# 重启机构B节点
bash ./nodeB/stop_all.sh
bash ./nodeB/start_all.sh
## 查看群组2节点运行状态
ps -ef | grep fisco
tail -f ~/generator-A/node*/node*/log/log* | grep +++
tail -f ~/generator-B/node*/node*/log/log* | grep +++
4 已有链已有机构加入已有群组
2群组2机构4节点
- 机构A
- 节点30301 群组1 群组2
- 节点30302 群组1 群组2
- 机构B
- 节点30303 群组1 群组2
- 节点30304 群组1 群组2
- 机构C
- 节点30305 群组1 群组2
- 节点30306 群组1 群组2
5 已有链已有机构创建新节点
2群组2机构4节点
- 机构A
- 节点30301 群组1 群组2
- 节点30302 群组1 群组2
- 节点30306 群组1 群组2
- 机构B
- 节点30303 群组1 群组2
- 节点30304 群组1 群组2
- 机构C
- 节点30305 群组1 群组2
- 节点30306 群组1 群组2