简介
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版权协议,转载请附上原文出处链接和本声明。