<!doctype html>9.Redis Cluster
Redis Cluster 集群方案
呼唤集群
-
并发量 10万/每秒 100万/每秒
-
数据量 16~256G 业务需要500G呢
-
网络流量 千兆网卡
###解决方法 配置“强悍”的机器,超大内存,硬盘
###正确做法 -
分布式:简单的认为家机器 节省成本
-
集群:规模化需求
- 并发量:OPS
- 数据量:大数据
-
redis in release 3.0
数据分布
-
全量数据
-
分区规则
- 子集1
- 子集2
- 子集3
-
-
顺序分区
-
1~100
- 1~33
- 34~66
- 67~100
-
-
哈希分区 节点取模
- 1~100 hash(key)%3
数据分布对比
分布式 | 特点 | 典型产品 |
---|---|---|
哈希分布 | 数据分散度高 键值分布业务无关 无法顺序访问 不支持批量操作 |
一致性哈希 Redis Cluster 其他缓存产品 |
顺序分布 | 数据分散度易倾斜 键值业务相关 可顺序访问 支持批量操作 |
BigTable HBase |
###哈希分布
-
节点取余分区
- hash(key)%nodes 80%迁移
- 翻倍扩容 50%迁移
- 客户端分片 哈希+取余
- 节点伸缩 数据节点关系变化,导致数据迁移
- 迁移数量和添加节点数量有关 建议翻倍扩容
-
一致性哈希分区 memcache
-
tocken=0~2^32
-
添加一个节点 节点比较多的时候使用
- 不会影响所有节点 只会影响该节点两边的节点迁移
-
客户端分片:哈希+顺时针(优化取余)
-
节点伸缩:只影响临近节点,但是还是有数据迁移
-
翻倍伸缩:保证最小迁移数据和负载均衡
-
-
虚拟槽分区
- 预设虚拟槽:每个槽映射一个数据子集,一般比节点数大
- 良好的哈希函数:例如CRC16
- 服务端管理节点、槽、数据:例如redis Cluster
搭建集群
单机架构
分布式架构
- 每个节点都有读写 16384 平均
redis Cluster架构
-
节点 一堆节点
- cluster-enabled:yes
-
meet 节点间通信
- ping PONG
- 所有节点共享信息
-
指派槽 16384个slot
-
server 计算访问key的hash值 分配到节点
- 0~5460
- 5461 ~ 10922
- 10923~16383
-
client
- keyhash=hash(key)
- solt = keyhash%16383
-
redis cluster特性
- 复制
- 高可用
- 分片
-
-
安装配置
-
原生命令安装
-
原生命令安装-理解架构
-
配置开启节点
-
配置 prot ${prot}
daemonize yes
dir "/opt/soft/redis/data"
dbfilename "dump-${port}.rdb"
logfile "${port}.log"
cluster-enabled yes
cluster-config-file nodes-${prot}.conf -
开启节点
- redis-server redis-7000.conf
-
cluster主要配置 cluster-enabled yes
cluster-node-timeout 15000 #15s 主观下线时间
cluster-config-file "nodes.conf"
cluster-require-full-coverage no # 一个节点出现问题,集群将不可用
-
-
meet
- cluster meet ip port
- redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7001
-
指派槽
- cluster addsolts slot [slot ...]
- redis-cli -h 127.0.0.1 -p 7000 cluster addslots {0...5461}
-
设置主从 故障自动转移
- cluster replicate node-id
- redis-cli -h 127.0.0.1 -p 7003 cluster replicate ${node-id-7000}
- redis-cli -h 127.0.0.1 -p 7004 cluster replicate ${node-id-7001}
-
-
-
官方工具安装
-
ruby环境准备
-
下载 编译 安装ruby
-
安装rubygem redis
- wget ...redis-3.3.0.gem
- sudo gem installl -l redis-3.3.0.gem
- sudo gem list -- check redis gem
-
安装redis-trib.rb
- cp ${REDIS_HOME}/src/redis-trib.rb /usr/local/bin
-
-
配置开启redis
- redis-server redis-8000.conf
-
一键开启
- ./redis-trib.rb create --relicas 1 127.0.0.1:8000 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003 127.0.0.1:8004 127.0.0.1:8005 # 1代表一个从主机 8000 8001 8002 为三个主节点 后面依次对应的是从节点 自动meet 分配槽 检测槽分配是否合理
- ps -ef |grep redis-server | grep 700 | awk '{print $2}' |xargs kill
-
-
原生命令安装
- 理解redis cluster架构
- 生产不使用
-
官方工具安装
- 高效、准确
- 生产环境可以使用
-
其他
- 可视化部署
-