Linux的企业-Redis数据库、缓存和哨兵Sentinal、Redis高可用
一.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高可用相关推荐
- Redis深入理解五 :Redis主从架构、哨兵架构、高可用集群模式
redis主从架构 redis主从架构搭建,配置从节点步骤: 复制一份redis.conf文件 将相关配置修改为如下值: port 6380 pidfile /var/run/redis_6380.p ...
- Linux之企业实训篇——haproxy与pacemaker实现高可用负载均衡
注:haproxy与fence的相关配置可以参照一下我之前写的博客 >_< ~~~ 一.简介 Pacemaker是一个集群资源管理器.它利用集群基础构件(OpenAIS,heartbeat ...
- SFB 项目经验-51-某上市企业2千人Exchange 2013升级2016高可用之伤01
SFB 项目经验-51-某上市企业2千人Exchange 2013升级2016高可用之伤01(带病撰写项目实战笔记) 问题描述: 2000人企业使用Exchange 2013邮件服务器标准版,n年! ...
- Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构?
文章目录 Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构? 配置环境 构建 RedisSharding1 安装 Redis 配置 RedisSharding1 构建 ...
- 数据库缓存服务——NoSQL之Redis配置与优化
一.缓存概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如CPU的一级.二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据, ...
- 微服务项目实战技术点汇总:“尚硅谷的谷粒在线教育”七、redis数据库缓存页面数据、使用NUXT框架搭建前台系统环境、前台系统页面、首页轮播图(banner数据显示)、首页热门课程,名师推荐
文章目录 一.NUXT前台环境搭建 1.如何学习NUXT 2.下载安装使用NUXT入门模板starter-template 3.机制 二.编写静态页面 1.设置布局(首尾固定,中间用nuxt引用组件) ...
- Day267.预约系统的性能瓶颈、营销活动无缝切换秒杀活动、预约系统数据迁移方案、高流量下预约系统搭建熔断机制、预约系统redis集群主从哨兵架构 -Redis的高并发预约抢购系统
一.预约系统的性能瓶颈 1.预约系统应对热门爆品时的缺陷 用户进行预约会涉及到两个维度的数据变更一个是用户信息,一个是SKU信息,如图↓所示: 正常来说这么搞一点问题没有,即便涉及到写数据库,但是每个 ...
- python使用redis做缓存_python实现类redis缓存
越来越觉得的缓存是计算机科学里最NB的发明(没有之一), 现在项目用的是redis做的缓存, 它的两个特性用的蛮顺手的: 键值查找功能 缓存可设置过期时间 突突然的,觉得用python也可以简单的模拟 ...
- redis核心技术与实战(四)高可用高扩展篇
1.<redis架构组成> 1.redis学习维度 2.一个基本的键值型数据库包括什么? 1.访问框架 redis通过网络框架进行访问,使得 Redis 可以作为一个基础性的网络服务进行访 ...
最新文章
- 算法设计与分析第3章 贪心算法
- 南昌大学计算机专业高数课本,南昌大学高等数学期末考试.pdf
- 32位浮点数在威纶触摸屏显示_MCGS触摸屏与与西门子 S7-1200 PLC以太网通讯
- 约瑟夫环双向链表c语言实,双向链表与约瑟夫环代码
- JAVA开发环境的搭建(配置JAVA开发环境)
- TPAMI 2020 | 无监督多类域适应:理论,算法与实践
- 【拔刀吧少年】之条件语句
- 第二十二章 5为你的命名空间取个别名
- php的pdo如何访问SQLserver_php使用pdo连接sqlserver示例分享
- SpringCloud服务安全连接
- linux C 学习 简单字符串逆序输出
- 密码学基础(五):常见名词解释和密码学标准
- windows中如何显示/隐藏桌面图标
- android查看经纬度,安卓获取经纬度位置
- matlab gui修改图标,Matlab的GUI中左上角修改为自己想要的图标
- P2P技术详解(一):NAT详解——详细原理、P2P简介(转)
- java中的守护线的应用_JVM中的守护线程示例详解
- 人工智能,落地为王!深圳人工智能企业百强榜超七成为应用层
- PPT中加水印的方法
- XStream 转换 ListString的方法
热门文章
- .net OCX 无法获取“****”控件的窗口句柄,不支持无窗口的ActiveX控 新解决方法...
- REM+SVG Sprite,web app案例
- Debian 7(Wheezy)下配置Open×××
- 致命错误: Python.h:没有那个文件或目录
- 多核时代 .NET Framework 4 中的并行编程6---并行LINQ
- LeetCode--014--最长公共前缀(java)
- Effective user and Real user
- (原創) 如何解決移除DSP Builder後,在Matlab殘留錯誤訊息的問題? (SOC) (DSP Builder) (Matlab)...
- 获取jar中的资源文件途径
- 正余弦定理解三角形习题