zoukankan      html  css  js  c++  java
  • IPFS私有网络集群搭建

    对于联盟链的业务中搭建一个私有网络的 IPFS 集群还是很有必要的,私有网络集群允许 IPFS 节点只连接到拥有共享密钥的其他对等节点,网络中的节点不响应来自网络外节点的通信。 IPFS-Cluster 是一个独立的应用程序和一个 CLI 客户端,它跨一组 IPFS 守护进程分配、复制和跟踪 pin。它使用基于 Raft 一致性算法来协调存储,将数据集分布到参与节点上。对于我们要将一个 peer 上的存储同步备份到所有集群上其他的 peers 时,或者对集群的节点管理,这时 IPFS-Cluster 就会起到一个很好的作用。 下面简单描述一下 IPFS 私有网络以及 IPFS-Cluster 集群的搭建配置过程(Ubuntu16.04)。

    1578557801228

    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 方式,源码编译安装方式,具体可以查看 https://docs.ipfs.io/guides/guides/install/ 这里为了 ipfs 版本选择和升级,所以使用ipfs-update方式安装,Go 是必须的,对于 Go 的安装这里不再赘述。

    安装 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.11.11/tcp/4001/ipfs/QmSyQFFm5KdB9zoTNQJhPnMs4LYsVmEpY427QYxH2CaFqL
    

    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
    ExecStart=/usr/local/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-ctl 管理集群的节点和数据
    •  

    我们将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 ' 
    '
    

    将生成的随机你字符串加入到环境变量中,比如: 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/12D3KooWEGrD9d3n6UJNzAJDyhfTUZNQmQz4k56Hb6TrYEyxyW2F
    

    这里注意下,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
    ExecStart=/root/go/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 来查看文件状态,可以看到文件以及在所有节点中PINNED

    ipfs-cluster-ctl status CID
  • 相关阅读:
    反向代理实例
    nginx常用命令和配置
    nginx的安装
    Can Live View boot up images acquired from 64bit OS evidence?
    What is the behavior of lnk files?
    EnCase v7 search hits in compound files?
    How to search compound files
    iOS 8.3 JB ready
    Sunglasses
    现代福尔摩斯
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312509.html
Copyright © 2011-2022 走看看