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

app vmware/haret-admin

强一致性分布式协调服务

1 个不稳定发布

使用旧的 Rust 2015

0.1.0 2017年1月12日

#7 in #coordination

462 星 & 26 关注者

Apache-2.0

10KB
253

VMware 已结束此项目的积极开发,此存储库将不再更新。

haret

Build Status

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

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

发布快速入门

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

在单个节点上运行复制组

发布 Mac OSXLinux 的二进制文件可以在此处下载 here

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

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

虽然 haret 复制组(命名空间)旨在在跨多个物理机器的集群中运行以提高容错性,但它也适用于测试目的的单个进程。组中的每个副本都由一个轻量级的actor表示,该actor可以接收和响应消息,因此我们只需指定同一节点上的一组actor作为复制组即可。

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

连接到节点1的admin服务器

./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

现在退出 admin CLI 并通过 CLI 客户端连接到 node1 上的 API 端口

./haret-cli-client 127.0.0.1:5002

列出命名空间

haret> list-namespaces

进入 test-ns 命名空间,以便可以对命名空间的树进行操作。这包括学习哪个副本是该命名空间的主副本,以便可以发送消息。

haret> enter test-ns

现在开始对命名空间进行操作。它们可以在提示符下输入 help 来发现。更多示例请参阅下面

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

开发者快速入门

如果您想对 haret 进行黑客攻击,请从这里开始。

设置开发集群

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

将 3 个节点组合在一起以创建一个集群

  • 打开一个新的终端窗口(启动节点的输出显示在原始窗口中)
  • 连接到节点1的admin服务器
    • 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
  • 退出管理客户端
  • 运行 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

依赖关系

~12MB
~235K SLoC