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_ID
    IFS=':' 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-cluster

cd /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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值