redis-sentinel方案提供了单点的高可用解决方案,但是当数据量和业务量极速增长时,单点的reids不可能无限的纵向扩容(增大内存),这个时候就需要redis有集群的能力来扛。 redis集群的几种实现方式如下:

  • 客户端分片:优点简单,客户端sharding不支持动态增删节点;劣势很大,服务端Redis实例群拓扑结构有变化时每个客户端都需要更新调整,连接不能共享,当应用规模增大时,资源浪费制约优化。一般不采用。
  • 基于代理的分片:如codis和Twemproxy
  • 路由查询: redis-cluster

Twemproxy

Twemproxy也叫nutcraker,是twtter开源的一个redis和memcache代理服务器程序。redis作为一个高效的缓存服务器,非常具有应用价值。但在用户数据量增大时,需要运行多个redis实例,此时将迫切需要一种工具统一管理多个redis实例,避免在每个客户端管理所有连接带来的不方便和不易维护,Twemproxy即为此目标而生。

主要工作方式

分布式逻辑和存储引擎分开,逻辑层proxy代理,存储用的是原子redis。当每个层面需要添加删除节点必须重启服务生效(要重新利用散列函数生成KEY分片更新)。

Proxy无状态,redis数据层有状态的,客户端可以请求任一proxy代理上面,再由其转发至正确的redis节点,该KEY分片算法至某个节点都是预先已经算好的,在proxy配置文件保存着,但是如果更新或者删除节点,又要根据一致性hash重新计算分片,并且重启服务。

一致性hash算法,增减节点需要配置proxy通知新的算法,重启服务

优点:

  • 比较轻,开发简单,对应用几乎透明
  • 历史悠久,方案成熟

缺点:

  • 代理影响性能
  • 无法平滑地扩容/缩容
  • 运维比较困难
  • proxy单点本身会有性能瓶颈

Codis

codis由3大组件构成:

  • codis-server : 修改过源码的redis, 支持slot,扩容迁移等
  • codis-proxy : 支持多线程,go语言实现的内核
  • codis Dashboard : 集群管理工具 提供web图形界面管理集群。 集群元数据存在在zookeeper或etcd。(Zookeeper/etcd存放数据路由表和codis-proxy节点的元信息,codis-config发起的命令通过其同步到各个存活的codis-proxy) 提供独立的组件codis-ha负责redis节点主备切换。 基于proxy的codis,客户端对路由表变化无感知。客户端需要从codis dashhoard调用list proxy命令获取所有proxy列表,并根据自身的轮询策略决定访问哪个proxy节点以实现负载均衡。
    整个集群分为1024个哈希槽,分片算法位SlotId = crc32(key) % 1024,增减节点不需要重启服务

主要工作方式

分布式逻辑和存储引擎分开,逻辑层codis-proxy,存储用的是修改过的codis-server,这种好处是proxy层可以自动扩展和收缩,存储层也同样可以,每个层面都可以热插拨。

proxy无状态,codis-server分为组间,每个组存在一个主节点(必须有并且只能有一个)和多个从节点。客户端请求都是和proxy链接,链接哪个proxy都一样,然后由它根据zookeeper路由信息转发至正确节点,直接可以定位到正确节点上

优点:

  • 对应用几乎透明
  • 性能比 Twemproxy 好
  • 有图形化界面,扩容容易,运维方便

缺点:

  • 代理影响性能
  • 组件过多,需要很多机器资源,部署比较难
  • 修改了 Redis 代码,导致和官方无法同步,新特性跟进缓慢

Redis Cluster

主要工作方式

分布式的逻辑和存储引擎不分开,即又负责读写操作,又负责集群交互,升级困难,如果代码有bug,集群无法工作 这个结构为无中心的组织,不好把控集群当前的存活状态,客户端可以向任一节点发送请求,再有其重定向正确的节点上。如果在第一次请求和重定向期间cluster拓扑结构改变,则需要再一次或者多次重定向至正确的节点,但是这方面性能可以忽悠不计
整个集群分为16384个哈希槽,分片算法位SlotId = crc16(key) % 16384,增减节点不需要重启服务。Redis 集群通过 Gossip 协议同步节点信息,基本思想是节点之间互相交换信息最终所有节点达到一致。BTW. redis sentinel集群判定redis主节点down掉也是采用gossip协议。关于Gossip参考wiki

