Redis三种部署方案
一、使用场景
- 缓存数据安全性有要求
- 缓存存储规模大
- 缓存高并发读写
二、工作原理
-
主从复制
-
全量复制:主节点bgsave,写缓冲区;从节点清空后复制到bgsave点后,执行缓冲区里所有写操作。如果从节点有AOF,则执行bgwriteaof。(全量复制,在bgsave量特别大时,从节点会陷入死循环重连+重新全量复制,因此数据规模尽可能不要太大)
-
增量复制:从节点发送slaveof给主节点,主节点根据psync决定全量复制还是增量复制;主节点根据offset从复制挤压缓冲区中,部分复制给从节点。
-
-
哨兵机制(v2.8)
- 主从切换:ping-pong机制,sdown主动下线,odwn超过半数则客观下线,failover选取新主节点。高优先级 》数据最新》最小从ID。
- 哨兵通信:哨兵通过redis的pub/sub订阅功能,实现哨兵间相互发现
-
集群模式(v3)
- 哈希槽:键值经过CRC64计算并取模18364,得到数据实际存放节点; "redis-trib.rb"的 rebalance可重平衡哈希槽.
三、实例
-
主从复制
# 从数据库加入配置 slaveof <masterip> <masterport> -
哨兵机制(v2.8)
# 关闭保护模式 protected-mode no # 哨兵;最后2表示两个哨兵认为master不可用时标记为odown sentinel monitor mymaster 127.0.0.1 6379 2 ## 启动指令 redis-server sentinel.conf --sentinel -
集群模式(v3)
# 开启集群模式(默认关闭) cluster-enbaled yes # 集群配置文件,自动生成 cluster-config-file nodes-6379.conf # 集群通信超时 cluster-node-timeout 15000 #由redis服务器自动生成,默认情况下,redis服务器程序会定期自动对数据库做一次遍历,把内存快照写在一个叫做“dump.rdb”的文件里,这个持久化机制叫做SNAPSHOT; #有了SNAPSHOT后,如果服务器宕机,重新启动redis服务器程序时,redis会自动加载dump.rdb,将数据库状态恢复到上一次做SNAPSHOT时的状态 dbfilename "dump.rdb" #数据目录,数据库写入此目录,redis 存储分为内存储存、磁盘存储和log文件三部分; #rdb、aof文件也写在此目录; #rdb持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot);即全量数据(rdb):把内存中的数据写入磁盘,便于下次读取文件进行加载; #aof持久化可以记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集;aof文件中的命令全部以redis协议的格式来保存,新命令会被追加到文件的末尾;redis 还可以在后台对aof文件进行重写(rewrite),使得aof文件的体积不会超出保存数据集状态所需的实际大小;即增量请求(aof):是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据; #redis还可以同时使用aof持久化与rdb持久化,此时,当redis重启时,它会优先使用aof 文件还原数据集,因为aof文件保存的数据集通常比rdb文件所保存的数据集更完整。 dir "/usr/local/redis/var/lib/redis_6379"
四、SWOT
| S | W | O | T | |
|---|---|---|---|---|
| 主从复制 | 1、读写分离 2、部署简单 |
1、主库单机,雪崩 2、扩容需要迁移数据 3、从节点不会删除过期数据(v3.2以前) |
||
| 哨兵机制 | 1、主从自动切换 2、哨兵高可用 3、官方推荐(v2.8) |
1、扩容需要迁移数据 2、从节点不会删除过期数据(v3.2以前) |
||
| 集群模式 | 1、水平扩容和数据迁移 2、集群高可用(v3) |
1、从节点不会删除过期数据(v3.2以前) |
本文来自博客园,作者:SArtOnline,转载请注明原文链接:https://www.cnblogs.com/sartonline/p/16135273.html
浙公网安备 33010602011771号