1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017年1月12日 |
---|
#9 in #coordination
462 星 & 26 关注者
13KB
372 行
VMware 已停止对该项目的积极开发,该仓库将不再更新。
haret
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 及之后的任何稳定版本上构建
- curl -sSf https://static.rust-lang.org/rustup.sh | sh -s -- --channel=stable
- 安装 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