#distributed #coordination #strong-consistency #strong #consistency

app vmware/haret-cli-client

一个强一致性的分布式协调服务

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2017年1月12日

#9 in #coordination

462 星 & 26 关注者

Apache-2.0

13KB
372

VMware 已停止对该项目的积极开发,该仓库将不再更新。

haret

Build Status

haret 提供了一个基于成熟协议构建的分布式服务,通过易于使用的 API 暴露强一致性的协调原语,以满足许多分布式应用的基本依赖。您可以在这里了解更多关于我们为什么决定构建 haret 的原因。

本 README 包含了针对开发者和用户的快速入门说明。有关使用 haret 的更多信息,请参阅粗略且不完整用户指南

发行版快速入门

如果您是 haret 的最终用户且不感兴趣构建代码,请从这里开始。

在单个节点上运行复制组

发行版的二进制文件(MacOSX 和 Linux)可以从这里下载。

每个发行版目录中包含一个用于运行单个 haret 节点的 config.toml 文件。从包含 config.toml 和二进制文件的发行版目录中,在终端中运行以下命令以启动一个节点:

RUST_LOG=haret=info,rabble=info ./haret

虽然 haret 复制组(命名空间)旨在在多个物理机上的集群中运行以实现容错,但它可以为了测试目的在单个进程中运行。组中的每个副本都由一个轻量级演员表示,它可以接收并响应消息,因此我们可以将同一节点上的演员组指定为复制组。

打开另一个终端,我们可以使用它与此节点通信。

连接到节点1的管理服务器

./haret-admin 127.0.0.1:5001

检查集群状态以验证仅存在单个节点

haret-admin> cluster status

在节点1上创建命名空间

haret-admin> vr create namespace test-ns r1::node1@127.0.0.1:5000,r2::node1@127.0.0.1:5000,r3::node1@127.0.0.1:5000

列出命名空间

haret-admin> vr namespaces

获取 r1::dev1 的状态 - 它将显示 test-ns 命名空间的主要内容在顶部。

haret-admin> vr replica test-ns::r1::node1@127.0.0.1:2000`

显示配置

haret-admin> config

现在退出管理 CLI 并使用 CLI 客户端连接到节点1上的 API 端口

./haret-cli-client 127.0.0.1:5002

列出命名空间

haret> list-namespaces

进入 test-ns 命名空间,以便可以对该命名空间的树执行操作。这需要了解哪个副本是该命名空间的主副本,以便可以发送消息。

haret> enter test-ns

现在开始对该命名空间执行操作。在提示符下输入 help 可以发现它们。下面展示了更多示例。

如果您想在本地主机上构建一个多节点集群,只需将发布目录 n 拷贝 n 次,其中 n 是集群的大小,然后编辑每个配置文件以监听不同的端口即可(如果您有构建依赖项,make devrel 会这样做)。然后可以启动每个目录中的每个 haret。下面详细说明了如何将节点组合在一起以形成一个集群。

开发者快速入门

如果您想对 haret 进行修改,请从这里开始。

设置开发集群

  • 安装 Rust。Haret 在 rust 1.15 及之后的任何稳定版本上构建
  • 安装 rlwrap,以便在 CLI 上获得 readline 支持
  • 构建一个 3 节点的开发集群并在本地主机上启动 3 个节点
    • cdharet && makedevrel && makelaunch
  • 注意,所有节点配置都存储在 haret/dev/devN

将 3 个节点加入以创建一个集群

  • 打开一个新的终端窗口(已启动节点的输出显示在原始窗口中)
  • 连接到节点1的管理服务器
    • rlwrap./target/debug/haret-admin127.0.0.1:2001
  • 检查集群状态以验证仅存在单个节点(dev1)
    • haret-admin>cluster status
  • 使用它们的集群端口将节点组合在一起以形成一个集群
    • haret-admin>cluster join dev2@127.0.0.1:3000
    • haret-admin>cluster join dev3@127.0.0.1:4000

创建和操作命名空间

  • 创建命名空间
    • haret-admin>vr create namespace test-nsr1::dev1@127.0.0.1:2000,r2::dev2@127.0.0.1:3000,r3::dev3@127.0.0.1:4000
  • 列出命名空间
    • haret-admin>vr namespaces
  • 获取 r1::dev1 的状态 - 应该显示主副本来在最上面。
    • haret-admin>vr replica test-ns::r1::dev1@127.0.0.1:2000
  • 显示配置
    • config
  • 退出 Admin 客户端
  • 运行 CLI 客户端,给出任何节点的 API 地址。我们选择在这里连接到 dev1。
    • rlwrap target/debug/haret-cli-client127.0.0.1:2002
  • 列出命名空间
    • list-namespaces
  • 进入 test-ns 命名空间,以便可以对该命名空间的树执行操作
    • enter test-ns

对命名空间执行命令

haret> create set /some/other/node
Ok
Epoch = 1, View = 6, Client Request Num = 3
haret> set insert /some/other/node hi
true
Version = 1 Epoch = 1, View = 6, Client Request Num = 4
haret> set contains /some/other/node hi
true
Version = 1 Epoch = 1, View = 6, Client Request Num = 5
haret> set contains /some/other/node h
false
Version = 1 Epoch = 1, View = 6, Client Request Num = 6
haret> create set /some/set
Ok
Epoch = 1, View = 6, Client Request Num = 7
haret> set insert /some/set blah
true
Version = 1 Epoch = 1, View = 6, Client Request Num = 8
haret> set intersection /some/set /some/other/node
Epoch = 1, View = 6, Client Request Num = 9
haret> set union /some/set /some/other/node
hi
blah
Epoch = 1, View = 6, Client Request Num = 10
haret>

测试故障转移

  • 注意 haret 状态
    • haret-admin>vr replica test-ns::r1::dev1
  • 杀死主副本(在这种情况下是 dev2)
    • makestop-dev2
  • 等待几秒钟以发生重新选举,然后从客户端 cli 重新进入命名空间以尝试发现新的主副本。
    • enter test-ns
  • 发出新命令以显示在崩溃主副本后状态得到保留
haret> set union /some/set /some/other/node
hi
blah
Epoch = 1, View = 7, Client Request Num = 11

依赖关系

~0.7–1.2MB
~19K SLoC