优点:

  • 组件 all-in-box,部署简单
  • 性能最快(没有proxy)
  • 自动故障转移、Slot 迁移中数据可用
  • 官方原生集群方案,更新与支持有保障

缺点:

  • 实践不多
  • 客户端开放成本高(客户端不够成熟)
  • 多键操作支持有限
  • reshard 操作不够自动化(redis-trib.rb )

###########################

redis高可用 - redis集群的更多相关文章

  1. Redis高可用之集群配置(六)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  2. Redis高可用复制集群实现

    redis简单介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库.Redis 与其他 key - value 缓存产品有以下三个特点: 支持数据的持久化,可以将 ...

  3. redis高可用分布式集群

    一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ...

  4. Redis 高可用分布式集群

    一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ...

  5. Redis高可用及集群

    目录 Redis主从复制 环境准备 主从复制命令 Redis Sentinel 功能 Redis Sentinel配置 Redis集群 Redis主从复制 使用异步复制 一个服务器可以有多个从服务器 ...

  6. Redis之高可用、集群、云平台搭建

    原文:Redis之高可用.集群.云平台搭建 文章大纲 一.基础知识学习二.Redis常见的几种架构及优缺点总结三.Redis之Redis Sentinel(哨兵)实战四.Redis之Redis Clu ...

  7. 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...

  8. 构建高可用ZooKeeper集群

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

  9. 搭建高可用mongodb集群(四)—— 分片(经典)

    转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...

  10. 构建高可用ZooKeeper集群(转载)

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

随机推荐

  1. poj3630 Phone List【Trie树】

    Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34805   Accepted: 9980 Descr ...

  2. nginx挂维护页面

    本篇文章摘抄于他人的文章,来自于CSDN的JeremyIT同学,但我还是自己重新敲一遍. 实现的效果是:访问网站的任何页面,都跳转到同一个页面.而这一个页面就是维护页面,可以根据需要修改. serve ...

  3. elk----es settings--logstash--performance---bigdesk---logstash plugin online/offline

    www.cnblogs.com/tangr206/articles/2274845.html yum timeout error(/etc/resolv.conf) elk: elasticsearc ...

  4. xdotool xdotool模拟击键和鼠标移动--CutyCapt是一个截图工具,xvfb-run

    最近在做一个生成网站缩略图的功能,从网上查到相关资料,现与大家分享,xvfb这个软件,安装上之后一条命令就能执行此操作.很容易的就生成了自己想要的缩略图. xvfb-run -运行在一个虚拟的X服务器 ...

  5. leetcode之Maximal Square

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...

  6. Python开发【前端】:Ajax(一)

    Ajax Ajax即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,AJAX = 异步 JavaScr ...

  7. kubernetes实战(三):k8s v1.11.1 持久化EFK安装

    1.镜像下载 所有节点下载镜像 docker pull kibana: docker tag kibana: docker.elastic.co/kibana/kibana: docker pull ...

  8. centos shell编程3【告警系统】 没有服务器端和客户端的概念 main.sh mon.conf load.sh 502.sh mail.php mail.sh disk.sh 第三十七节课

    centos shell编程3[告警系统]  没有服务器端和客户端的概念 main.sh mon.conf load.sh 502.sh mail.php mail.sh  disk.sh  第三十七 ...

  9. SqlServer PIVOT函数快速实现行转列,UNPIVOT实现列转行(转)

    我们在写Sql语句的时候没经常会遇到将查询结果行转列,列转行的需求,拼接sql字符串,然后使用sp_executesql执行sql字符串是比较常规的一种做法.但是这样做实现起来非常复杂,而在SqlSe ...

  10. PID参数调整的口诀

    PID参数调整的口诀:参数整定找最佳,从小到大顺序查先是比例后积分,最后再把微分加曲线振荡很频繁,比例度盘要放大曲线漂浮绕大湾,比例度盘往小扳曲线偏离回复慢,积分时间往下降曲线波动周期长,积分时间再加 ...