IPFS集群部署
IPFS集群部署
- 环境声明
- Golang安装
- 安装多机环境的ipfs
- IPFS和IPFS-Cluster默认的端⼝:
- IPFS:
- IPFS-CLUSTER:
- 配置IPFS的必要变量
- 分别初始化每个IPFS节点
- 删除IPFS默认的网关节点
- 修改IPFS节点的`Gateway`和`API`为0.0.0.0
- `手动`修改`IPFS`节点的`API监听地址`和`API网关`为`0.0.0.0`
- 添加其中一台节点的地址到另一台节点的bootstrap列表中
- 创建共享的swarm.key 密钥
- 创建IPFS的service文件
- 安装IPFS-Cluster组件
- 配置IPFS集群密钥
- 启动集群
- 初始化集群
- 在`每⼀台节点`执⾏初始化命令:
- 在`管理节点`启动进程:
- 将主节点添加到bootstrap列表中
- 将IPFS-Cluster节点加⼊到系统进程中启动
- 主节点服务文件
- 从节点服务文件
- 启动IPFS集群服务
- 测试⼀下IPFS集群数据复制
环境声明
主机名 | IP地址 | 操作系统 |
---|---|---|
ipfs1 | 192.168.0.1 | RHEL8 |
ipfs1 | 192.168.0.2 | RHEL8 |
ipfs1 | 192.168.0.3 | RHEL8 |
ipfs1 | 192.168.0.4 | RHEL8 |
Golang安装
https://blog.csdn.net/omaidb/article/details/133180749
安装多机环境的ipfs
https://blog.csdn.net/omaidb/article/details/107941175
IPFS和IPFS-Cluster默认的端⼝:
参考:https://www.cnblogs.com/kimyoung/p/15986096.html
IPFS:
端口 | 描述 |
---|---|
4001 | 与其他节点通信端⼝ |
5001 | API server |
8080 | Gateway server |
IPFS-CLUSTER:
端口 | 描述 |
---|---|
9094 | HTTP API endpoint |
9095 | IPFS proxy endpoint |
9096 | Cluster swarm 集群节点通信端⼝ |
配置IPFS的必要变量
# 修改ipfs变量
vim /etc/profile.d/ipfs.sh
配置IPFS多机环境,配置私有节点
# 修改ipfs config 配置编辑器
## ipfs config edit命令时会使用vim
export EDITOR=/usr/bin/vim# 强制IPFS节点在启动时始终使用pnet模式--增强安全性
## libp2p 是 IPFS 使用的网络模块
## pnet模式是允许IPFS在具有相同密钥的节点之间建立一个私有网络
export LIBP2P_FORCE_PNET=1# 使用IPFS_PATH变量来指定ipfs数据保存目录
export IPFS_PATH=/data/.ipfs/
分别初始化每个IPFS节点
# 分别初始化3个ipfs节点
ipfs init
删除IPFS默认的网关节点
# 删除ipfs默认的网关节点
# 将所有连到我们私有节点的其它节点都断开
ipfs bootstrap rm all
修改IPFS节点的Gateway
和API
为0.0.0.0
# 修改ipfs节点的Gateway
ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080# 修改ipfs节点的API
ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001# 查看修改后的配置
ipfs config show|head
手动
修改IPFS
节点的API监听地址
和API网关
为0.0.0.0
# 打开 $EDITOR 编辑器以编辑配置文件
ipfs config edit# 将Addresses节点下的"Gateway": "/ip4/127.0.0.1/tcp/8080"改为Gateway /ip4/0.0.0.0/tcp/8080# 将Addresses节点下的"API": "/ip4/127.0.0.1/tcp/5001"改为
"API": "/ip4/0.0.0.0/tcp/5001"
添加其中一台节点的地址到另一台节点的bootstrap列表中
查看节点的Peer ID和IP
# 查看所有节点的Peer ID(对等节点标识符)
ipfs id# 查看所有节点的IP地址
ip a
添加bootstrap列表
# 添加所有集群节点到每台节点的bootstrap列表中
ipfs bootstrap add /ip4/${ipfs节点的IP地址}/tcp/4001/ipfs/${Peer ID(对等节点标识符)}## 示例
ipfs bootstrap add /ip4/172.16.0.113/tcp/4001/ipfs/QmV7Thb3mjuWa1xDK5UrgtG7SSYFt4PSyvo6CjcnA5gZAg
脚本示例如下:
#!/usr/bin/env bash# 应用程序列表
## 将所有要启动的程序写入到一个列表中
node_list=(# 数据结构如下:## "${ipfs_node_ip} : ${Peer_ID}"# ipfs1"192.168.0.1:QmV7Thb3mjuWa1xDK5UrgtG7SSYFt4PSyvo6CjcnA5gZAg"# ipfs2"192.168.0.2:QmV7Thb3mjuWa1xDK5UrgtG7SSYFt4PSyvo6CjcnA5gZAg"# ipfs3"192.168.0.3:QmV7Thb3mjuWa1xDK5UrgtG7SSYFt4PSyvo6CjcnA5gZAg"# ipfs4"192.168.0.4:QmV7Thb3mjuWa1xDK5UrgtG7SSYFt4PSyvo6CjcnA5gZAg"
)# 添加集群节点到节点的bootstrap列表中
add_nodeip_to_bootstrap_list() {# IPFS的节点IP地址local ipfs_node_ip="$1"# Peer ID(对等节点标识符)local Peer_ID="$2"# ipfs bootstrap add /ip4/${ipfs节点的IP地址}/tcp/4001/ipfs/${Peer ID(对等节点标识符)}ipfs bootstrap add /ip4/"$ipfs_node_ip"/tcp/4001/ipfs/"$Peer_ID" 2>&1 &
}# 遍历应用程序列表并启动应用程序
for ipfs_node_info in "${node_list[@]}"; do# 从列表中提取出ip和Peer_IDIFS=':' read -r ipfs_node_ip Peer_ID <<<"${ipfs_node_info}"# echo "${ipfs_node_ip}" "${Peer_ID}"# 添加集群节点到节点的bootstrap列表中add_nodeip_to_bootstrap_list "${ipfs_node_ip}" "${Peer_ID}"
done
然后在每个节点上执行
即可完成添加bootstrap列表
查看ipfs连接的节点
# 列出当前IPFS节点连接的对等节点(peers)
ipfs swarm peers
创建共享的swarm.key 密钥
https://blog.csdn.net/omaidb/article/details/133269559
# 创建swarm.key 密钥
ipfs-swarm-key-gen > ${IPFS_PATH}/swarm.key# 同步到所有ipfs节点
xsync ${IPFS_PATH}/swarm.key
将⽣成的swarm.key 拷⻉到每⼀台节点的 ${IPFS_PATH}/swarm.key
创建IPFS的service文件
vim /etc/systemd/system/ipfs.service
启动 IPFS 守护进程并启用 Namesys Pubsub 功能
[Unit]
Description=IPFS Daemon
# After=syslog.target network.target remote-fs.target nss-lookup.target
After=network.target[Service]
Type=simple
# 指定$IPFS_PATH变量的值
Environment=IPFS_PATH="/data/.ipfs/"
# 启动 IPFS 守护进程并启用 Namesys Pubsub 功能
## Namesys Pubsub功能:发布-订阅模型来进行命名系统解析的更新和通知
ExecStart=/usr/local/bin/ipfs daemon --enable-namesys-pubsub
User=root
# User=<your_username>
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动ipfs服务
# 重载服务
systemctl daemon-reload# 启动服务并开机自启
systemctl enable --now ipfs
安装IPFS-Cluster组件
IPFS-Cluster 包含两个组件:
- ipfs-cluster-service ⽤于初始化集群peer并运⾏它的守护进程
- ipfs-cluster-ctl 管理集群的节点和数据
克隆ipfs-cluster 代码库,然后make
编译安装(系统需安装make
):
# 克隆ipfs-cluster代码库
git clone https://github.com/ipfs/ipfs-cluster.git /usr/local/src/ipfs-clustercd /usr/local/src/ipfs-cluster# 编译安装
make install
检查是否安装成功:
# 查看ipfs-cluster-service版本
ipfs-cluster-service --version# 查看ipfs-cluster-ctl版本
ipfs-cluster-ctl --version
配置IPFS集群密钥
# 生成集群密钥
od -vN 32 -An -tx1 /dev/urandom | tr -d ' \n'
配置ipfs集群变量
:
vim /etc/profile.d/ipfs-cluster.sh
# 配置集群密钥()
export CLUSTER_SECRET=b55262c36de6f97bd50b5233f75866445ec51db74613bad78e906c4dc9ba1d30
启动集群
初始化集群
在每⼀台节点
执⾏初始化命令:
# 初始化集群
ipfs-cluster-service init
在管理节点
启动进程:
# 启动IPFS Cluster集群服务的守护进程
ipfs-cluster-service daemon
将主节点添加到bootstrap列表中
在其他节点
执行
# 将主节点添加到bootstrap列表中
ipfs-cluster-service daemon --bootstrap
/ip4/192.168.11.11/tcp/9096/ipfs/12D3KooWEGrD9d3n6UJNzAJDyhfTUZNQmQz4k56Hb6TrY
EyxyW2F
这⾥注意下, 12D3KooWEGrD9d3n6UJNzAJDyhfTUZNQmQz4k56Hb6TrYEyxyW2F 是IPFS-Cluster节点ID
,不是IPFS节点ID
# 查看IPFS-Cluster节点ID
ipfs-cluster-service id# 查看集群节点状态
ipfs-cluster-ctl peers ls
将IPFS-Cluster节点加⼊到系统进程中启动
添加 /etc/systemd/system/ipfs-cluster.service
:
主节点服务文件
[Unit]
Description=IPFS-Cluster Daemon-ipfs集群主节点守护进程服务
# 依赖的服务
Requires=ipfs
After=After=network.target ipfs
[Service]
Type=simple
# 指定$IPFS_PATH变量的值
Environment=IPFS_PATH="/data/.ipfs/"
# 从节点的启动指令记得加上 --bootstrap /ip4/192.168.10.236/tcp/9096/ipfs/12D3KooWSfApS9Pf5eUXcHaAz7gHH2iJaVs4WUJoXk3GmwPxn5oo
ExecStart=/usr/local/bin/ipfs-cluster-service daemon
User=root
Restart=on-failure
[Install]
WantedBy=multi-user.target
从节点服务文件
[Unit]
Description=IPFS-Cluster Daemon-ipfs集群从节点守护进程服务
# 依赖的服务
Requires=ipfs
After=After=network.target ipfs
[Service]
Type=simple
# 指定$IPFS_PATH变量的值
Environment=IPFS_PATH="/data/.ipfs/"
# 从节点的启动指令记得加上 --bootstrap /ip4/192.168.10.236/tcp/9096/ipfs/12D3KooWSfApS9Pf5eUXcHaAz7gHH2iJaVs4WUJoXk3GmwPxn5oo
ExecStart=/usr/local/bin/ipfs-cluster-service daemon --bootstrap /ip4/192.168.10.236/tcp/9096/ipfs/12D3KooWSfApS9Pf5eUXcHaAz7gHH2iJaVs4WUJoXk3GmwPxn5oo
User=root
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动IPFS集群服务
在所有节点
上启动ipfs-cluster的后台守护进程:
# 重载服务
systemctl daemon-reload# 启动集群服务并开机自启
systemctl enable --now ipfs-cluster
测试⼀下IPFS集群数据复制
在其中⼀台节点
中添加⼀个⽂件:
# 向集群中添加文件
ipfs-cluster-ctl add test.txt
通过添加的⽂件CID来查看⽂件状态
,可以看到⽂件以及在所有节点中 PINNE
# 通过文件CID查看文件状态
ipfs-cluster-ctl status CID