zoukankan      html  css  js  c++  java
  • Redis集群

    Redis集群

    • Redis 单副本
    • Redis 多副本(主从)
    • Redis Sentinel(哨兵)
    • Redis Cluster

    Redis 单副本

    Redis 单副本,采用单个 Redis 节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景。

    优点

    • 架构简单,部署方便
    • 高性价比,缓存使用时无需备用节点(单实例可用性可以用 supervisor 或 crontab 保证)

    缺点

    • 不保证数据的可靠性
    • 在缓存使用,进程重启后,数据丢失,即使有备用的节点解决高可用性,但是仍然不能解决缓存预热问题,因此不适用于数据可靠性要求高的业务
    • 受限于单核 CPU 的处理能力(Redis 是单线程机制),所以适合操作命令简单,排序、计算较少的场景

    Redis 主从

    Redis 多副本,采用主从(replication)部署结构,相较于单副本而言最大的特点就是主从实例间数据实时同步,并且提供数据持久化和备份策略。主从实例部署在不同的物理服务器上,根据公司的基础环境配置,可以实现同时对外提供服务和读写分离策略。

    优点

    • 采用双机主备架构,能够在主库出现故障时自动进行主备切换,从库提升为主库提供服务,保证服务平稳运行
    • 开启数据持久化功能和配置合理的备份策略,能有效的解决数据误操作和数据异常丢失的问题
    • 读写分离策略:从节点可以扩展主库节点的读能力,有效应对大并发量的读操作
    • Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力
    • Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求
    • Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据

    缺点

    • Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
    • 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
    • Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

    Redis Sentinel(哨兵)

    Redis Sentinel 是社区版本推出的原生高可用解决方案,其部署架构主要包括两部分:Redis Sentinel 集群和 Redis 数据集群。其中 Redis Sentinel 集群是由若干 Sentinel 节点组成的分布式集群,可以实现故障发现、故障自动转移、配置中心和客户端通知。

    优点

    • 哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都具有。
    • 主从可以自动切换,系统更健壮,可用性更高。

    缺点

    • Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

    Redis Cluster

    Redis Cluster 是社区版推出的 Redis 分布式集群解决方案,主要解决 Redis 分布式方面的需求,比如,当遇到单机内存,并发和流量等瓶颈的时候,Redis Cluster 能起到很好的负载均衡的目的。

    Redis Cluster 集群节点最小配置 6 个节点以上(3 主 3 从),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用。

    Redis Cluster 采用虚拟槽分区,所有的键根据哈希函数映射到 0~16383 个整数槽内,每个节点负责维护一部分槽以及槽所印映射的键值数据。

    优点

    • 无中心架构
    • 数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布
    • 可扩展性:可线性扩展到 1000 多个节点,节点可动态添加或删除
    • 高可用性:部分节点不可用时,集群仍可用。通过增加 Slave 做 standby 数据副本,能够实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave 到 Master 的角色提升
    • 降低运维成本,提高系统的扩展性和可用性

    缺点

    • 数据通过异步复制,不保证数据的强一致性
    • Slave 在集群中充当“冷备”,不能缓解读压力,当然可以通过 SDK 的合理设计来提高 Slave 资源的利用率
    • Key 批量操作限制,如使用 mset、mget 目前只支持具有相同 slot 值的 Key 执行批量操作。对于映射为不同 slot 值的 Key 由于 Keys 不支持跨 slot 查询,所以执行 mset、mget、sunion 等操作支持不友好
    • Key 事务操作支持有限,只支持多 key 在同一节点上的事务操作,当多个 Key 分布于不同的节点上时无法使用事务功能
    • Key 作为数据分区的最小粒度,不能将一个很大的键值对象如 hash、list 等映射到不同的节点
    • 复制结构只支持一层,从节点只能复制主节点,不支持嵌套树状复制结构
    • 避免产生 hot-key,导致主库节点成为系统的短板
    • 避免产生 big-key,导致网卡撑爆、慢查询等

    参考

    1. Redis集群的5种使用方式
    2. redis的三种集群方式
    3. Redis第7课:Redis Sentinel 部署
  • 相关阅读:
    [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解
    [译]:Xamarin.Android开发入门——Hello,Android Multiscreen快速上手
    [译]:Xamarin.Android开发入门——Hello,Android深入理解
    [译]:Xamarin.Android开发入门——Hello,Android快速上手
    [译]:Orchard入门——使用标签管理内容
    [译]:Orchard入门——部件管理
    swift UITableView cell自适应高度
    设置Launch Image 启动图片(Xcode7)
    APNs 远程推送
    KVO (Key-Value-Observer, 键值观察)
  • 原文地址:https://www.cnblogs.com/weiweng/p/12751076.html
Copyright © 2011-2022 走看看