如果饿了就吃,困了就睡,渴了就喝,人生就太无趣了
单节点安装
1.环境准备
本人使用的是CentOS7 的虚拟机,安装了docker和docker-compose工具。
2. 编辑docker-compose文件
创建并编辑文件
vim docker-compose.yml
编辑内容如下
version: '2.1'
services:
mongodb:
image: mongo:3.6
ports:
- "27017:27017"
command: mongod
bigchaindb:
image: bigchaindb/bigchaindb
depends_on:
- mongodb
- tendermint
environment:
BIGCHAINDB_DATABASE_BACKEND: localmongodb
BIGCHAINDB_DATABASE_HOST: mongodb
BIGCHAINDB_DATABASE_PORT: 27017
BIGCHAINDB_SERVER_BIND: 0.0.0.0:9984
BIGCHAINDB_WSSERVER_HOST: 0.0.0.0
BIGCHAINDB_WSSERVER_ADVERTISED_HOST: bigchaindb
BIGCHAINDB_TENDERMINT_HOST: tendermint
BIGCHAINDB_TENDERMINT_PORT: 26657
ports:
- "9984:9984"
- "9985:9985"
- "26658:26658"
healthcheck:
test: ["CMD", "bash", "-c", "curl http://bigchaindb:9984 && curl http://tendermint:26657/abci_query"]
interval: 3s
timeout: 5s
retries: 3
#command: 'bigchaindb start'
tendermint:
image: tendermint/tendermint:0.22.8
entrypoint: ''
ports:
- "26656:26656"
- "26657:26657"
command: sh -c "tendermint init && tendermint node --consensus.create_empty_blocks=false --proxy_app=tcp://bigchaindb:26658"
3. 运行BigchainDB节点
docker-compose up -d
运行成功后查看容器状态,启动成功会产生3个容器。如图1:
多节点安装
1. 准备节点
1.1 环境准备
准备四个节点的运行环境,本人安装是使用的4个CentOS7的虚拟机环境,每个几点环境需要安装docker
和docker-compose
工具。
1.2 获取每个节点的IP
本人的四台虚拟机的ip如下:
node0:192.168.85.147
node1:192.168.85.136
node2:192.168.85.137
node3:192.168.85.146
1.3 创建目录
在每各节点都创建bigchaindb
文件夹,如图2:这是最终的bigchaindb
文件夹结构,现在可以看一下,这些文件会在后面出现。
2. docker-compose
准备docker-compose文件,在bigchaindb
目录下创建docker-compose.yml
vim docker-compose.yml
编辑下面内容:
version: '2.1'
services:
mongodb:
image: mongo:3.6
ports:
- "27017:27017"
command: mongod
bigchaindb:
image: bigchaindb/bigchaindb
depends_on:
- mongodb
- tendermint
environment:
BIGCHAINDB_DATABASE_BACKEND: localmongodb
BIGCHAINDB_DATABASE_HOST: mongodb
BIGCHAINDB_DATABASE_PORT: 27017
BIGCHAINDB_SERVER_BIND: 0.0.0.0:9984
BIGCHAINDB_WSSERVER_HOST: 0.0.0.0
BIGCHAINDB_WSSERVER_ADVERTISED_HOST: bigchaindb
BIGCHAINDB_TENDERMINT_HOST: tendermint
BIGCHAINDB_TENDERMINT_PORT: 26657
ports:
- "9984:9984"
- "9985:9985"
- "26658:26658"
healthcheck:
test: ["CMD", "bash", "-c", "curl http://bigchaindb:9984 && curl http://tendermint:26657/abci_query"]
interval: 3s
timeout: 5s
retries: 3
#command: 'bigchaindb start'
tendermint:
image: tendermint/tendermint:0.22.8
volumes:
- ./tmdata:/tendermint
entrypoint: ''
ports:
- "26656:26656"
- "26657:26657"
command: sh -c "tendermint init && tendermint node --consensus.create_empty_blocks=false --proxy_app=tcp://bigchaindb:26658"
3. 下载 tendermint
因为需要使用tendermint
来生成配置文件,就是tmdata
下的文件。所以需要下载编译好的tendermint
二进制文件,因为BigchainDB需要使用的tendermint的0.22.8版本,所以下载0.22.8的二进制文件。
#下载二进制文件
wget https://github.com/tendermint/tendermint/releases/download/v0.22.8/tendermint_0.22.8_linux_amd64.zip
#解压文件
unzip unzip tendermint_0.22.8_linux_amd64.zip
#检查版本
./tendermint version
4. 生成配置文件
使用tendermint testnet
来生成所有节点的配置文件,使用tendermint testnet -h
查看命令详细信息。
4.1 生成多个节点配置信息
命令默认生成4个节点的配置文件,如果需要更多节点的配置信息,在tendermint testnet
命令后加-v
,例:需要生成10个节点配置信息
tendermint testnet -v 10
4.2 配置连续的ip的配置信息
如果节点的ip是连续的,例:192.168.85.100~192.168.85.103
tendermint testnet starting-ip-address 192.168.85.100
这样配置文件中的ip就是配置好的。
5. 修改配置文件
如果是按照4.2中的方法生成的配置文件,就直接跳过此步骤。
生成的配置文件会在当前文件夹下生成mytestnet
文件。目录如图3:
将每一个config.toml
文件进行修改,修改第93行,如图4:将其中node0-node3中改成对应的ip
将各个config
文件发送到各个节点bigchaindb/tmdata
。
scp -r /mytestnet/node0/ [email protected]:/root/bigchaindb/tmdata
scp -r /mytestnet/node1/ [email protected]:/root/bigchaindb/tmdata
scp -r /mytestnet/node2/ [email protected]:/root/bigchaindb/tmdata
scp -r /mytestnet/node3/ [email protected]:/root/bigchaindb/tmdata
6. 修改文件夹用户组
因为docker-compose.yml
中挂载的文件夹bigchaindb/tmdata
,如果不改变该文件夹的用户组,启动后,tendermint
会报错Permission denied
,所以需要修改用户组,每个节点都需要修改tmdata
:
chown -R 100 tmdata
chgrp -R 1000 tmdata
7. 启动
每个节点都运行docker-compose up -d
,使用docker ps
查看启动的容器,正常启动会有3个容器。tendermint
,mongodb
和bigchaindb
,如图5
7.1 检查集群启动情况
访问:http://192.168.85.147:26657/abci_info
返回信息如图6:块高为1表示成功。
8. 测试
8.1 发送交易
选择其中一个节点,发送交易,
发送POST交易:192.168.85.146:9984/api/v1/transactions?mode=async
,发送输入如下:
{
"asset": {
"data": {
"msg": "Hello BigchainDB!"
}
},
"id": "4957744b3ac54434b8270f2c854cc1040228c82ea4e72d66d2887a4d3e30b317",
"inputs": [
{
"fulfillment": "pGSAIDE5i63cn4X8T8N1sZ2mGkJD5lNRnBM4PZgI_zvzbr-cgUCy4BR6gKaYT-tdyAGPPpknIqI4JYQQ-p2nCg3_9BfOI-15vzldhyz-j_LZVpqAlRmbTzKS-Q5gs7ZIFaZCA_UD",
"fulfills": null,
"owners_before": [
"4K9sWUMFwTgaDGPfdynrbxWqWS6sWmKbZoTjxLtVUibD"
]
}
],
"metadata": {
"sequence": 0
},
"operation": "CREATE",
"outputs": [
{
"amount": "1",
"condition": {
"details": {
"public_key": "4K9sWUMFwTgaDGPfdynrbxWqWS6sWmKbZoTjxLtVUibD",
"type": "ed25519-sha-256"
},
"uri": "ni:///sha-256;PNYwdxaRaNw60N6LDFzOWO97b8tJeragczakL8PrAPc?fpt=ed25519-sha-256&cost=131072"
},
"public_keys": [
"4K9sWUMFwTgaDGPfdynrbxWqWS6sWmKbZoTjxLtVUibD"
]
}
],
"version": "2.0"
}
8.2 查询
在另一个节点查询刚刚发送的交易,发送get请求:
http://192.168.85.147:9984/api/v1/assets/?search=Hello BigchainDB
查询结果如下:比对刚才的交易ID即可。
[
{
"data": {
"msg": "Hello BigchainDB!"
},
"id": "4957744b3ac54434b8270f2c854cc1040228c82ea4e72d66d2887a4d3e30b317"
}
]