当前位置: 首页 > news >正文

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地址操作系统
ipfs1192.168.0.1RHEL8
ipfs1192.168.0.2RHEL8
ipfs1192.168.0.3RHEL8
ipfs1192.168.0.4RHEL8

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与其他节点通信端⼝
5001API server
8080Gateway server

IPFS-CLUSTER:

端口描述
9094HTTP API endpoint
9095IPFS proxy endpoint
9096Cluster 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节点的GatewayAPI为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

相关文章:

  • 【JS逆向基础】并发爬虫
  • Linux复习笔记(一)基础命令和操作
  • 技术分享:Franka机器人新方案——双臂数据采集与适应性安装,带你探索具身智能的奥秘
  • C# NX二次开发:曲线和点位相关UFUN函数详解
  • 15_sysfsLinux内核模块
  • 在 R 中,清除包含 NA(缺失值)的数据
  • AOP封装进行批量的数据查询并填充
  • 探索智能体的记忆:类型、策略和应用
  • MySQL优化-MySQL常用查询命令
  • MATLAB三维可视化技术解析
  • 引用的使用
  • 什么是跨域,如何解决跨域问题
  • 脑图谱:脑机接口的必由之路——技术突破与产业转化的系统性思考
  • CI/CD与DevOps流程流程简述(给小白运维提供思路)
  • element-plus中,vue3项目,el-input密码框禁止浏览器自动弹出浏览器历史密码提示框
  • 关于Stream
  • 使用ffmpeg截取MP3等音频片段
  • ubuntu 挂载硬盘
  • Notion Windows桌面端快捷键详解
  • Solana批量转账教程:提高代币持有地址和生态用户空投代币
  • 人民日报刊文:加快解放和发展新质战斗力
  • 雷军:过去一个多月是创办小米以来最艰难的时间
  • 江西暴雨强对流明显,专家:落雨区高度重叠,地质灾害风险高
  • 印巴冲突升级,巴基斯坦股市重挫7.29%,创5年来最大单日跌幅
  • 硅料巨亏后弘元绿能割肉求生:逾12亿元内蒙古公司股权转让协鑫
  • 中国德国商会报告:76%在华德企受美国关税影响,但对华投资战略依然稳固