centos7 下使用docker 搭建ipfs 集群

简介

IPFS是一个对等的分布式文件系统,它尝试为所有计算设备(ipfs矿机)连接同一个文件系统。在某些方面,IPFS类似于万维网,但它也可以被视作一个独立的BitTorrent群、在同一个Git仓库中交换对象。换种说法,IPFS提供了一个高吞吐量、按内容寻址的块存储模型,及与内容相关超链接。这形成了一个广义的Merkle有向无环图(DAG)。IPFS结合了分布式散列表、鼓励块交换和一个自我认证的命名空间。IPFS没有单点故障,并且节点不需要相互信任。分布式内容传递可以节约带宽,和防止HTTP方案可能遇到的DDoS攻击。
在这里插入图片描述

IPFS
该文件系统可以通过多种方式访问,包括FUSE与HTTP。将本地文件添加到IPFS文件系统可使其面向全世界可用。文件表示基于其哈希,因此有利于缓存。文件的分发采用一个基于BitTorrent的协议。其他查看内容的用户也有助于将内容提供给网络上的其他人。IPFS有一个称为IPNS的名称服务,它是一个基于PKI的全局命名空间,用于构筑信任链,这与其他NS兼容,并可以映射DNS、.onion、.bit等到IPNS。

1.0 实验环境

前置环境
1.docker容器环境
2.docker-compose
需要提前安装可以参考容器化部署脚本.
3.实验环境会用到三台主机自行搭建

1.1 新建docker-compose 启动目录

[root@localhost ~]# mkdir -p /data/ipfs
[root@localhost ~]# cd /data/ipfs
#新建容器挂载目录
[root@localhost ipfs]# mkdir data
[root@localhost ipfs]# mkdir staging
[root@localhost ipfs]# cat docker-compose.yaml 
version: '3'
services:
 ipfs:
    image: ipfs/go-ipfs:latest
    container_name: ipfs
    restart: always
    volumes:
      - ./staging:/export
      - ./data:/data/ipfs
    ports:
      - 4001:4001
      - 0.0.0.0:10053:5001
      - 0.0.0.0:10052:8080
    entrypoint: /sbin/tini -- /usr/local/bin/start_ipfs daemon --migrate=true --enable-gc

[root@localhost ipfs]# docker-compose up -d
Creating network "ipfs_default" with the default driver
Creating ipfs ... done

镜像没有他自己会去下载三台主机依次操作

1.2 查看容器id

[root@localhost ipfs]# docker exec -it ipfs sh 
#进入容器后执行
#/ ipfs repo gc
#清理无用的repo
/ # ipfs id
{
	"ID": "12D3KooWCBy35BSF18cqecMvuZdkrDscj1HqFstmJA3Ns5nrWyXc",
	"PublicKey": "CAESICM//vQpnV+npD2FuMJggvjPSqvdUNlzuECWdohNlGWH",
	"Addresses": [
		"/ip4/127.0.0.1/tcp/4001/p2p/12D3KooWCBy35BSF18cqecMvuZdkrDscj1HqFstmJA3Ns5nrWyXc",
		"/ip4/127.0.0.1/udp/4001/quic/p2p/12D3KooWCBy35BSF18cqecMvuZdkrDscj1HqFstmJA3Ns5nrWyXc",
		"/ip4/172.18.0.2/tcp/4001/p2p/12D3KooWCBy35BSF18cqecMvuZdkrDscj1HqFstmJA3Ns5nrWyXc",
		"/ip4/172.18.0.2/udp/4001/quic/p2p/12D3KooWCBy35BSF18cqecMvuZdkrDscj1HqFstmJA3Ns5nrWyXc"
	],
	"AgentVersion": "go-ipfs/0.12.2/0e8b121",
	"ProtocolVersion": "ipfs/0.1.0",
	"Protocols": [
		"/ipfs/bitswap",
		"/ipfs/bitswap/1.0.0",
		"/ipfs/bitswap/1.1.0",
		"/ipfs/bitswap/1.2.0",
		"/ipfs/id/1.0.0",
		"/ipfs/id/push/1.0.0",
		"/ipfs/lan/kad/1.0.0",
		"/ipfs/ping/1.0.0",
		"/libp2p/autonat/1.0.0",
		"/libp2p/circuit/relay/0.1.0",
		"/libp2p/circuit/relay/0.2.0/stop",
		"/p2p/id/delta/1.0.0",
		"/x/"
	]
}

