IPFS 集群部署
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
⽅式,源码编译安装⽅式,具体可以查看 这里 ,这⾥为了ipfs
版本选择和升级,所以使⽤ ipfs-update
⽅式安装。
Golang
压缩包安装参考文档 CentOS 7 Golang 安装,在IPFS集群中的每台机器均需安装Golang
安装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.10.236/tcp/4001/ipfs/QmSyQFFm5KdB9zoTNQJhPnMs4LYsVmEpY427QYxH2CaFq
L
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
#/root/goProject/bin/ipfs 的路径取决于Go的工作目录,在安装Go时配置在了/etc/profile中
ExecStart=/root/goProject/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-ct
l 管理集群的节点和数据
我们将 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/12D3KooWEGrD9d3n6UJNzAJDyhfTUZNQmQz4k56Hb6TrY
EyxyW2F
这⾥注意下, 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
#/root/goProject/bin/ipfs-cluster-service 的路径取决于Go的工作目录,在安装Go时配置在了/etc/profile中
#从节点的启动指令记得加上 --bootstrap /ip4/192.168.10.236/tcp/9096/ipfs/12D3KooWSfApS9Pf5eUXcHaAz7gHH2iJaVs4WUJoXk3GmwPxn5oo
ExecStart=/root/goProject/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来查看⽂件状态,可以看到⽂件以及在所有节点中 PINNE
ipfs-cluster-ctl status CID