12 个版本
0.2.6 | 2024 年 6 月 27 日 |
---|---|
0.1.5 | 2024 年 6 月 24 日 |
0.0.5 | 2024 年 6 月 19 日 |
#2170 在 数据库接口
32KB
594 行
远程哈希表
使用 gRPC 实现的复制键值存储的分布式节点集群管理系统。
目录
特性
- 分布式键值存储
- 节点集群管理
- 通过定期 ping 进行健康检查
- 跨节点数据复制
- 可配置的 ping 间隔
- Docker 支持简化部署
架构
系统由两个主要组件组成
- 节点:能够存储键值对并响应 ping 请求的单个服务器。
- 节点组:节点集群的管理器,处理节点添加、检索和健康监控。
入门
先决条件
- Rust(带有 Cargo 包管理器)
- protoc(Protocol Buffers 编译器)用于 gRPC
- Docker(可选,用于容器化部署)
安装
-
克隆仓库
git clone https://github.com/kwdowicz/remote_hash_map.git cd remote_hash_map
-
构建项目
cargo build --release
使用方法
运行节点组
启动节点组服务
./target/release/ng --listen 127.0.0.1:5000
运行单个节点
运行节点并将它们连接到节点组
./target/release/node --listen 127.0.0.1:6001 --ng 127.0.0.1:5000
./target/release/node --listen 127.0.0.1:6002 --ng 127.0.0.1:5000
使用客户端
-
创建新项目
mkdir rhm_test && cd rhm_test cargo init cargo add remote_hash_map tokio
-
将以下内容添加到
src/main.rs
use remote_hash_map::common::client::Client; #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { let mut client = Client::connect("127.0.0.1:5000").await?; client.set("name", "Daria").await?; client.set("name", "Tosia").await?; client.set("name", "Gabi").await?; let result = client.get("name").await?; println!("Name: {}", result); Ok(()) }
-
运行客户端
cargo run
使用 grpcurl 示例
grpcurl -plaintext -d '{"key": "name", "value": "Tas", "replication": true }' 127.0.0.1:5021 node_rpc.NodeRpc/Set
grpcurl -plaintext -d '{}' 127.0.0.1:5000 node_group_rpc.NodeGroupRpc/GetServer
Docker 支持
使用 Docker 构建 и 运行
docker build -t remote_hash_map .
docker network create --subnet=192.168.0.0/16 my_network
docker run --name ng --network my_network --ip 192.168.0.3 remote_hash_map ng
docker run --name node --network my_network --ip 192.168.0.4 -e NG_ADDRESS="192.168.0.3:5000" remote_hash_map node
配置
- 可以为节点组配置 ping 间隔
./target/release/ng --listen 127.0.0.1:5000 --ping-sec 4
日志记录
项目使用 env_logger
。设置 RUST_LOG
环境变量以设置不同的日志级别
RUST_LOG=debug ./target/release/node --listen 127.0.0.1:6001 --ng 127.0.0.1:5000
故障排除
- 确保所有依赖项都已安装并正确配置。
- 请检查指定的端口是否正在使用或被防火墙阻止。
- 检查日志输出以查找错误或警告。
贡献
欢迎贡献!请提交拉取请求或创建一个问题来讨论拟议的更改或改进。
许可证
本项目采用 MIT 许可证。
依赖项
~7–14MB
~150K SLoC