为什么需要集群
- 并发量QPS较大
- 数据量较大
高并发和大数据量时, 单机无法满足,这个时候就需要使用分布式
数据分布
分布式数据库-数据分区
- 顺序分区
- 哈希分区
顺序分区和哈希分区对比 :
哈希分区
节点取余(不建议)
客户端分片 : 哈希 + 取余
节点伸缩 : 数据节点关系变化, 导致数据迁移
迁移数量和添加节点数量有关 : 建议翻倍扩容
一致性哈希
- 客户端分片 : 哈希 + 顺时针(优化取余)
- 节点伸缩 : 值影响临近节点, 但还是有数据迁移
- 翻倍伸缩 : 保证最小迁移数据和负载均衡
虚拟槽分区
预设虚拟槽 : 每个槽映射一个数据子集, 一般比节点数大
良好的哈希函数 : 例如CRC16
服务端管理节点, 槽, 数据 : 例如Redis Cluster
集群搭建
基本架构
单机架构 :
分布式架构 :
Redis Cluster架构
节点
meet : 节点之间进行通信, 所有节点共享信息
指派槽
客户端与指派槽 :
对上面两幅图进行一下说明 :
- 将16384个槽分别分配给A, B, C三个节点
- 客户端访问时, 根据哈希对槽进行取余,就可以获取到数据存放的槽, 同时也能获取到负责这个数据槽对应的节点
复制
- 主从复制
- 高可用
- 分片
Redis Cluster安装
原生命令安装
- 配置开启节点
port ${port}
daemonize yes
dir 工作目录
dbfilename “dump-${port}”.rdb
logfile “\${port}.logcluster-enabled yes : 配置是否开启cluster
cluster-config-file nodes-${port}.conf : 指定cluster配置文件, 节点启动之后会生成这个文件
meet
redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7001
表示从7000 meet 7001
指派槽
cluster addslots slot[slot…]
redis-cli -h 127.0.0.1 -p 7000 cluster addslots {0…5461}, 将0-5461的槽分配给7000节点
设置主从
cluster replicate node-id
redis-cli -h 12