IPFS私有网络集群搭建

摘要:
在联盟链的业务中,有必要建立一个专用网络IPFS集群。专用网络集群允许IPFS节点仅连接到具有共享密钥的其他对等节点。网络中的节点不响应来自网络外部节点的通信。以下是IPFS专用网络和IPFS群集配置过程的简要描述。删除默认引导节点。为了不连接到全局IPFS网络,需要删除默认的引导节点信息。

对于联盟链的业务中搭建一个私有网络的 IPFS 集群还是很有必要的,私有网络集群允许 IPFS 节点只连接到拥有共享密钥的其他对等节点,网络中的节点不响应来自网络外节点的通信。 IPFS-Cluster 是一个独立的应用程序和一个 CLI 客户端,它跨一组 IPFS 守护进程分配、复制和跟踪 pin。它使用基于 Raft 一致性算法来协调存储,将数据集分布到参与节点上。对于我们要将一个 peer 上的存储同步备份到所有集群上其他的 peers 时,或者对集群的节点管理,这时 IPFS-Cluster 就会起到一个很好的作用。 下面简单描述一下 IPFS 私有网络以及 IPFS-Cluster 集群的搭建配置过程(Ubuntu16.04)。

1578557801228

IPFS 和 IPFS-Cluster 默认的端口: IPFS

  • 4001 – 与其他节点同学端口
  • 5001 – API server
  • 8080 – Gateway server

IPFS-CLUSTER

  • 9094 – HTTP API endpoint
  • 9095 – IPFS proxy endpoint
  • 9096 – Cluster swarm 集群几点通信端口

Golang 安装

IPFS 官方提供的安装方式有安装包方式,ipfs-update 方式,源码编译安装方式,具体可以查看 https://docs.ipfs.io/guides/guides/install/ 这里为了 ipfs 版本选择和升级,所以使用ipfs-update方式安装,Go 是必须的,对于 Go 的安装这里不再赘述。

安装 ipfs-update

在各个节点中安装ipfs-update:

go get -u github.com/ipfs/ipfs-update

也比较简单,由于 ipfs.io 官网被 dns 污染的原因,安装以后需要配置一下各个节点的/etc/hosts

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 初始化一下:

ipfs init

创建共享的 key

swarm.key 密钥允许我们创建一个私有网络,并告诉网络节点只和拥有相同秘钥的节点通信,在一个节点上执行下面命令:

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

移除默认的 bootstrap 节点

为了不连接全球的 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 进程加入到系统进程中启动

每台的 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 包含两个组件:

  • ipfs-cluster-service 用于初始化集群 peer 并运行它的守护进程
  • ipfs-cluster-ctl 管理集群的节点和数据
  •  

我们将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 ' 
'

将生成的随机你字符串加入到环境变量中,比如: 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

将 IPFS-Cluster 节点加入到系统进程中启动

/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

免责声明:文章转载自《IPFS私有网络集群搭建》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇wlan接收器如何共享网络使用css将网页变成黑白色下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ipfs存储和获取数据

安装ipfs-api 切换到项目根目录,安装ipfs-api。 npm install --save ipfs-api   导入IPFS const ipfsAPI = require('ipfs-api'); const ipfs = ipfsAPI({host: 'localhost', port: '5001', protocol: 'http'})...

几个容器网络相关问题的分析和解决总结

【摘要】 网络/容器网络因为其本身的复杂性,以及很多侧重软件开发的童鞋并不熟悉网络,导致和网络/容器网络相关问题的定位、分析和解决都比较困难,很多时 候有无从下手之感。我对最近、再加上以前参与处理了的几个网络/容器网络相关的问题,总结如下,希望能给遇到类似的问题的童鞋一点启发。 目录 1. 目标主机上没有到源主机的路由,导致ping包没有返回 - rout...

RAC一个节点自动重启问题分析

题记:在RAC数据库的故障当中,节点重启的现象很常见,在这种问题的处理当中,有一定的规律性。为了更好的说明这个问题的处理过程,保证出现该类问题的时候,能够有序的进行处理,特编写此文档。  问题现象描述   此问题的现象比较明显,也就是数据库自动重启,或者是节点自动重启,客户端在数据库重启期间无法连接数据库,导致业务断连的现象。这种情况如果出现在业务高峰期间...

云计算与边缘计算协同 九大应用场景

一、云边协同的新浪潮 (一)边缘计算是云计算向边缘侧分布式拓展的新触角 欧洲电信标准化协会认为边缘计算是在移动网络边缘提供 IT 服务环境和计算能力,强调靠近移动用户,以减少网络操作和服务交付 的时延,提高用户体验。 Gartner 认为边缘计算描述了一种计算拓扑,在这种拓扑结构中, 信息处理、内容采集和分发均被置于距离信息更近的源头处完成。 维基百科认为...

基于Mix网络的通信系统安全性性能分析

高超     毛胜利 (黄石理工学院  计算机学院,湖北 黄石 435003) 摘要:文章论证了基于Mix的安全性,给出了基于Mix网络中各类节点的负载。Mix网络在提供较强匿名性的同时,系统中用户节点的期望负载不随系统规模的扩大而增加,消息的期望路径长度与系统规模无关,系统的可扩展性较好。 关键词:Mix网络;Crowds节点;通信安全 0 引言   M...

IBM HACMP 系列 安装和配置二

  一.  HACMP V5.x 标准和扩展配置 HACMP V5.1 引入了标准和扩展 SMIT 配置路径。   1.1 标准配置路径 标准路径允许用户容易地配置最常见的选项,例如: 1)        通过别名的 IPAT 网络 2)        共享的服务 IP 标签 3)        卷组和文件系统 4)        应用程序服务器     ...