当前位置: 首页 > 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
http://www.xdnf.cn/news/317125.html

相关文章:

  • Linux/AndroidOS中进程间的通信线程间的同步 - 信号量
  • Java游戏服务器开发流水账(1)游戏服务器的架构浅析
  • Wireshark抓账号密码
  • 一文走进GpuGeek | conda常用命令
  • Prompt(提示词)工程师,“跟AI聊天”
  • Java版ERP管理系统源码(springboot+VUE+Uniapp)
  • FID和IS的区别
  • STM32裸机开发问题汇总
  • (1-1)Java的JDK、JRE、JVM三者间的关系
  • 淘宝按图搜索商品(拍立淘)爬虫实战指南
  • 技术视界|青龙机器人训练地形详解(二):添加地形到训练环境
  • 光伏“531”政策倒逼下,光储充一体化系统如何破解分布式光伏收益困局?
  • sql错题(3)
  • 学习记录:DAY23
  • 发那科机器人3(机器人编程基础)
  • Python小酷库系列:5个常用的dict属性化访问扩展库
  • Kubernetes调度技术:污点与容忍生产级应用指南
  • Selenium使用指南
  • 7.2.安全防御
  • 一个项目的周测试的文档(Billing Service 测试文档)
  • pcie协议复位
  • 1688拍立淘搜索相似商品API接口概述,json数据示例参考
  • 适合java程序员的Kafka消息中间件实战
  • 用 NGINX 打造高性能 FastCGI 加速 `ngx_http_fastcgi_module`
  • 深入理解Java三大特性:封装、继承和多态
  • 国家信息中心:基于区块链和区块链服务网络(BSN)的可信数据空间建设指引
  • jenkins配置多nexus仓库多maven版本
  • 深入解析华为交换机中的VRRP原理
  • P值、置信度与置信区间的关系:统计推断的三大支柱
  • 三、Hadoop1.X及其组件的深度剖析