一.Redis简介

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。     它支持多种类型的数据结构,如        字符串(strings),    散列(hashes),    列表(lists),    集合(sets),    有序集合(sorted sets) 与范围查询,    bitmaps,    hyperloglogs 和    地理空间(geospatial) 索引半径查询。    Redis 内置了    复制(replication),LUA脚本(Lua scripting),    LRU驱动事件(LRU eviction),事务(transactions)    和不同级别的    磁盘持久化(persistence),    并通过    Redis哨兵(Sentinel)和自动    分区(Cluster)提供高可用性(high availability)

二.安装redis

2.启动redis

如果出现以下错误,可能是库的问题,使用make MALLOC=libc即可

[root@server1 redis-4.0.1]# make

cd src && make all

make[1]: Entering directory `/root/redis-4.0.1/src'

CC adlist.o

In file included from adlist.c:34:

zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory

zmalloc.h:55:2: error: #error "Newer version of jemalloc required"

make[1]: *** [adlist.o] Error 1

make[1]: Leaving directory `/root/redis-4.0.1/src'

make: *** [all] Error 2

[root@server1 redis-4.0.1]# make MALLOC=libc

三.安装redis

bind 全网段

进入redis,创建数据

数据是内存快照,保存到/var/lib/redis,格式为rdb

四.在server2和server3安装redis测试数据同步

可以查看到server2和server3数据同步

五.Redis的哨兵

Redis的哨兵(sentinel)系统用于管理多个 Redis服务器,该系统执行以下三个任务:

·        监控(Monitoring):哨兵(sentinel)会不断地检查你的Master和Slave是否运作正常。

·        提醒(Notification):当被监控的某个 Redis出现问题时,哨兵(sentinel)可以通过 API 向管理员或者其他应用程序发送通知。

·        自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel)会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master,并让失效Master的其他Slave改为复制新的Master;当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。

1.在server1配置sentinel哨兵文件

server1为主,server2和server3为从

设置宕机反应时间

2.将sentinel.conf文件传给server2和server3

3.server1、server2、server3启动哨兵

4.将server1 主节点shutdown,30s后,在server3上查看master切换到server2

4.重新启动,将server1的sentinel.conf文件里的主修改为server2

六.Redis高可用

在server1上开多个不同端口的redis

1.安装rubygems模块,使得gem模块可以调用redis

rhel6.5 如果本地没有redis-3.3.1.gem 可以升级ruby,直接从网上下载

2.将redis-trib.rb命令拷到/usr/local/bin下,方便使用命令

3.在/usr/local/新建redis-cluster

redis-cluster下新建30001-30006

配置30001的redis文件

daemonize yes

pidfile /usr/local/redis-cluster/30001/redis.pid

logfile /usr/local/redis-cluster/30001/redis.log

port 30001

dir /usr/local/redis-cluster/30001/

cluster-enabled yes

cluster-config-file cluster.conf

cluster-node-timeout 10000

appendonly yes


配置完成后,启动服务,在30001目录里redis-server 30001/redis.conf

4.按照30001的方法配置30002-30006,修改里面的目录和端口,配置完启动


查看进程和端口

5.创建集群

选择yes

三个mastar,三个slave

master有槽位,一共16383,id一样的为一组主从,一对主从不能同时坏掉,一但一对主从都坏掉,集群失效

6.查看集群信息,从30001接口进入,接口30001-30006都可以

测试:

7.检测集群状态

8.从30002接口进入,关闭2节点,从从30003接口登陆,数据没有丢失,从 从机30005上将数据取出

恢复节点2,集群正常


但30005变为master,30002变为slave

9.添加新节点

新建30007和30008

(1)将30007添加为master

查看集群状态,30007没有槽位

平均master槽位

(2)将30008添加为slave

10.登陆测试取值,发现原来name的槽位平均到master30007上

六.redis持久化

RDB工作原理:

每隔N分钟或N次写的操作后,Redis将数据库快照保存在名字为dump.rdb的二进制文件中。压缩,然后放到备份目录中。

比如说,一下设置会让Redis在满足“60秒内有至少1000个键被改动”这一条件时,自己保存数据集:

save 60 1000

这种方法持久化方式被称为快照。

RDB相关参数:

save 900 1  #刷新快照到磁盘中,必须满足2个要求才会触发,即900秒之后只是有1个关键字发生变化

stop-wrties-on-bgsave-error yes #后台存储错误停止写

rebcompression yes #使用LZF压缩rdb文件

