IPFS家族(二)
go-ipfs

IPFS协议的go语言实现,ipfs的核心协议,最新版是v0.4.13
下载地址:https://dist.ipfs.io/#go-ipfs
源代码地址:https://github.com/ipfs/go-ipfs
源码阅读
Go 主文件: https://github.com/ipfs/go-ipfs/blob/master/cmd/ipfs/main.go
命令行 : https://github.com/ipfs/go-ipfs/tree/master/core/commands
Bitswap协议:https://github.com/ipfs/go-ipfs/tree/master/exchange/bitswap
DHT(分布式哈希表): https://github.com/libp2p/go-libp2p-kad-dht
PubSub: https://github.com/libp2p/go-floodsub (该功能还没有纳入到IPFS协议的之功能里面,当前作为测试功能存在)
libp2p(网络层): https://github.com/libp2p/go-libp2p
如何使用
之前的文章已经介绍过了go-ipfs的使用方式,这里不再介绍如何使用。
js-ipfs
IPFS协议js语言实现
Github主页:https://github.com/ipfs/js-ipfs
Js版的使用方式跟go版本大同小异,这里不再详细讨论,有兴趣的读者可以直接去Github主页上查看相关信息。
ipfs-cluster
ipfs-cluster
从名称我们就可以判断这个工具的作用了,ipfs节点集群。该工具允许同时管理多个ipfs节点的数据。ipfs-cluster本身也是一个基于ipfs分布式管理软件。
今天主要来讲一下这个工具,对于管理多个ipfs节点这个,工具非常有用。比如,你启动N个ipfs节点,那么希望批量管理ipfs节点数据的时候ipfs-cluster就发挥很重要作用了。
ipfs-cluser工具分为两个
ipfs-cluster-service:ipfs-cluster的服务端
ipfs-cluster-ctl:ipfs-cluster的管理端,用来管理ipfs-cluster-service服务器的ipfs集群
安装
下载安装非常简单:建议从ipfs官网下载build好的版本,也可以从Github现在源码,自己build工程。如果是下载已经build好的二进制版,只需要简单解压缩就完成了安装。
Github地址:https://github.com/ipfs/ipfs-cluster
官网二进制版本的下载地址
https://dist.ipfs.io/#ipfs-cluster-ctl
https://dist.ipfs.io/#ipfs-cluster-service
Note: 由于官网 ipfs.io 被ipfs官方作为了一个ipfs网络的接入点网关,由于某些特殊的原因,国内可能访问不了。
小编帮大家下载放到了这里:https://pan.baidu.com/s/1eUjKZAi
下面来详细说明一下 ipfs-cluster的使用方法和原理
为了说明如何使用ipfs-cluster,小编在亚马逊aws上启动了三个ipfs节点,并且为三个节点启动了ipfs-cluster集群服务。不知道怎么安装ipfs节点的去这篇文章看一下《如何在IPFS里面上传一张照片》。
依赖关系
ipfs-cluster-service:要求ipfs节点已经启动(ipfs daemon)
ipfs-cluster-ctl:要求ipfs-cluster-service已经启动。
首先创建ipfs节点A,步骤如下
启动ipfs daemon
初始化 ipfs-cluster-service:ipfs-cluster-service init:初始化ipfs-cluster-service服务,初始化ipfs-cluster-service服务。如果没有启动过或者设置过 ipfs-cluster-service,ipfs-cluster-service默认会启动单一节点的ipfs集群管理。这个步骤跟ipfs节点启动是一样的。
启动ipfs-cluster-service服务:执行 ipfs-cluster-service daemon启动服务,这个也跟ipfs的启动命令是一样的。
当执行ipfs-cluster-service init后,会在你的home文件夹下生成一个文件夹 ./ipfs-cluster,ipfs-cluster-service的配置文件 service.json就在里面保存。稍后我们需要配置这个文件里面的一个字段 secret。
至此单节点的ipfs-cluster-service已经完成启动了。但是单节点启动ipfs-cluster-service是没有意义的,我们本来就是要管理多个ipfs节点的。
重复上面 1-4, 再新建两个节点B和C。
我们在A节点上比B,C节点上额外多安装ipfs-cluster-ctl。这个是ipfs-cluster-service的命令行管理工具,于是我们有了三个ipfs节点,小编的节点运行在亚马逊日本服务器的东京区域。
节点A:亚马逊服务器(日本)
节点B:亚马逊服务器(日本)
节点C:亚马逊服务器(日本)
上面的准备工作完成后,我们来看一下三个ipfs节点的配置情况
A: 54.95.29.13
ipfs节点id:Qmf4p5G4Hd29Djzg9Cjjggpa2d4PSBMpFxFdPMbddhsZMm
服务节点ID:Qmc95KCJsiE3xm5JVndBTqVGU1UanpQMYpcigSLvZnyDVT
服务节点地址:/ip4/54.95.29.13/tcp/9096/ipfs/Qmc95KCJsiE3xm5JVndBTqVGU1UanpQMYpcigSLvZnyDVT
B: 18.182.8.13
ipfs节点id: QmRQH6TCCq1zpmjdPKg2m7BrbVvkJ4UwnNHWD6ANLqrdws
Ipfs-service:
服务节点ID:QmevDxdpGqiYbjxYhvDvH7Y9hJEPyZFqPttPhMXf1bWBYr
服务节点地址:/ip4/18.182.8.13/tcp/9096/ipfs/QmevDxdpGqiYbjxYhvDvH7Y9hJEPyZFqPttPhMXf1bWBYr
C: 13.230.8.172
ipfs节点id:QmVt1zSep5v8r8tzKBLZUicEu9NoeQX9sWxvVD6UXgcL4t
/home/ubuntu/.ipfs-cluster/service.json
服务节点ID: QmSjVWduwztX9Tj3rN1YtfuAwzMLV5PywNgLxvpCLbu3TK
服务节点地址:/ip4/13.230.8.172/tcp/9096/ipfs/QmSjVWduwztX9Tj3rN1YtfuAwzMLV5PywNgLxvpCLbu3TK
配置
首先把每一个节点上面执行 ipfs-cluster-service初始化的配置文件(../ipfs-cluster/service.json)里面的secret字段修改成一样的,每一个节点都必须保证一样,否则节点之间是无法形成集群的。secret是一个32位的随机字串。

