9 redis 集群
一、集群分区方案
-顺序分区 -哈希分区 -节点区域 -一致性hash -虚拟槽--->redis集群--》16384个槽
二、redis集群原理
5个节点,把16384个槽平均分配到每个节点,客户端会把数据发送给任意一个节点,通过CRC16对key进行哈希对16383进行取余,算出当前key属于哪部分槽,属于哪个节点,每个节点都会记录是不是负责这部分槽,如果是负责的,进行保存,如果槽不在自己范围内,redis cluster是共享消息的模式,它知道哪个节点负责哪些槽,返回结果,让客户端找对应的节点去存
服务端管理节点,槽,关系
port 7000 daemonize yes dir "/root/s19/redis-5.0.7/data" logfile "7000.log" dbfilename "dump-7000.rdb" cluster-enabled yes cluster-config-file nodes-7000.conf cluster-require-full-coverage yes # 快速生成其他配置 sed 's/7000/7001/g' redis-7000.conf > redis-7001.conf sed 's/7000/7002/g' redis-7000.conf > redis-7002.conf sed 's/7000/7003/g' redis-7000.conf > redis-7003.conf sed 's/7000/7004/g' redis-7000.conf > redis-7004.conf sed 's/7000/7005/g' redis-7000.conf > redis-7005.conf # 启动6个节点 ./src/redis-server ./redis-7000.conf ps -ef |grep redis ./src/redis-server ./redis-7001.conf ./src/redis-server ./redis-7002.conf ./src/redis-server ./redis-7003.conf ./src/redis-server ./redis-7004.conf ./src/redis-server ./redis-7005.conf ## 客户端链接上的命令: cluster nodes cluster info # 快速搭建集群 redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
## 集群扩容
sed 's/7000/7006/g' redis-7000.conf > redis-7006.conf sed 's/7000/7007/g' redis-7000.conf > redis-7007.conf ./src/redis-server ./redis-7006.conf ./src/redis-server ./redis-7007.conf ### 方式一 在7000上执行 redis-cli -p 7000 cluster meet 127.0.0.1 7006 redis-cli -p 7000 cluster meet 127.0.0.1 7007 ### 方式二 redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000 redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7000 # 让7007做为7006的从 redis-cli -p 7007 cluster replicate 0ee8ebaede3a3f65de57c8443082547d3efd55d8 #分槽 ./src/redis-cli --cluster reshard 127.0.0.1:7000
## 缩容
# 下线迁槽(把7006的1366个槽迁移到7000上) redis-cli --cluster reshard --cluster-from 0ee8ebaede3a3f65de57c8443082547d3efd55d8 --cluster-to 24a7ff58d9ce9ca3d9d44874a9d83784bcac639e --cluster-slots 1366 127.0.0.1:7000 yes redis-cli --cluster reshard --cluster-from 0ee8ebaede3a3f65de57c8443082547d3efd55d8 --cluster-to 8bffd1758091236005a09fe695435154ccefe74d --cluster-slots 1366 127.0.0.1:7005 yes redis-cli --cluster reshard --cluster-from 0ee8ebaede3a3f65de57c8443082547d3efd55d8 --cluster-to 0a122d418d6386c4ef1f6b6ea69e5c967adaf0da --cluster-slots 1365 127.0.0.1:7002 yes # 忘记节点,关闭节点 redis-cli --cluster del-node 127.0.0.1:7000 a44672ed51398e19f746646ffccb726a2d4fa914 # 先下从,再下主,因为先下主会触发故障转移 redis-cli --cluster del-node 127.0.0.1:7000 0ee8ebaede3a3f65de57c8443082547d3efd55d8 # # 关掉其中一个主,另一个从立马变成主顶上, 重启停止的主,发现变成了从
分类:
redis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)