• 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
  • 相关阅读:
    linux集群实施与部署-----Nginx
    以太网链路聚合简单配置
    配置基于源地址的策略路由
    shell --Day 6
    ps初学--Day 1部分工具使用
    shell --Day 5
    shell ——Day 4
    shell——Day3
    shell——Day 2
    初学shell——Day1
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312509.html
Copyright © 2020-2023  润新知