Redis三种部署方案

一、使用场景

  • 缓存数据安全性有要求
  • 缓存存储规模大
  • 缓存高并发读写

二、工作原理

  1. 主从复制

    • 全量复制:主节点bgsave,写缓冲区;从节点清空后复制到bgsave点后,执行缓冲区里所有写操作。如果从节点有AOF,则执行bgwriteaof。(全量复制,在bgsave量特别大时,从节点会陷入死循环重连+重新全量复制,因此数据规模尽可能不要太大)

    • 增量复制:从节点发送slaveof给主节点,主节点根据psync决定全量复制还是增量复制;主节点根据offset从复制挤压缓冲区中,部分复制给从节点。

  2. 哨兵机制(v2.8)

    • 主从切换:ping-pong机制,sdown主动下线,odwn超过半数则客观下线,failover选取新主节点。高优先级 》数据最新》最小从ID。
    • 哨兵通信:哨兵通过redis的pub/sub订阅功能,实现哨兵间相互发现
  3. 集群模式(v3)

    • 哈希槽:键值经过CRC64计算并取模18364,得到数据实际存放节点; "redis-trib.rb"的 rebalance可重平衡哈希槽.

三、实例

  1. 主从复制

    # 从数据库加入配置
    slaveof <masterip> <masterport>
    
  2. 哨兵机制(v2.8)

    # 关闭保护模式
    protected-mode no
    # 哨兵;最后2表示两个哨兵认为master不可用时标记为odown
    sentinel monitor mymaster 127.0.0.1 6379 2
    ## 启动指令
    redis-server sentinel.conf --sentinel
    
  3. 集群模式(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以前)
posted @ 2022-04-12 15:11  SArtOnline  阅读(268)  评论(0)    收藏  举报