`

Redis集群服务器-高可用调研随笔

阅读更多

今天改了一天的Bug,本想下午开始专研Redis命令集,结果也泡汤了。只能在下班的路上考虑下Redis集群服务器的高可用方案。随笔而已,尚未成型,仅作记录。 当然,我说的可能比较片面,欢迎拍砖、斧正。

一、Redis与MySQL对比

相同点:

 

  • Master-Slave架构,集群架构下无法很好的完成数据拷贝,确保数据一致性。
  • 支持数据文件持久化存储,但数据文件过大时,宕机重启可能存在安全隐患。

不同点:

 

  • Redis时效性能远比MySQL要高得多,支持复杂的数据类型,基本上都是内存操作,效率远胜于MySQL。
  • RedisNoSQL型数据库,或者说是Store-Cache型数据库,而MySQL属于RDBMS,关系型数据库,虽然自身做了查询缓存,但效果一般。
  • Redis支持以数据横向切分,便于根据业务需求扩展,键值构建类似于数据库索引,灵活高效,不必忌讳数据之间的关联。Redis依赖其数据类型,完成交集、并集、补集计算,更胜一筹。
  • MySQL在数据量和连接数量上都有上限:单表数据量500万条记录,并发连接数3000/秒。
  • Redis定时、定量将数据保存至本地,命中数据大部分存活在内存中,降低了数据文件读取消耗;数据更新,以内存修改为主,不存磁盘在IO消耗。

结论:

 

  • 两者在高并发环境下,依靠自身的Master-Slave架构,完成横向扩容都存在难度。要控制每个实例的数据文件大小,留有足够的磁盘,内存空间。确保宕机后,服务可恢复。
  • Redis更适合作为频繁查询为主,对数据进行交集、补集、并集操作,类似于SNS用户社区关联关系展现等,有着良好的数据类型支持,以及高效性。

二、Redis与Memcached,以及EhCache/OSCache

EhCache/OSCacheMemcached可谓是缓存架构里的一朵朵奇葩。

 

  • EhCacheOSCache在几年前,都是小应用最喜欢使用缓存实现。尤其是当应用之间不需要考虑数据一致性问题时,几乎无所不能。但到了分布式缓存时代,虽然两者也提供了相应的架构实现,但实现成本较高,且存在一定风险。例如EhCache,提供了EhCache Server架构,主要通过各个EhCache集群网络多播等方式同步数据。但高并发下,网络多播易演变成网络风暴。增加了系统安全隐患。
  • Memcached走了另一条路,通过一致性哈希根据Key与Server的Hash对应关系,或者余数算法等,将数据散落在不同的Server上,确保每个Server上都能平均Cache数据。也基缘于此,Memcached适合进行快速地横向扩展。不必考虑磁盘存储,只需要提供一个内存足够大的Server主机即可。
  • Memcached也有瓶颈,单个ObjectSize不得大于1MB,KeySize不得大于250个字符,Write要比Read耗时长,对大对象做Write Cache时尤为明显。因此,Memcached适合小数据量对象的Cache。且当服务器宕机时,疯涨的数据库操作IO,很可能将数据库服务器拖垮。
Redis可以简单理解为Store-Cache,用作CacheObjectSize支持1GB,KeySize支持512Bytes,并支持复杂数据类型,可在内存中直接排序等。但Redis不能像Memcached那样实现Sharding,直接进行横向扩展。且自身作为Database时,也可能存在单点故障风险。
 

三、基于Redis高可用服务器架构简单设想

 

  1. Redis以Master-Slave为单元,公用虚拟IP,通过Keepalive实现自动切换,完成主从互备。
  2. 通过Redis Client,如Jedis,在Client端完成Sharding,访问多个Redis Server。
  3. 读写分离,Write-Master,Read-Slave。

     未尽之处,若横向扩容时,Client一致性哈希,是否会由原先的A Server指向,改为新进的C Server?单纯拷贝数据文件可解决单点到双点的实现。但多点服务器扩容,尚未做一致性哈希尝试,有一定的风险。
完全是个人头脑风暴,欢迎拍砖。
关于调优 http://www.oschina.net/translate/redis-latency-problems-troubleshooting?from=20130317
  • 大小: 107.5 KB
6
1
分享到:
评论
4 楼 snowolf 2013-04-24  
fangwei1688 写道
哈哈   我们现在用的也是和你的想法是一样的,多多交流啊

好啊!
3 楼 fangwei1688 2013-04-24  
哈哈   我们现在用的也是和你的想法是一样的,多多交流啊
2 楼 snowolf 2012-10-24  
亡的剑指 写道
请问,如果用了多个Master-Slave组,write-master容易实现,但如何保证read-slave时读到存放数据的slave?

公司用的是keepalive脚本,做的ip漂移,从ip上分离哪个用来写,那个用来读。可以m-s互换。
1 楼 亡的剑指 2012-10-24  
请问,如果用了多个Master-Slave组,write-master容易实现,但如何保证read-slave时读到存放数据的slave?

相关推荐

    redis校验工具redis-full-check

    `redis-full-check` 正是这样一款针对 Redis 的专业校验工具,它能够帮助管理员检测 Redis 集群或单实例的潜在问题,保障系统的正常运行。 `redis-full-check` 工具主要功能包括但不限于以下几个方面: 1. **键...

    PyPI 官网下载 | redis-py-cluster-1.1.0.tar.gz

    《Redis-Py-Cluster:Python中的Redis集群库详解》 Redis-Py-Cluster是一个Python库,专门用于在Python环境中操作Redis分布式集群。该库为开发者提供了便捷的方式与Redis集群进行交互,支持各种数据结构,如字符串...

    redis-py-cluster-1.3.5.tar.gz

    而`redis-py-cluster`是Python连接Redis集群的一个库,它允许Python开发者方便地与Redis集群进行交互。`redis-py-cluster-1.3.5.tar.gz`这个压缩包文件包含了该库的源代码和相关资源,版本号为1.3.5。 首先,让我们...

    tomcat-redis-session-manager的jar包-包含Tomcat7和Tomcat8

    Tomcat-Redis-Session-Manager是一个开源项目,它允许Tomcat服务器将用户的session数据存储到Redis缓存系统中,而不是默认存储在本地内存或文件系统。这一设计显著提升了session管理的性能和可扩展性,尤其是在集群...

    session 共享 tomcat-redis-session-manager 所需要的jar (绝对可用)

    Tomcat Redis Session Manager是专门为Apache Tomcat设计的一个插件,它的主要任务是将Tomcat的Session对象存储在Redis这种高可用的键值存储系统中,以便在集群环境中跨多个Tomcat实例共享Session。这样可以解决负载...

    tomcat-redis-session-manager

    此外,为了确保高可用性,可以考虑在Redis集群上运行`tomcat-redis-session-manager`,这样即使某个Redis节点故障,session数据也不会丢失,服务仍能正常运行。 总的来说,`tomcat-redis-session-manager`是应对...

    tomcat-redis-session-manager tomcat+nginx+redis集群所需jar

    这个"tomcat-redis-session-manager tomcat+nginx+redis集群所需jar"压缩包提供了在这样的架构中实现会话共享所需的Java类库。下面将详细解释其中涉及的技术点: 1. **Apache Tomcat**: Apache Tomcat是一款开源的...

    redis+redis-desktop-manager-0.8.3.3850+笔记

    3. 支持主从复制:可以实现数据备份和高可用性。 4. 事务处理:支持原子操作,保证数据一致性。 5. Lua脚本支持:可以通过Lua编写复杂逻辑,一次执行多条命令。 **RedisDesktopManager** Redis Desktop Manager是...

    tomcat-redis-session-manager jar包

    【标题】"tomcat-redis-session-manager jar包"是一个用于集成Redis进行Session管理的Java库,特别设计用于Apache Tomcat服务器。这个库使得在多台Tomcat服务器之间共享和协调用户的Session数据成为可能,从而提高了...

    tomcat-redis-session-manager-master-2.0.0

    tomcat-redis-session-manager-2.0.0.jar jedis-2.5.2.jar commons-pool2-2.2.jar 2.修改 conf 目录下的 context.xml 文件 host="localhost" port="6379" database="0" maxInactiveInterval="60" /> ...

    redis-windows-7.2.4.zip

    - 使用`redis-cli.exe`客户端工具与Redis服务器交互,执行命令。 3. **Redis命令**: - `SET key value`:设置键值对。 - `GET key`:获取键的值。 - `DEL key`:删除键。 - `EXPIRE key seconds`:为键设置...

    redis 免安装 redis客户端 redis-desktop-manager-0.8.8.384

    5. **集群**:Redis 集群模式支持数据分片,可以在多台服务器上分散存储,提高可扩展性和容错性。 6. **Lua 脚本**:Redis 支持 Lua 脚本,可以在服务器端执行脚本来实现复杂的逻辑,提高性能。 7. **消息订阅与...

    tomcat9+tomcat-cluster-redis-session-manager_4.0.zip

    "tomcat9+tomcat-cluster-redis-session-manager_4.0.zip"这个文件组合涉及到的是在Tomcat 9上实现负载均衡以及使用Redis作为Session管理器的高级配置。 首先,Tomcat 9是Apache Tomcat服务器的一个版本,它是Java ...

    redis-windows-7.0.10.zip

    Redis的核心组件包括`redis-server.exe`(服务器进程)、`redis-cli.exe`(命令行客户端)以及`redis-benchmark.exe`(性能测试工具)等。用户需要通过`redis-server.exe`启动服务,并通过`redis-cli.exe`进行交互式...

    redis-windows-7.2.5.zip

    - 运行服务:找到解压后的"redis-server.exe",双击启动,或在命令行中运行,启动Redis服务器。 - 配置:若需更改默认配置,可编辑"redis.windows.conf"文件。例如,修改端口、设置密码等。 - 客户端连接:同时,...

    redis-windows-7.0.2.zip

    9. **集群模式**:从Redis 3.0开始,还引入了集群模式,允许你创建由多个节点组成的分布式数据库,提供更高的可用性和扩展性。 总的来说,Redis是一个功能强大且灵活的键值数据库,无论是在开发环境还是生产环境中...

    tomcat-redis-session-manager实现session共享 配置文件

    "tomcat-redis-session-manager"是一个解决方案,它将用户的Session信息存储在Redis缓存服务器中,从而实现跨服务器的Session共享。本篇文章将深入探讨这个话题,包括它的原理、配置以及实际应用。 **一、Session...

    Tomcat8亲测可用 tomcat-redis-session-manager的jar包

    标题中的“Tomcat8亲测可用 tomcat-redis-session-manager的jar包”指的是一个专为Tomcat8设计的,用于管理session的扩展组件。这个组件实现了将Tomcat应用服务器中的用户session数据存储到Redis分布式缓存系统中,...

    docker-compose redis主从哨兵 redis多节点高可用 redis集群高可用

    这里我们将详细探讨如何利用Docker Compose部署Redis的主从哨兵配置和集群高可用性解决方案。 首先,Docker Compose是一个强大的工具,可以让我们通过YAML文件定义和运行多容器的Docker应用。在这个场景下,我们...

    redis-py-cluster-1.3.6.tar.gz

    首先,`redis-py-cluster`库解决了版本不匹配的问题,这意味着无论你的Redis服务器是哪个版本,只要集群功能可用,`redis-py-cluster`都能适应并提供稳定的接口。这个特性对于开发者来说是至关重要的,因为它确保了...

Global site tag (gtag.js) - Google Analytics