rebchecksum yes #存储和加载rdb文件时校验

dbfilename dump.rdb #设置rdb文件名

dir ./   #设置工作目录,rdb文件会写入该目录。

RDB的优点:

1.RDB是一个非常紧凑的文件,它保存了Redis在某个时间段的数据集。这种文件非常适合备份,比如说,你可以在最近24小时内,每小时备份一次RDB文件,并且在每个月的每一天,也备份一次RDB文件。这样的话,即使遇到了问题,也可以还原到不同的版本。

2.RDB在恢复大数据集时比aof恢复速度快

3.RDB可以最大化Redis性能:父进程在保存RDB文件时唯一要做的就是fork出一个子进行,然后这个子进程就会处理接下来所有保存工作,父进程无须操作I/O操作

4.RDB保存的是一个镜像文件,可以将它直接传送到别人数据模块中

RDB的缺点:

如果在2个保存点之后保存数据,可能会丢失1-N分钟的数据;如果你需要尽量在服务器故障时丢失数据,那么RDB不适合你。虽然RDB允许你设置不同的保存点来控制保存RDB文件的频率。但是,因为RDB文件需要保存的是整个数据集的状态,所以它并不是一个轻松的操作。因为你可能需要5分钟才保存一次RDB文件。在这种情况下,可能会丢失好几分钟的数据。

AOF工作原理:

也就是使用日志文件来记录所有的写操作命令,并在服务器启动时,重新启动这次命令来还原数据集。

AOF相关参数:

appendonly no  #是否打开aof日志功能

appendfsync always #每一个命令都立即写入到aof,安全,速度慢

appendfsync everysec  #每秒写1次

appendfsync no  #写入功能让操作系统判断缓存区大小统一写入到aof,同步速率慢,速度快

no-appendfasy-on-rewrite yes  #正在导入rdb快照过程中,需不要停止同步aof

auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写

auto-aof-rewrite-min-size 60mb #aof文件超过60M时才进行重写

注:在dump.rdb过程中 ,aof如果停止同步,会不会丢失?

答:不会,所有的操作缓存在内存的队列里,dump完成后,统一操作

注:aof重写是指什么?

答:aof重写是指把内存中命令,逆话命令,写入到aof日志里。

问:如果rdb文件与aof文件同时存在,优先用谁来恢复数据?

答:aof

问:恢复时rdb与aof哪个恢复的快?

答:rdb,因为其是数据的内存映射,直接载入到内存。而aof是命令,需要逐条执行

AOF的重写的执行步骤:

1.Redis执行fork(),现在同时拥有父进程和子进程

2.子进程开始将新AOF文件的内容写入到临时文件

3.对于所有新执行的写入命令,父进程一边将它们累计到一个内存缓存中,一边将这些改动追加到现有AOF文件的末尾;这样即使在重写的过程中发生停机,现有的aof文件也是安全的

AOF的优点

1.aof默认的策略是每秒钟执行一次,在这种配置下,Redis仍然可以保持良好的性能,并且就算发生了故障,也是丢失一秒钟的数据

2.Redis可以在AOF文件过大的情况自动进行重写:重写后的新aof文件包含了恢复当前数据集所需的最小命令集合,因为Redis在创建新的aof文件时,会继续将命令追加到现有的aof文件里面,即使重写过程发生了停机,而aof文件而不会丢失。而一旦新aof文件创建完毕,Redis就会从旧的aof文件中切换到新的aof文件,并开始对新的aof文件进行追加操作。

AOF的缺点

1对于相同数据集的文件,aof文件的体积通常比rdb文件大

2.根据fasy策略,aof的速度比rdb慢

3.aof在国庆曾经发生了这样的问题,因为个别命令的原因,导入aof文件重新载入时,无法将数据集恢复到保存时的原样。

4.当子线程完成重写工作时,它给父进程发送一个信号,父进程在接收信号之后,将内存中所有数据追加到新aof文件的末尾。

转载于:https://blog.51cto.com/anfishr/1974247

