1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017年1月12日 |
---|
#10 in #coordination
462 星 & 26 关注者
5KB
70 行
VMware 已停止此项目的积极开发,此存储库将不再更新。
haret
haret 提供了一个基于成熟协议构建的分布式服务,通过易于使用的 API 暴露强一致性协调原语,以满足许多分布式应用的必要依赖。您可以在这里了解更多关于我们为什么决定构建 haret 的信息 为什么构建 haret。
此 README 包含了针对开发者和用户的快速入门说明。有关使用 haret 的更多信息,请参阅 粗略且不完整 的 用户指南。
发布快速入门
如果您是 haret 的最终用户且不感兴趣于构建代码,请从这里开始。
在单个节点上运行复制组
发布用于 Mac OSX
和 Linux
的二进制文件可以从 这里 下载。
每个发布目录都包含一个用于运行单个 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 之后的任何稳定版本上都可以构建
- curl -sSf https://static.rust-lang.org/rustup.sh | sh -s -- --channel=stable
- 安装 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