哨兵模式sentinel
集群监控:负责监控master 和slave 进程
消息通知: redis 实例故障,发消息给管理员
故障转移: master 宕机,自动转移slave
配置中心: 转移发生,通知client新的master地址
至少需要3个实例,保证健壮性
哨兵+redis主从部署,不保证数据零丢失,只保证高可用
建议充足测试
cluster模式
原理
Redis Cluster是一种服务端Sharding技术,采用slot的概念,一共16384个槽
每个key通过CRC16校验后对16384取模来决定放置哪个槽
请求发送到任意节点,接收到请求的节点会将查询请求发送到正确的节点上
方案说明
通过哈希的方式,将数据分片,每个节点均分存储一定的哈希槽区间的数据,默认16384
每份数据分片会存储在多个互为主从的多节点上
数据写入先写主节点,再同步到到从节点
同一个分片多节点间的数据不保持一致性
读取数据时,当客户端操作的key没有分配在该节点时,redis会返回转向指令,指向正确的节点
扩容时需要把旧节点的数据迁移一部分到新的节点
端口说明
每个redis要放开2个端口 6379 16379 (6379+10000)
16379用来节点间通信的 gossip协议
主从模式
核心原理
当从库和主库建立MS(Master-Slave)关系后,会向主库发送SYNC命令
主库接收到SYNC命令后会开始再后台保存快照,并将期间接收到的命令保存
当快照完成后,主库会将快照和所有的缓存的写命令发送给从库
从库接收到后,会载入快照并执行存储的缓存命令
当主库每当接收到写命令时会将命令发送至从库,保持数据一致性
缺点
所有的slave节点的数据复制和同步都由主节点来处理,造成master压力大
缓存与数据库一致性
先写缓存,在写数据库,缓存成功,数据库失败(脏读)