secret是个32位的随机字符串
组建IPFS节点集群
由于我们之前在A节点上安装了ipfs-cluster-ctl命令行管理端,我们的例子将使用A节点作为管理节点。
执行下面两个命令将节点B和C添加到集群里面
ipfs-cluster-ctl peers add /ip4/18.182.8.13/tcp/9096/ipfs/QmevDxdpGqiYbjxYhvDvH7Y9hJEPyZFqPttPhMXf1bWBYr
ipfs-cluster-ctl peers add /ip4/13.230.8.172/tcp/9096/ipfs/QmSjVWduwztX9Tj3rN1YtfuAwzMLV5PywNgLxvpCLbu3TK

添加节点到ipfs集群里面
使用命令:ipfs-cluster-ctl peers ls 查看集群详情

集群的运行如下,从截图上我们可以看到新添加的节点进入了集群的日志

至此,我们的ipfs-cluster集群就建好了,下面我们来看看如何管理集群。
pin一个文件,执行命令(节点A)
ipfs-cluster-ctl pin add QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb
QmdDTor6dWzknFJPJuhJgrUYqd56WkFXYAxyxpEY7kUrEb,如果你是公众号或者知乎专栏的深度读者,也许会对这个哈希值有印象,这就是小编在《如何在IPFS里面上传一张照片》上传的那张纪念性图片。

作者飞向未来,致力于IPFS/Filecoin在中国的技术推广,他的微信公众号和社群,目前是中国最活跃最顶级的IPFS社群。作者飞向未来是圆方圆区块链的特邀嘉宾,所有转载都已经得到飞向未来本人授权。
更多飞向未来导师的公众号,可以在IPFS指南公众号中找到。
圆方圆链圈

