Redis Cluster
呼唤集群
redis最高可以达到10万/s,如果业务需要100万/s呢?
单机器内存太小,无法满足需求
数据分布
顺序分区的数据量不可确定性导致倾斜,不支持批量操作
哈希分布
节点取余分区 hash(key)%nodes
如果要增加分区,数据迁移量在80%左右
数据迁移第一次是无法从数据中取到的,数据库需要进行回写到新节点
客户端分片:哈希+取余
节点伸缩:数据节点关系变化,导致数据迁移
迁移数量和添加节点数量有关:建议翻倍扩容
一致性哈希分区
比较适合节点多的情况
客户端分片:哈希+顺时针(优化取余)
节点伸缩:只影响邻近节点,但是还是有数据迁移
翻倍伸缩:保证最小迁移数据和负载均衡
虚拟槽分区
共享消息模式
预设虚拟槽:每个槽映射一个数据子集,一般比节点数大
良好的哈希函数:例如CRC16
服务端管理节点、槽、数据:例如Redis Cluster
搭建集群
复制,高可用,切片
节点之间通过meet来相互通信
给节点指派槽,这样节点可以正常的读写
每个主节点有复制一个从节点
安装
原生命令安装
配置开启节点
meet
指派槽
主从
cluster replicate node-id
官方工具安装
port $(port}
daemonize yes
dir "/opt/redis/redis/data/"
dbfilename "dump-${port}.rdb"
logfile "$(port}.log"
cluster-enabled yes
cluster-config-file nodes-${port}.conf
redis-server redis-7000.conf
redis-server redis-7001.conf
redisaserver redis-7002.conf
redis-server redis-7003.conf
redis-server redis-7004.conf
redis-server redis-7005.conf
cluster meet ip port
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.17001
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7002
redis-c