- 1. Redis应用与运维实践
- 2. 关于我强昌金 – 小强
目前就职: 去哪儿DBA
曾就职: 陌陌DBA
工作经验: 2年
负责酒店相关业务,Redis运维,数据库管理平台开发
TEL:18513418589 QQ:627978402
- 3. 目录Redis概述
Redis应用注意事项
Redis运维踩过的坑
Redis cluster介绍
- 4. Redis概述高性能的KEY-VALUE内存存储
支持主从同步
丰富的API
- 5. Redis概述数据模型
字符串(String)
字符串列表(List)
无序不重复的字符串集合(SET)
有序不重复的字符串集合(ZSET)
键、值的字符串的哈希表(HASH)
- 6. Redis概述数据存储
内存
ADB
AOF
- 7. Redis应用注意事项Redis list的使用
PUSH、POP操作保证在同一个节点上
队列长度添加监控
队列与别的Redis业务分开使用
- 8. Redis应用注意事项过期KEY的使用
对于包含过期时间的KEY操作,保持在同一个节点上
对于过期KEY的redis,可以设置最大内存限制
配置LRU策略
- 9. Redis应用注意事项HASH的使用
避免使用HGETALL、HKEYS、HVALS
- 10. Redis应用注意事项SERVER端操作注意事项
禁用KEYS * 、SAVE、….
默认使用数据库0、不要使用SELECT 选择多个数据库
- 11. Redis运维踩过的坑一主多从(级联情况)
- 12. Redis运维踩过的坑一主多从(级联情况)
- 13. Redis运维踩过的坑一主多从(级联情况)
- 14. Redis运维踩过的坑一主多从(级联情况)
- 15. Redis运维踩过的坑Redis备份的问题
RDB备份
AOF备份
单机多实例的RDB问题
- 16. Redis运维踩过的坑Redis 主从搭建问题
避免高峰期搭建,可能导致失败
Redis做RDB的时候,Redis可能出现夯死的情况
Buffer区写爆了
解决措施:
尽量在压力小的实例搭建从库
调整client-output-buffer-limit slave
- 17. Redis运维踩过的坑Redis 连接超时问题
解决方案
慢查询监控
业务优化
- 18. Redis运维踩过的坑MONITOR导致内存飙升
解决方案:
通过client-output-buffer-limit限制
有能力的可以修改monitor实现机制(臣妾暂时无法做到)
- 19. Redis Cluster介绍Redis 原生Cluster 特性
高可用性与可线性扩展
数据自动路由到多个节点
节点间数据共享
可动态添加或者删除节点
数据通过异步复制,不保证数据的强一致性
可动态调整数据分布
- 20. Redis Cluster 介绍
- 21. Redis Cluster 介绍Redis集群数据分布
Redis 集群没有使用一致性hash,引入了哈希槽(HASH SLOT).
Redis 集群中所有的主节点都负责 16384 个哈希槽中的一部分。当集群处于稳定状态时,集群中没有在执行重配置(reconfiguration)操作,每个哈希槽都只由一个节点进行处理(不过主节点可以有一个或多个从节点,可以在网络断线或节点失效时替换掉主节点)
slot = CRC16(KEY) / 16384
- 22. Redis Cluster介绍Redis 集群键HASH标签
目标:
HASH标签是确保两个KEY 都能在同一个HASH槽的一种方式
实现方式:
HASH 槽是用另一种不同的计算方式计算的。基本来说,如果KEY包含一个"{...}"这样的模式,只有“{” 和 “}” 之间的字符串会被用来做HASH以获取HAS槽。如果同时出现多个“{}” 计算方式如下:
* 如果KEY 包含一个 “{” 字符
* 那么在 “{”的右边就会字符 "}”
* 在字符 “{” 和 “}”直接会有一个或多个字符。但是第一个“}” 一定会出现在第一个“{”之后
* 只有在第一个 { 和它右边第一个 } 之间的内容会被用来计算哈希值
例子:
1、比如这两个键 user:{1000}.following 和user:{1000}.followers 会被哈希到同一个哈希槽里,因为只有 "1000" 这个子串会被用来计算哈希值。
2、对于 user{}{list} 这个键,整个键都会被用来计算哈希值,因为第一个出现的 { 和它右边第一个出现的 } 之间没有任何字符。
3、对于 user{{momoid}}following 这个键,用来计算哈希值的是 "{momoid" 这个子串,因为它是第一个 { 及其右边第一个 } 之间的内容。
4、对于 user{momoid}{following} 这个键,用来计算哈希值的是 "momoid" 这个子串,因为算法会在第一次有效或无效(比如中间没有任何字节)地匹配到 { 和 } 的时候停止。
5、按照这个算法,如果一个键是以 {} 开头的话,那么就当作整个键会被用来计算哈希值。当使用二进制数据做为键名称的时候,这是非常有用的。
- 23. Redis Cluster 介绍相关命令
集群
1、CLUSTER INFO 打印集群的信息
2、CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。
3、CLUSTER FAILOVER 手动故障转移,需要在转移的主节点的从节点上执行
节点
1、CLUSTER MEET 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
2、CLUSTER FORGET 从集群中移除 node_id 指定的节点。
3、CLUSTER REPLICATE 将当前节点设置为 node_id 指定的节点的从节点。
4、CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
槽(slot)
1、CLUSTER ADDSLOTS [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
2、CLUSTER DELSLOTS [slot ...] 移除一个或多个槽对当前节点的指派。
3、CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
4、CLUSTER SETSLOT NODE 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,然后再进行指派。
1、CLUSTER SETSLOT MIGRATING 将本节点的槽 slot 迁移到 node_id 指定的节点中。
2、CLUSTER SETSLOT IMPORTING 从 node_id 指定的节点中导入槽 slot 到本节点。
3、CLUSTER SETSLOT STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。
键
1、CLUSTER KEYSLOT 计算键 key 应该被放置在哪个槽上。
2、CLUSTER COUNTKEYSINSLOT 返回槽 slot 目前包含的键值对数量。
3、CLUSTER GETKEYSINSLOT 返回 count 个 slot 槽中的键。
不支持的命令:
1、不支持SELECT 命令,集群只使用数据库 0
2、不支持多个KEY的操作 如 MSET、SUION、SINTER等命令 (因为KEYS 无法hash到同一个slot中)
- 24. Redis Cluster介绍集群配置
必须配置:
cluster-enabled yes --> 开启集群模式
cluster-config-file nodes-30000.conf --> 集群相关的信息
cluster-node-timeout 15000 --> 节点超时时间,用来failover的操作
可选配置:
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
Redis-trib.rb 相关命令
redis-trib.rb create [--replicas N] host:ip [host:ip ...] 创建集群
redis-trib.rb add-node host:ip host:ip 将前面的host:ip 添加到集群中
redis-trib.rb check host:ip 检查集群的状态
redis-trib.rb reshard host:ip OR redis-trib.rb reshard --from host:port --to host:port --slots --yes集群重新分片
redis-trib.rb del-node host:ip 'NODE ID' 将节点从集群中移除
- 25. Redis Cluster 介绍Failover机制
节点心跳
失效检测
从选举与提升
- 26. Redis Cluster介绍优点
redis 在主节点下线后,从节点会自动提升为主节点,提供服务
redis 宕机节点恢复后,自动会添加到集群中,变成从节点
缺点
由于redis的复制使用异步机制,在自动故障转移的过程中,集群可能会丢失写命令。然而 redis 几乎是同时执行(将命令恢复发送给客户端,以及将命令复制到从节点)这两个操作,所以实际中,命令丢失的窗口非常小。
- 27. 广告篇关注去哪儿
关注3W教育(泰岳树人科技有限公司)
关注ACMUG
- 28. (本页无文本内容)
- 29. 精品课程推荐 3w教育荣誉出品《MySQL DBA脱产班》
《MySQL DBA周末加强提高班》
《HTML5 零基础全日制班》
《互联网架构师班》
《云计算周末集训营》
《Linux运维零基础脱产班》
联系方式:
咨询QQ群:167605499