/ # 

三台依次冲入如上步骤

#node1
/ # ipfs id
{
	"ID": "12D3KooWCBy35BSF18cqecMvuZdkrDscj1HqFstmJA3Ns5nrWyXc",
	"PublicKey": "CAESICM//vQpnV+npD2FuMJggvjPSqvdUNlzuECWdohNlGWH",
	"Addresses": [
		"/ip4/127.0.0.1/tcp/4001/p2p/12D3KooWCBy35BSF18cqecMvuZdkrDscj1HqFstmJA3Ns5nrWyXc",
		"/ip4/127.0.0.1/udp/4001/quic/p2p/12D3KooWCBy35BSF18cqecMvuZdkrDscj1HqFstmJA3Ns5nrWyXc",
		"/ip4/172.18.0.2/tcp/4001/p2p/12D3KooWCBy35BSF18cqecMvuZdkrDscj1HqFstmJA3Ns5nrWyXc",
		"/ip4/172.18.0.2/udp/4001/quic/p2p/12D3KooWCBy35BSF18cqecMvuZdkrDscj1HqFstmJA3Ns5nrWyXc"
	],
	"AgentVersion": "go-ipfs/0.12.2/0e8b121",
	"ProtocolVersion": "ipfs/0.1.0",
	"Protocols": [
		"/ipfs/bitswap",
		"/ipfs/bitswap/1.0.0",
		"/ipfs/bitswap/1.1.0",
		"/ipfs/bitswap/1.2.0",
		"/ipfs/id/1.0.0",
		"/ipfs/id/push/1.0.0",
		"/ipfs/lan/kad/1.0.0",
		"/ipfs/ping/1.0.0",
		"/libp2p/autonat/1.0.0",
		"/libp2p/circuit/relay/0.1.0",
		"/libp2p/circuit/relay/0.2.0/stop",
		"/p2p/id/delta/1.0.0",
		"/x/"
	]
}

/ # 
#node2
/ # ipfs id
{
	"ID": "12D3KooWAsHJtf6gkYVp9pG5EUVaSkTcPVQHNvWmiKikySpat9iB",
	"PublicKey": "CAESIA+a70XonjDIThrb9obII9eGRNiD6iUKEofOtslAr50c",
	"Addresses": [
		"/ip4/127.0.0.1/tcp/4001/p2p/12D3KooWAsHJtf6gkYVp9pG5EUVaSkTcPVQHNvWmiKikySpat9iB",
		"/ip4/127.0.0.1/udp/4001/quic/p2p/12D3KooWAsHJtf6gkYVp9pG5EUVaSkTcPVQHNvWmiKikySpat9iB",
		"/ip4/172.18.0.2/tcp/4001/p2p/12D3KooWAsHJtf6gkYVp9pG5EUVaSkTcPVQHNvWmiKikySpat9iB",
		"/ip4/172.18.0.2/udp/4001/quic/p2p/12D3KooWAsHJtf6gkYVp9pG5EUVaSkTcPVQHNvWmiKikySpat9iB"
	],
	"AgentVersion": "go-ipfs/0.12.2/0e8b121",
	"ProtocolVersion": "ipfs/0.1.0",
	"Protocols": [
		"/ipfs/bitswap",
		"/ipfs/bitswap/1.0.0",
		"/ipfs/bitswap/1.1.0",
		"/ipfs/bitswap/1.2.0",
		"/ipfs/id/1.0.0",
		"/ipfs/id/push/1.0.0",
		"/ipfs/lan/kad/1.0.0",
		"/ipfs/ping/1.0.0",
		"/libp2p/autonat/1.0.0",
		"/libp2p/circuit/relay/0.1.0",
		"/libp2p/circuit/relay/0.2.0/stop",
		"/p2p/id/delta/1.0.0",
		"/x/"
	]
}

