玩转 Redis缓存 集群高可用
转自:https://segmentfault.com/a/1190000008432854
Redis作为主流nosql,在高并发使用场景中都会涉及到集群和高可用的问题,有几种持久化?场景下的缓存策略怎么选?高可用方案怎么实现?集群有哪几种?跟着这几个问题,结合一些自己使用的经验来简单分析一下。
一.有哪些持久化
Redis有两种持久化的方式:`RDB` 和 `AOF`
RDB - 快照
通过预设频率write on copy来持久化数据(所以内存不宜设置超过物理内存的50%,否则会内存不足引发IO等待,使redis访问速度骤减),占用空间小,恢复速度快,适用于灾难恢复,但是宕机会丢失数据。
AOF - 持久化
默认会将每个收到的写指令通过write函数追加到文本 appendonly.aof 中,通过将新记录追加到文本尾部来持久化数据,占用空间大,恢复速度慢,但是安全性好,可能会丢失一秒的数据。
二.怎么选择适合的持久化策略
对于Redis的使用场景会有两种策略:`LRU缓存(临时缓存)` 和 `持久化缓存`。
用于存放持久化的缓存数据,常用于分布式系统中存放的计数器、统计数值等。配置类的缓存可以考虑使用google的guava
LRU缓存(临时缓存)
用于临时缓存数据用,这部分数据可以通过数据库再次加载到缓存中,常用于存放热点数据。
持久化缓存
三.如何实现高可用
对于需要到线上运行的项目,单点问题肯定是个躲不开的话题,这个时候该如何解决?
1.LRU缓存(临时缓存)高可用
方案:Redis搭建主从,master禁用RDB
和AOF
,slave启用RDB
; M/S切换使用哨兵。
master宕机:切换到从,丢失的数据重新预热即可。
slave宕机:换一个实例同步master即可。
master和slave同时宕机:可以用slave的
RDB
备份还原,丢失部分数据重新预热即可。
2.持久化缓存高可用
方案:Redis搭建主从,master禁用RDB
和AOF
,slave启用RDB
,master调用一个计划任务定期bgsave维护快照存储并通过scp传输到slave保存,保障master本地化数据完整性的同时也避免了开启持久化策略带来的性能损失; M/S切换使用哨兵。
master宕机:slave保存了完整的数据。
slive宕机:换一个实例同步master即可。
master和slave同时宕机:可以用slave的
RDB
备份还原。
四.集群怎么做
Redis仅支持单实例,内存一般最多10~20GB。对于内存动辄100~200GB的系统,就需要通过集群来支持了。
Redis集群有三种方式:客户端分片
、代理分片
、Redis Cluster
客户端分片
通过业务代码自己实现路由
优势:可以自己控制分片算法、性能比代理的好
劣势:维护成本高、扩容/缩容 等运维操作都需要自己研发
代理分片
代理程序接收到来自业务程序的数据请求,根据路由规则,将这些请求分发给正确的Redis实例并返回给业务程序。使用类似Twemproxy、Codis等中间件实现。
优势:运维方便、程序不用关心如何链接Redis实例
劣势:会带来性能消耗(大概20%)、无法平滑扩容/缩容
,需要执行脚本迁移数据,不方便(Codis在Twemproxy基础上优化并实现了预分片来达到Auto Rebalance)。
Redis Cluster
优势:官方集群解决方案、无中心节点,和客户端直连,性能较好
劣势:方案太重、无法平滑扩容/缩容
,需要执行相应的脚本,不方便、太新,没有相应成熟的解决案例
玩转 Redis缓存 集群高可用的更多相关文章
- 浅谈MySQL集群高可用架构
前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...
- mysql集群高可用架构
前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...
- Rabbitmq集群高可用测试
Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...
- openstack pike 集群高可用 安装 部署 目录汇总
# openstack pike 集群高可用 安装部署#安装环境 centos 7 史上最详细的openstack pike版 部署文档欢迎经验分享,欢迎笔记分享欢迎留言,或加QQ群663105353 ...
- bitmq集群高可用测试
Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...
- Eureka 集群高可用配置.
SERVER:1 server: port: 1111 eureka: instance: hostname: ${spring.cloud.client.ip-address} instance-i ...
- Redis缓存集群方案
由于单台Redis服务器的内存管理能力有限,使用过大内存的Redis又会使得服务器的性能急剧下降,一旦服务器发生故障将会影响更大范围业务,而Redis 3.0 beta1支持的集群功能还不适合生产环境 ...
- 集群高可用之lvs+keepalive
集群高可用之lvs+keepalive keepalive简介: 负载均衡架构依赖于知名的IPVS内核模块,keepalive由一组检查器根据服务器的健康情况动态维护和管理服务器池.keepalive ...
- hadoop+zookeeper集群高可用搭建
hadoop+zookeeper集群高可用搭建 Senerity 发布于 2 ...
随机推荐
- angular4.0如何引入外部插件1:import方案
引入外部插件是项目中非常重要的环节.因为部分插件以js语法写的,而ng4用的是ts语法,所以在引入时需要配置. Step1:引入swiper插件的js文件[css在下面会讲到,先别急] 很重要的意见: ...
- 【转】 Git——如何将本地项目提交至远程仓库
1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 git init 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点 ...
- Spring框架入门之Spring简介
一.Spring简介(由Rod Johnson创建的一个开源框架) Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿 ...
- [转载]MySQL5.6 PERFORMANCE_SCHEMA 说明
背景: MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数.并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储 ...
- python将数据写入excel代码,python与office交互
# -*- coding: utf-8 -*- from smartframe.header import * import pymysql import json import importlib, ...
- 数据挖掘概念与技术15--为快速高维OLAP预计算壳片段
1. 论数据立方体预计算的多种策略的优弊 (1)计算完全立方体:需要耗费大量的存储空间和不切实际的计算时间. (2)计算冰山立方体:优于计算完全立方体,但在某种情况下,依然需要大量的存储空间和计算时间 ...
- git>>>>1
参考博客:http://www.cnblogs.com/wupeiqi/p/7295372.html - 版本控制,各行各业都需要 - 版本控制工具 - svn - git - git,软件帮助使用者 ...
- windows sevser 2012搭建网站
1,首先去服务器配置,从哪里下载iis8.0和asp.net和net.xx和web服务,iis控制,ftp等等服务根据自己的需求安装 安装好后把默认的网站删除掉.或者新建一个网站,把服务端口改为其他端 ...
- HDU_5563Clarke and five-pointed star
Clarke and five-pointed star Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- c++(hash表)
hash表,有时候也被称为散列表.个人认为,hash表是介于链表和二叉树之间的一种中间结构.链表使用十分方便,但是数据查找十分麻烦:二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果.hash ...