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

app vmware/haret-server

强一致性分布式协调服务

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2017年1月12日

#10 in #coordination

462 星 & 26 关注者

Apache-2.0

5KB
70

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

haret

Build Status

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

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

发布快速入门

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

在单个节点上运行复制组

发布用于 Mac OSXLinux 的二进制文件可以从 这里 下载。

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

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

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

打开另一个我们可以用来与此节点通信的终端。

连接到 node1 的管理服务器

./haret-admin 127.0.0.1:5001

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

haret-admin> cluster status

在 node1 上创建命名空间

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 客户端连接到 node1 上的 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 以在 CLIs 上获得 readline 支持
  • 构建一个 3 节点开发集群并在本地主机上启动 3 个节点
    • cdharet && makedevrel && makelaunch
  • 请注意,所有节点配置都存储在 haret/dev/devN

将 3 个节点连接起来以创建一个集群

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

依赖项

~11MB
~227K SLoC