对于联盟链的业务中搭建一个私有网络的 IPFS 集群仍是颇有必要的,私有网络集群容许 IPFS 节点只链接到拥有共享密钥的其余对等节点,网络中的节点不响应来自网络外节点的通讯。
IPFS-Cluster 是一个独立的应用程序和一个 CLI 客户端,它跨一组 IPFS 守护进程分配、复制和跟踪 pin。它使用基于 Raft 一致性算法来协调存储,将数据集分布到参与节点上。对于咱们要将一个 peer 上的存储同步备份到全部集群上其余的 peers 时,或者对集群的节点管理,这时 IPFS-Cluster 就会起到一个很好的做用。
下面简单描述一下 IPFS 私有网络以及 IPFS-Cluster 集群的搭建配置过程(Ubuntu16.04)。git
IPFS 和 IPFS-Cluster 默认的端口:
IPFS:github
IPFS-CLUSTER:算法
IPFS 官方提供的安装方式有安装包方式,ipfs-update 方式,源码编译安装方式,具体能够查看 https://docs.ipfs.io/guides/g...
这里为了 ipfs 版本选择和升级,因此使用ipfs-update
方式安装,Go 是必须的,对于 Go 的安装这里再也不赘述。shell
在各个节点中安装ipfs-update
:bootstrap
go get -u github.com/ipfs/ipfs-update
也比较简单,因为 ipfs.io 官网被 dns 污染的缘由,安装之后须要配置一下各个节点的/etc/hosts
:bash
209.94.78.78 ipfs.io 209.94.90.1 ipfs.io
经过 ipfs-update versions
能够 列出全部可使用和能够下载的ipfs
版本.咱们这里直接安装最新的版本:网络
$ ipfs-update install latest fetching go-ipfs version v0.4.22 binary downloaded, verifying... success! stashing old binary installing new binary to /home/hector/go/bin/ipfs checking if repo migration is needed... Installation complete!
这样ipfs
就安装成功了,接下来咱们须要为每台节点的 IPFS 初始化一下:dom
ipfs init
swarm.key
密钥容许咱们建立一个私有网络,并告诉网络节点只和拥有相同秘钥的节点通讯,在一个节点上执行下面命令:tcp
go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen ipfs-swarm-key-gen > ~/.ipfs/swarm.key
经过scp
或者上传的方式将生成的swarm.key
拷贝到每一台节点的~/.ipfs/swarm.key
。ide
为了避免链接全球的 IPFS 网络,你须要将默认的 bootstrap 的节点信息删除。
ipfs bootstrap rm --all
在每台节点中添加第一个节点的 bootstrap:
ipfs bootstrap add /ip4/192.168.11.11/tcp/4001/ipfs/QmSyQFFm5KdB9zoTNQJhPnMs4LYsVmEpY427QYxH2CaFqL
QmSyQFFm5KdB9zoTNQJhPnMs4LYsVmEpY427QYxH2CaFqL
为ipfs init
时生成的节点 ID,也能够经过ipfs id
查看当前节点的 ID。
咱们还须要设置环境变量LIBP2P FORCE PNET
来强制咱们的网络进入私有模式
export LIBP2P_FORCE_PNET=1
每台的 IPFS 启动都加入系统的守护进程启动,添加 /etc/systemd/system/ipfs.service
[Unit] Description=IPFS Daemon After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=simple ExecStart=/usr/local/bin/ipfs daemon --enable-namesys-pubsub User=root [Install] WantedBy=multi-user.target
如今能够经过下面的命令来启动 IPFS 的后台守护进程了:
systemctl daemon-reload systemctl enable ipfs systemctl start ipfs systemctl status ipfs
IPFS-Cluster 包含两个组件:
-
咱们将ipfs-cluster
克隆到 GOPATH 下,而后 make 编译安装(系统已安装 make):
git clone https://github.com/ipfs/ipfs-cluster.git $GOPATH/src ipfs-cluster make install
查看一下是否安装成功:
ipfs-cluster-service --version ipfs-cluster-ctl --version
相似于 IPFS 的秘钥,咱们管理节点中生成一个随机密钥:
od -vN 32 -An -tx1 /dev/urandom | tr -d ' \n'
将生成的随机你字符串加入到环境变量中,好比:b55262c36de6f97bd50b5233f75866445ec51db74613bad78e906c4dc9ba1d30
分别修改每个节点的的~/.bashrc
添加到环境变量中:
export CLUSTER_SECRET=b55262c36de6f97bd50b5233f75866445ec51db74613bad78e906c4dc9ba1d30
保存后别忘了 source ~/.bashrc
每一台节点执行初始化命令:
ipfs-cluster-service init
在管理节点启动进程
ipfs-cluster-service daemon
其余节点启动--bootstrap
添加主节点:
ipfs-cluster-service daemon --bootstrap /ip4/192.168.11.11/tcp/9096/ipfs/12D3KooWEGrD9d3n6UJNzAJDyhfTUZNQmQz4k56Hb6TrYEyxyW2F
这里注意下,12D3KooWEGrD9d3n6UJNzAJDyhfTUZNQmQz4k56Hb6TrYEyxyW2F
是 IPFS-Cluster 节点 ID,不是 IPFS 节点 ID,能够经过ipfs-cluster-service id
查看。
能够经过命令查看集群节点状态:
ipfs-cluster-ctl peers ls
添/etc/systemd/system/ipfs-cluster.service
:
[Unit] Description=IPFS-Cluster Daemon Requires=ipfs After=syslog.target network.target remote-fs.target nss-lookup.target ipfs [Service] Type=simple ExecStart=/root/go/bin/ipfs-cluster-service daemon User=root [Install] WantedBy=multi-user.target
如今能够经过下面的命令来启动 ipfs-cluster 的后台守护进程了:
systemctl daemon-reload systemctl enable ipfs-cluster systemctl start ipfs-cluster systemctl status ipfs-cluster
在其中一台节点中添加一个文件:
ipfs-cluster-ctl add test.txt
经过添加的文件 CID 来查看文件状态,能够看到文件以及在全部节点中PINNED
ipfs-cluster-ctl status CID
转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记
若是以为本篇文章对您十分有益,何不 打赏一下
本文连接地址: IPFS 私有网络集群搭建
<img alt="知识共享许可协议" style="border-width:0" src="https://i.creativecommons.org/l/by-nc/4.0/80x15.png" />
本做品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可