问题标签 [raft]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
56 浏览

hyperledger-fabric - 配置和操作 FABRIC Raft 时出错

我尝试按照 BYFN 示例使用 RAFT 启动网络,但我遇到了一个与 signcert 证书相关的问题,该证书crypto-config在执行 cryptogen 工具后从文件夹中丢失。

我遵循以下步骤:

首先,重新生成加密材料(文件crypto-config.YAML已经有关于orderers的规范),然后我启动容器(不管我是手动执行还是通过fn.sh执行,错误总是一样的)。日志告诉我订购者容器没有找到 signcert 证书并退出。实际上,当我进入crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/msp文件夹时,我只是看到admincerts/keystore/文件夹。我尝试重新执行 cryptogen 工具,但它不起作用。

有人有什么建议吗?

0 投票
1 回答
650 浏览

consensus - Raft 集群中的节点如何知道“多数”是什么?

我正在阅读 Raft论文并关注数据可视化的秘密生活,似乎大多数在 Raft 中都是至关重要的,无论是对于领导者选举还是附加条目请求。

我的问题是节点如何首先知道集群中的节点总数?是否定义了发现协议或必须在创建集群时配置节点数?还是 Raft 将其留给特定的实现

我的下一个问题是这个数字是如何更新的(即跟随节点如何标记为关闭),尤其是在网络分区的情况下。

感谢您的任何指示!

0 投票
1 回答
1111 浏览

consensus - 共识算法:如果一个奇数的集群因为节点故障而变成偶数会发生什么?

共识算法(例如 raft)要求集群包含奇数个节点以避免裂脑问题。

假设我有一个由 5 个节点组成的集群,如果只有一个节点发生故障会发生什么?集群现在有 4 个节点,这打破了奇数规则,集群会继续正常运行吗?

一种解决方案是再删除一个节点,使集群只包含 3 个节点,但是如果之前发生故障的节点又回来了怎么办?然后集群再次有 4 个节点,我们必须将之前删除的节点带回来以保持集群奇数。

共识算法的实现是否会自动处理这个问题,或者我必须在我的应用程序代码中处理这个问题(例如,删除一个节点)?

0 投票
1 回答
422 浏览

hyperledger-fabric - 在具有 raft 共识的多主机部署的 Hyperledger Fabric v1.4.1 网络上使用 Hyperledger caliper 进行基准测试

我的超级账本结构网络部署在 4 台服务器上的专用网络上。每个服务器都有一个 peer 和一个 orderer。网络已启动并正在运行,我想在正在运行的网络上使用 hyperledger caliper 进行基准测试。网络中启用了 TLS,我在任何地方都给出了绝对路径。

我在 caliper 的基准和网络配置文件中使用服务器的 url 更改了 url。我不想创建任何频道或注册任何管理员或安装链代码,因为我已经完成了所有这些步骤。如何从这里进行基准测试?

  1. 我的 config.yaml 文件如下:
  1. 我的 fabric-go-tls.json 如下:

预期:应该只运行基准测试而不创建通道、安装链代码和注册管理员...

实际结果:停在 [create-channel.js] 。

但是网络运行正常!!谁能解释一下,我在这里做错了什么?

0 投票
1 回答
773 浏览

distributed-system - etcd 如何将写入传播给非领导成员?

raft.github.io页面上的可视化和数据的秘密生活中都可以看出,Raft 中的写入请求必须通过领导者发送。

当我etcd使用 Raft 运行时,我可以向etcdctl put任何成员发送请求etcd,即使他们不是领导者,并且写入仍然会在整个集群中传播。

这背后的机制是什么?它是 Raft 的一部分吗?它是特定于etcdor的etcdctl吗?

0 投票
2 回答
226 浏览

raft - TiKV 中的“多筏”是什么?

前几天我遇到了这个有趣的数据库,并在其官方网站上阅读了一些文档,我对 TiKV 中的 Raft Group 有一些疑问(here),

假设我们有一个大约有 100 个节点的集群,并且复制因子是 3,这是否意味着我们最终会得到很多微小的 Raft “气泡”,每个气泡只包含 3 个成员,它们进行领导者选举和“气泡”内的日志复制。

或者,我们只有一个包含 100 个节点的胖 Raft “buble”?

请帮忙解释一下,谢谢!

0 投票
1 回答
3841 浏览

distributed - Raft 如何处理 AppendEntries RPC 中的延迟回复?

我在阅读Raft 论文时提出了一个问题。剧情如下。有 3 个新启动的 Raft 实例,R1、R2、R3。R1被选举为leader,nextIndex {1, 1, 1},matchIndex {0, 0, 0}和term 1。现在它接收到来自客户端的命令1,实例的日志如下:

如果网络不可靠怎么办?如果 R1 正在向 R2 发送此日志,但 AppendEntries RPC 超时,则领导者 R1 必须再次重新发送 [index 1, command 1]。然后它可能会收到两次回复{term: 1, success: true}。

论文说:

所以leader R1会增加nextIndex和matchIndex两次:nextIndex {1, 3, 1},matchIndex {0, 2, 0},这是不正确的。当leader发送下一个AppendEntries RPC,即心跳或日志复制时,它可以修复nextIndex,但matchIndex永远没有机会被修复。

我的解决方案是为每个单独的 RPC 调用添加一个序列号到 AppendEntries 参数和结果中。但是,我想知道是否有一种方法可以仅使用论文给出的参数来解决这个问题,即没有序列号。

任何建议将不胜感激,并提前感谢您。

0 投票
1 回答
1594 浏览

hyperledger-fabric - 尝试为 raft 生成创世块时出错

编辑:这是因为,我在 configtx.yaml 中将 orderer 类型 etcdraft 放入了正常的 orderer 配置中,这导致它在同一对象中找到剩余的配置,而不是从 profile 中的覆盖对象中找到

这是我在尝试生成 raft orderer genesis.block 时遇到的错误

这个错误并没有具体说明它缺少什么。我将 yaml 文件与第一个网络的示例 yaml 文件进行了比较,两者都是相同的。

我究竟做错了什么?

我的 configtx.yaml 文件链接:https ://pastebin.com/32q6UAcZ

0 投票
1 回答
526 浏览

hyperledger-fabric - 如何使用 Raft Cluster 在 HLF 中修复“无法从引导块创建 puller 配置:无法解码 TLS 证书 PEM”

我正在尝试建立一个Hyperledger Fabric网络,其中 orderer 作为Raft(集群中的 3 个节点)。我在 Cloud 中使用 Kubernetes 和 Helm。

当它是单节点 Raft 设置时,一切正常。但是,对于多节点设置,我收到以下错误。

其他配置如下

配置文件.yaml

0 投票
1 回答
395 浏览

ethereum - 仲裁中的公共交易卡在交易池中待处理

我遵循 Quorum 的文档并使用 raft-consensus 创建了一个 2 节点网络。在创世区块中,我已将资金预先分配给其中一个账户。现在我正在尝试对另一个节点进行一些以太币的公开交易。但是,交易卡在交易池中,两个节点的余额保持不变。我使用了文档中提供的相同 genesis.json 文件。有什么我想念的吗?

启动两个节点后,我尝试运行 - eth.sendTransaction({from:current-node-address, to: second-node's-address, value:0x200,gas:21000})

在使用生成的交易哈希检查 transactionReceipt 时,它显示为 null。