Linux的企业-Redis数据库、缓存和哨兵Sentinal、Redis高可用相关推荐

  1. Redis深入理解五 :Redis主从架构、哨兵架构、高可用集群模式

    redis主从架构 redis主从架构搭建,配置从节点步骤: 复制一份redis.conf文件 将相关配置修改为如下值: port 6380 pidfile /var/run/redis_6380.p ...

  2. Linux之企业实训篇——haproxy与pacemaker实现高可用负载均衡

    注:haproxy与fence的相关配置可以参照一下我之前写的博客 >_< ~~~ 一.简介 Pacemaker是一个集群资源管理器.它利用集群基础构件(OpenAIS,heartbeat ...

  3. SFB 项目经验-51-某上市企业2千人Exchange 2013升级2016高可用之伤01

    SFB 项目经验-51-某上市企业2千人Exchange 2013升级2016高可用之伤01(带病撰写项目实战笔记) 问题描述: 2000人企业使用Exchange 2013邮件服务器标准版,n年! ...

  4. Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构?

    文章目录 Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构? 配置环境 构建 RedisSharding1 安装 Redis 配置 RedisSharding1 构建 ...

  5. 数据库缓存服务——NoSQL之Redis配置与优化

    一.缓存概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如CPU的一级.二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据, ...

  6. 微服务项目实战技术点汇总:“尚硅谷的谷粒在线教育”七、redis数据库缓存页面数据、使用NUXT框架搭建前台系统环境、前台系统页面、首页轮播图(banner数据显示)、首页热门课程,名师推荐

    文章目录 一.NUXT前台环境搭建 1.如何学习NUXT 2.下载安装使用NUXT入门模板starter-template 3.机制 二.编写静态页面 1.设置布局(首尾固定,中间用nuxt引用组件) ...

  7. Day267.预约系统的性能瓶颈、营销活动无缝切换秒杀活动、预约系统数据迁移方案、高流量下预约系统搭建熔断机制、预约系统redis集群主从哨兵架构 -Redis的高并发预约抢购系统

    一.预约系统的性能瓶颈 1.预约系统应对热门爆品时的缺陷 用户进行预约会涉及到两个维度的数据变更一个是用户信息,一个是SKU信息,如图↓所示: 正常来说这么搞一点问题没有,即便涉及到写数据库,但是每个 ...

  8. python使用redis做缓存_python实现类redis缓存

    越来越觉得的缓存是计算机科学里最NB的发明(没有之一), 现在项目用的是redis做的缓存, 它的两个特性用的蛮顺手的: 键值查找功能 缓存可设置过期时间 突突然的,觉得用python也可以简单的模拟 ...

  9. redis核心技术与实战(四)高可用高扩展篇

    1.<redis架构组成> 1.redis学习维度 2.一个基本的键值型数据库包括什么? 1.访问框架 redis通过网络框架进行访问,使得 Redis 可以作为一个基础性的网络服务进行访 ...

最新文章

  1. 算法设计与分析第3章 贪心算法
  2. 南昌大学计算机专业高数课本,南昌大学高等数学期末考试.pdf
  3. 32位浮点数在威纶触摸屏显示_MCGS触摸屏与与西门子 S7-1200 PLC以太网通讯
  4. 约瑟夫环双向链表c语言实,双向链表与约瑟夫环代码
  5. JAVA开发环境的搭建(配置JAVA开发环境)
  6. TPAMI 2020 | 无监督多类域适应:理论,算法与实践
  7. 【拔刀吧少年】之条件语句
  8. 第二十二章 5为你的命名空间取个别名
  9. php的pdo如何访问SQLserver_php使用pdo连接sqlserver示例分享
  10. SpringCloud服务安全连接
  11. linux C 学习 简单字符串逆序输出
  12. 密码学基础(五):常见名词解释和密码学标准
  13. windows中如何显示/隐藏桌面图标
  14. android查看经纬度,安卓获取经纬度位置
  15. matlab gui修改图标,Matlab的GUI中左上角修改为自己想要的图标
  16. P2P技术详解(一):NAT详解——详细原理、P2P简介(转)
  17. java中的守护线的应用_JVM中的守护线程示例详解
  18. 人工智能,落地为王!深圳人工智能企业百强榜超七成为应用层
  19. PPT中加水印的方法
  20. XStream 转换 ListString的方法

热门文章

  1. .net OCX 无法获取“****”控件的窗口句柄,不支持无窗口的ActiveX控 新解决方法...
  2. REM+SVG Sprite,web app案例
  3. Debian 7(Wheezy)下配置Open×××
  4. 致命错误: Python.h:没有那个文件或目录
  5. 多核时代 .NET Framework 4 中的并行编程6---并行LINQ
  6. LeetCode--014--最长公共前缀(java)
  7. Effective user and Real user
  8. (原創) 如何解決移除DSP Builder後,在Matlab殘留錯誤訊息的問題? (SOC) (DSP Builder) (Matlab)...
  9. 获取jar中的资源文件途径
  10. 正余弦定理解三角形习题