Valkey 集群 5 条命令铺满 3 主 3 从:create-cluster 快速上手
【免费下载链接】placeholderkvA flexible distributed key-value database that is optimized for caching and other realtime workloads.项目地址: https://gitcode.com/GitHub_Trending/pl/placeholderkv
手动起 6 个 Valkey 节点再铺 3 主 3 从,要写 6 份 conf、对 6 个端口、最后还得对着--cluster create的 6 个地址拼参数,拼错一个字符就前功尽弃。本文用仓库自带的utils/create-cluster/create-cluster脚本,在约 3 分钟内把一条可读写、带复制的 Valkey 集群跑起来,最后连清理都一条命令收尾。
能力速览
create-cluster本质是 bash 对valkey-server和valkey-cli的薄封装,子命令一览(完整清单见./create-cluster不带参数时的输出,源码在 utils/create-cluster/create-cluster):
| 子命令 | 一句话作用 | 典型场景 |
|---|---|---|
start/create [-f] | 批量拉起节点 / 执行--cluster create铺拓扑 | 从零搭集群 |
watch | 每秒刷新首节点的CLUSTER NODES前 30 行 | 盯着主从和槽位状态 |
tail <id>/tailall | 看第 N 个节点日志 / 全部日志 | 出问题时定位 |
stop/restart/call <cmd> | 停机、重启、对全节点批量发命令 | 日常维护 |
clean/clean-logs | 删 AOF、RDB、conf 与日志 | 推倒重来 |
动手前检查 🔧
src/下已有valkey-server和valkey-cli,即仓库根目录执行过make(编译细节见 README.md)- 30001–30006 这 6 个 TCP 端口空闲,否则第一个节点就起不来
- 脚本必须在该目录下运行,因为
nodes-*.conf、日志、AOF 全部落在当前目录,valkey-server路径硬编码为../../src/
脚本头部默认PORT=30000(实例落在 30001–30006)、NODES=6、REPLICAS=1、CLUSTER_HOST=127.0.0.1。不想改脚本的话,在当前目录放一个config.sh覆盖即可,最小示例:
# utils/create-cluster/config.sh PORT=40000 NODES=6 REPLICAS=1其余可调参数(TIMEOUT、PROTECTED_MODE、ADDITIONAL_OPTIONS)见 utils/create-cluster/README。
操作主链路
拉起 6 个集群实例
cd utils/create-cluster ./create-cluster start你应当看到 6 行Starting 30001…Starting 30006。此时目录里多出30001.log…30006.log、nodes-30001.conf… 和 AOF 目录。每个实例带着--cluster-enabled yes --appendonly yes --daemonize yes在后台跑,AOF 默认开启,后面随手stop也不会丢数据。
一条命令铺好 3 主 3 从
./create-cluster create -f-f对应valkey-cli的--cluster-yes,跳过交互确认。你应当看到 16384 个哈希槽(把 key 的 CRC16 对 16384 取模得到的槽位编号)被均分到 3 个主节点,每个槽段后面跟着-> <另一个ip:port>的复制关系,结尾出现Cluster created之类的成功提示。注意CLUSTER_HOST默认写死127.0.0.1,如果你是在容器里访问这套节点,先改它在config.sh。
写入一个 key 验证自动重定向
../../src/valkey-cli -c -p 30001 set mykey hello ../../src/valkey-cli -c -p 30001 get mykey-c让客户端以集群模式连接。你应当看到-> Redirected to slot [xxxx] located at 127.0.0.1:300xx,说明 key 按哈希槽被路由到了负责的主节点,随后get原样返回"hello"。
每秒刷一次集群拓扑
./create-cluster watch你应当看到时间戳加CLUSTER NODES前 30 行每秒刷新,mymaster、slave、connected和槽段一目了然。这里有个小坑:它固定只看第一个节点(PORT+1),不是轮询 6 个节点,想看全用./create-cluster call cluster info。按 Ctrl+C 退出。
停机与清空
./create-cluster stop ./create-cluster cleanstop对 6 个端口依次shutdown nosave;clean删除*.log、appendonlydir-*、dump-*.rdb、nodes-*.conf。跑完目录恢复干净,再start就是全新环境。
排错速查 📌
Address already in use→ 根因:30001–30006 端口段被占用 → 处置:ss -ltnp | grep 3000找到占用者,config.sh里换PORT,或释放端口后重来
create阶段节点连不上 / 拓扑建一半→ 根因:实例没起来,或CLUSTER_HOST与节点实际监听地址不符 → 处置:./create-cluster tailall看日志,对照config.sh里的CLUSTER_HOST修正
重启后写入报集群不可用→ 根因:restart只重启进程,槽位拓扑存在nodes-*.conf里;而clean把这些 conf 删了,进程起来后等于空集群 → 处置:确认nodes-*.conf还在后重新./create-cluster create -f
只想要干净日志,别动数据→ 根因:clean会连 AOF 和 RDB 一起删 → 处置:改用./create-cluster clean-logs
机制一句话
脚本只做一件事:循环端口区间,把进程、日志、AOF、nodes-*.conf按实例编号生成在同一个目录。
- 拓扑和数据解耦:conf 文件单独删,集群就能原地重建
ADDITIONAL_OPTIONS透传给每个valkey-server,不动脚本也能追加启动参数REPLICAS决定每个主节点的从节点数,配合NODES控制主从比例
延伸出口
- 想搞懂跨节点搬数据时槽位如何原子切换:design-docs/atomic-slot-migration.md
- 回归测试集群行为参考:tests/integration/
- 给集群加并发能力:design-docs/io-threads.md
【免费下载链接】placeholderkvA flexible distributed key-value database that is optimized for caching and other realtime workloads.项目地址: https://gitcode.com/GitHub_Trending/pl/placeholderkv
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考