项目地址:https://github.com/doyoubi/undermoon
Undermoon
是一个基于 Redis 集群协议的自管理 Redis
集群系统,支持:
- 水平可扩展性和高可用性
- 通过
HTTP API
进行集群管理 master
和replica
的自动故障转移- 快速扩展
任何实现 redis
协议的存储系统也可以以某种方式与 undermoon
一起工作,例如 KeyDB。
- https://github.com/JohnSully/KeyDB
关于 Redis Cluster Protocol
的更深入解释以及 Undermoon 是如何实现的,请参考 Redis Cluster Protocol。
- https://github.com/doyoubi/undermoon/blob/master/docs/redis_cluster_protocol.md
架构
Metadata Storage(元数据存储)
Metadata storage
存储了整个 undermoon
集群的所有元数据,包括现有的 Redis
实例、代理和暴露的 Redis
集群。现在它是一个名为 Memory Broker
的内存存储服务器。当使用 undermoon-operator
时,这个 Memory Broker
会改为使用 ConfigMap
来存储数据。
Coordinator(协调器)
Coordinator
将在代理和服务器代理之间同步元数据。它还主动检查服务器代理的活跃度并启动故障转移。
Storage Cluster(存储集群)
Storage Cluster
由服务器代理和 Redis
实例组成。它就像官方的 Redis Cluster
一样为应用程序服务。可以在它和应用程序之间添加一个 Redis Cluster Proxy
,这样应用程序就不需要将其 Redis
客户端升级为智能客户端。
Chunk(块)
Chunk
是每个暴露的 Redis
集群的最小构建块。每个块由 4
个 Redis
实例和 2
个服务器代理组成,均匀分布在两台不同的物理机上。所以每个 Redis
集群的节点数将是 4
的倍数,一半 master
一半 replica
。
chunk
的设计使得构建具有良好拓扑的集群非常容易,以实现工作负载均衡。