redis高可用 - redis集群
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集群的更多相关文章
- Redis高可用之集群配置(六)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- Redis高可用复制集群实现
redis简单介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库.Redis 与其他 key - value 缓存产品有以下三个特点: 支持数据的持久化,可以将 ...
- redis高可用分布式集群
一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ...
- Redis 高可用分布式集群
一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ...
- Redis高可用及集群
目录 Redis主从复制 环境准备 主从复制命令 Redis Sentinel 功能 Redis Sentinel配置 Redis集群 Redis主从复制 使用异步复制 一个服务器可以有多个从服务器 ...
- Redis之高可用、集群、云平台搭建
原文:Redis之高可用.集群.云平台搭建 文章大纲 一.基础知识学习二.Redis常见的几种架构及优缺点总结三.Redis之Redis Sentinel(哨兵)实战四.Redis之Redis Clu ...
- 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...
- 构建高可用ZooKeeper集群
ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...
- 搭建高可用mongodb集群(四)—— 分片(经典)
转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...
- 构建高可用ZooKeeper集群(转载)
ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...
随机推荐
- Object 对象有哪些方法?
这个不看还真不一定能说全,请养成良好的阅读源码和JDK文档的习惯. 总结一下:一共11个,wait的3个+notify的2个,hashCode和equals还有toString共3个,然后clone和 ...
- MVC之Filter
过滤器的理解 Filter就是过滤器,在WebForm中,各种管道事件就是相当于过滤器,在MVC中,过滤器是单独的一种机制,分为方法过滤器和异常处理过滤器,方法过滤器实现的功能是在执行某一个请求得方法 ...
- pta 习题集5-17 哥尼斯堡的“七桥问题”
哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示. 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707-1783)最终解决 ...
- XPipe 解决什么问题
x-pipe/README.md at master · ctripcorp/x-pipe https://github.com/ctripcorp/x-pipe/blob/master/README ...
- 基于Nginx+FastDFS搭建图片文件系统
Nginx+fastdfs:https://www.cnblogs.com/chiangchou/p/fastdfs.html#_label0_1 缩略图:https://blog.csdn.net/ ...
- Drawing Graphs using Dot and Graphviz
Drawing Graphs using Dot and Graphviz Table of Contents 1. License 2. Introduction 2.1. What is DOT? ...
- andriod(十七)蓝牙profile
1. 蓝牙profile Bluetooth的一个很重要特性,就是所有的Bluetooth产品都无须实现全部的Bluetooth规范.为了更容易的保持Bluetooth设备之间的兼容, Bluetoo ...
- github push error ---- recursion detected in die handler
错误提示如下: 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 New Bitmap Image.bmp Coun ...
- 6.安装pyhook报错is not a supported wheel on this platform
解决方法: 先找到合适的格式: 然后,选择合适的版本: 安装即可成功:
- EF Code First 学习笔记:表映射(转)
多个实体映射到一张表 Code First允许将多个实体映射到同一张表上,实体必须遵循如下规则: 实体必须是一对一关系 实体必须共享一个公共键 观察下面两个实体: public class Per ...