呼唤集群
- 并发量
redis 10W/每秒 ,超过10W时,如何处理?
- 数据量
内存容量超过单机物理内存, 如何处理?
- 网络流量
单机网络流量无法满足时如何处理?
简单解决方案: 增强单机性能.瓶颈明显. 替代方案: 分布式(cluster)3.0版本提供
数据分布
数据分区
- 顺序分区: 数据分散度易倾斜 例如: BigTable HBase
- 哈希分区(例如节点取模): 数据高度分散,键值分布和数据无关,无法顺序访问,支持批量操作 例如: redis-cluster Memcache(一致性哈希)
- 节点取余 添加节点时会发生数据严重偏移, 采用多倍扩容(数据迁移量50%,稍微好点). 缺点:数据迁移量大
- 一致性哈希分区 哈希+顺时针(优化取余) 节点伸缩: 只影响临近节点 ,翻倍伸缩减少数据迁移量
- 虚拟槽分区 0-16383
搭建集群
- 节点
cluster-enabled:yes
- meet
节点通信,所有节点之间共享消息
- 指派槽
为每个节点平均分配16384个槽
- 复制
通过主从复制实现高空,采用分片策略.
安装
- 原生命令安装
- 配置开启节点
port
daemonize yes
dir
dbfilename
logfile
cluster-enable yes //集群节点
cluster-node-timeout 15000 //故障转移时间
cluster-config-file //集群节点配置
cluster-require-full-coverage yes //要求所有服务都正常才算正常,一般为no
- meet
cluster meet ip port
redis-cli -h 127.0.0.1 -p 7000 cluster meet ip port
- 指派槽
cluster addslots slot [slot ...]
redis-cli -h ip -p port cluster addslots {0...1222}
- 分配主从关系
cluster replicate node-id
redis-cli -h ip -p port cluster replicate ${node-id-7000}
- 官方工具安装 redis-trib
Ruby环境
- 下载安装ruby 2. 安装rubygem redis 3 安装redis-trib.rb