/ # 
#node3
/ # ipfs id
{
	"ID": "12D3KooWGNPaxSpZrY8VgNAuLNeYQnBDWBeTAAnXANyQVFX3tuLg",
	"PublicKey": "CAESIGFaT2c1iuSmORVDvdSmbOVAcqQYtD2VMBwxUuBciKkd",
	"Addresses": [
		"/ip4/127.0.0.1/tcp/4001/p2p/12D3KooWGNPaxSpZrY8VgNAuLNeYQnBDWBeTAAnXANyQVFX3tuLg",
		"/ip4/127.0.0.1/udp/4001/quic/p2p/12D3KooWGNPaxSpZrY8VgNAuLNeYQnBDWBeTAAnXANyQVFX3tuLg",
		"/ip4/172.20.0.2/tcp/4001/p2p/12D3KooWGNPaxSpZrY8VgNAuLNeYQnBDWBeTAAnXANyQVFX3tuLg",
		"/ip4/172.20.0.2/udp/4001/quic/p2p/12D3KooWGNPaxSpZrY8VgNAuLNeYQnBDWBeTAAnXANyQVFX3tuLg"
	],
	"AgentVersion": "go-ipfs/0.12.2/0e8b121",
	"ProtocolVersion": "ipfs/0.1.0",
	"Protocols": [
		"/ipfs/bitswap",
		"/ipfs/bitswap/1.0.0",
		"/ipfs/bitswap/1.1.0",
		"/ipfs/bitswap/1.2.0",
		"/ipfs/id/1.0.0",
		"/ipfs/id/push/1.0.0",
		"/ipfs/lan/kad/1.0.0",
		"/ipfs/ping/1.0.0",
		"/libp2p/autonat/1.0.0",
		"/libp2p/circuit/relay/0.1.0",
		"/libp2p/circuit/relay/0.2.0/stop",
		"/p2p/id/delta/1.0.0",
		"/x/"
	]
}

/ # 

1.3 节点同步

建议第二种,会有返回,节点之间互通,需要在每个节点添加另外两个节点id,告诉他另外两个节点的地址,node1 节点添加节点的时候,只需要添加另外两个节点的id,ip4的地址也需要替换为节点的ip,而不是他的默认节点ip,另外两个节点同样操作

第一种
#/ipfs bootstrap add /ip4/127.0.0.1/tcp/4001/p2p/12D3KooWCBy35BSF18cqecMvuZdkrDscj1HqFstmJA3Ns5nrWyXc
第二种
#/ipfs swarm connect /ip4/127.0.0.1/tcp/4001/p2p/12D3KooWCBy35BSF18cqecMvuZdkrDscj1HqFstmJA3Ns5nrWyXc

1.4 验证

#在node1 节点操作
/ # echo "123123" > wang
/ # ipfs add wang
added QmQsBgc4fzWXhSCEwQUQRjPGtZUM9ePjuYehy9pxYesCpQ wang
 7 B / ? [-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------=------] 
 
# QmQsBgc4fzWXhSCEwQUQRjPGtZUM9ePjuYehy9pxYesCpQ
# 这个就是我们创建文件在这个集群里的唯一哈希
# 在其他节点验证

/ # ipfs cat QmQsBgc4fzWXhSCEwQUQRjPGtZUM9ePjuYehy9pxYesCpQ
123123

集群搭建完成,欢迎补充


版权声明:本文为m0_59041021原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。