IPFS家族(二)的更多相关文章
- IPFS家族(一)
IPFS这个项目其实很大,并不像大家想象的是一个东西,IPFS是由很多模块组成,每一个模块现在都已经独立成项目了,并且有自己的主页.让我们来简单看一下IPFS家族成员. 协议实验室的主页:https: ...
- 学习IPFS
注:以下所有操作均在CentOS 6.8 x86_64位系统下完成. IPFS(InterPlanetary File System)是一个点对点的分布式超媒体分发协议,被认为是最有可能取代HTTP的 ...
- 最新Java面试题及答案整理
基础篇 一.基本功 面向对象特征 封装,继承,多态和抽象 1. 封装 封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内部的数据.在 Java 当中,有 3 种修饰 ...
- Libp2p 简介
这是一个翻译的系列文章,原文参考:Introduction :: libp2p Documentation 欢迎来阅读libp2p相关文档,不论你是刚开始学习如何用libp2p来搭建P2P系统, 还是 ...
- IPFS系列 多节点搭建 二
IPFS系列 多节点搭建 二 上一篇介绍了IPFS的分布式点对点超媒体传输协议的背景和安装介绍,本篇将继续指导搭建多节点的IPFS私有网络 文件服务.如果没还没开始搭建IPFS节点的小伙伴, 请戳此链 ...
- drf序列化高级、自定义只读只写、序列化覆盖字段、二次封装Response、数据库查询优化(断关联)、十大接口、视图家族
目录 自定义只读 自定义只写 序列化覆盖字段 二次封装Response 数据库关系分析 断外键关联关系 ORM操作外键关系 ORM四种关联关系 基表 系列化类其他配置(了解) 十大接口 BaseSer ...
- 二次封装 Reponse,视图家族
复习 """ 1.整体修改与局部修改 # 序列化 ser_obj = ModelSerializer(model_obj) # 反序列化,save() => cre ...
- drf二次封装response-APIViews视图家族-视图工具集-工具视图-路由组件
视图类传递参数给序列化类 (1).在视图类中实例化 序列化对象时,可以设置context内容. (2).在序列化类中的局部钩子.全局钩子.create.update方法中,都可以用self.conte ...
- 《CSS世界》笔记二:盒模型四大家族
上一篇:<CSS世界>笔记一:流/元素/尺寸下一篇:<CSS世界>笔记三:内联元素与对齐 写在前面 在读<CSS世界>第四章之前,粗浅的认为盒模型无非是margin ...
随机推荐
- Qt Creator 整合 python 解释器教程
目录 1. 前言 2.前提条件 3.步骤 3.1 新建 python文件 3.2 编写 python 代码 3.3 配置 python 解释器 3.4 执行 python file 1. 前言 Pyt ...
- node实现jsonp跨域
1. 搭建node server //引入模块 var http=require("http"); var fs=require("fs");var url = ...
- openstack-ocata-镜像服务3
一. 镜像服务概述 镜像服务(glance)使用户能够发现.登记,并检索虚拟机镜像.它提供了一个REST API,使您可以查询虚拟机镜像元数据和检索一个实际的形象.可以存储虚拟机镜像通过镜像服务在不同 ...
- shell 批量创建带随机字符串的html文件
思路一: echo $RANDOM|md5sum |tr "[0-9]" "[a-j]"|cut -c 2-11 RANDOM: linux内置的随机数变量 ...
- shell脚本 awk工具
awk工具概述awk编程语言/数据处理引擎基于模式匹配检查输入文本,逐行处理并输出通常在shell脚本中,或取指定的数据单独用时,可对文本数据做统计 命令格式格式一:awk [选项] '[条件]{编辑 ...
- Java获取某年某季度的第一天出错
1.错误描述 Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given ...
- Error: expected expression, got '}'
1.错误描述 Error: expected expression, got '}' .globalEval/<@http://localhost:8080/Sys/resource/globa ...
- Linux显示inode的信息
Linux显示inode的信息 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ df -i 文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点 ...
- hdu5977 Garden of Eden
都不好意思写题解了 跑了4000多ms 纪念下自己A的第二题 (我还有一道freetour II wa20多发没A...呜呜呜 #include<bits/stdc++.h> using ...
- C#的动态链接库和XML配置
今天对昨天的实例进行了改进和提高,将堆排序和冒泡排序封装在一个动态链接库中,提供函数调用和事件委托.此外加入XML进行配置,在XML中存入相关配置信息,提供一个单独的XmlClass对其进行操作,加深 ...