redis 持久化 哨兵 主从
Redis搭建步骤
环境:
三台机器 centos7
关闭防火墙 selinux
Redis版本 3.0.5
依赖环境
yum install gcc-c++ ruby rubygems –y
把版本包上传到服务器上,redis-3.0.5.tar.gz
解压tar -zxvf redis-3.0.5.tar.gz
然后进入目录
cd redis-3.0.5
直接make
然后进入
cd /redis/redis-3.0.5/src/
make install
然后把启动文件还有配置文件移除到其他地方方便管理
mkdir -p/usr/local/redis/bin
mkdir -p /usr/local/redis/bin
mkdir -p /usr/local/redis/etc
移动文件
mv redis.conf /usr/local/redis/etc/
以下文件在src目录里:
mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin/
方便后台启动需要改动redis.conf 配置文件
Vim redis.conf首先编辑conf文件,将daemonize属性改为yes(表明需要在后台运行)
redis-server /usr/local/redis/etc/redis.conf 完成单点
常用命令:
Redis:
Redis-server /usr..../redis.conf 启动redis服务,并指定配置文件
Redis-cli 启动redis 客户端
Pkill redis-server 关闭redis服务
Redis-cli shutdown 关闭redis客户端
Netstat -tunpl|grep 6379 查看redis 默认端口号6379占用情况
Redis集群模式(主从)
主库不需要动
从库修改salveof 后面添加主库IP + redis端口号
配置主服务器
1、进入192.168.2.100服务器,打开redis配置文件
[root@localhost redis-4.0.10]# vim /etc/redis/6379.conf
1
2、将bind 127.0.0.1这行注释或者指定ip。(本例是注释,即所有ip都能连接)
3、开启守护进程
4、设置访问密码(由于redis性能非常高,撞库风险极大,建议线上把密码设置非常复杂,最好能在第2步中指定ip)
注意:
当然,既然用到主从了,那说明对redis依赖非常高,还有几个参数需要根据服务器配置来设置
第一个就是客户端最大连接数(maxclients),默认是10000,可根据需求更改
第二个就是最大内存(默认不受限制,但如果有多个从服务器,建议还是设置个低于服务器内存的值)
第三个是内存策略,如果内存足够用则不用管,如果内存不够用,建议设置最近最少使用策略(LRU),默认是内存不够则报错
至此主服务器配置完毕!
三、配置从服务器
前四步与主服务器配置基本一致
5、配置所属主服务器ip和端口
6、配置所属主服务器的密码(再次强调,要将密码设置非常复杂,这里只是演示)
需要注意的是,从服务器通常是只读,所以要配置只读(默认是只读,不要更改即可)
配置完成,启动服务
1
四、测试
使用redis客户端或者telnet都可以
本次使用redis客户端
1、进入主服务器(192.168.2.100)
进入redis客户端
[root@localhost redis-4.0.10]# /usr/local/redis/bin/redis-cli
1
由于设置了密码,所以需要鉴权
设置一个值
2、进入从服务器(192.168.2.101)
使用get命令获取name的值,可以看到
代表配置成功
如果在从服务器上写,则会报错,如下图
至此,redis主从复制配置完成,如果需要配置多台从服务器,可以重复第三步
主从复制原理:
1.当从库和主库建立MS关系后,会向主数据库发送SYNC命令
2.主库接收到SYNC命令后会开始在后台保存快照(RDB持久化过程),并将期间接收到的写命令缓存起来
3.当快照完成后,主Redis会将快照文件和所有缓存的写命令发送给从Redis
4.从Redis接收到后,会载入快照文件并且执行收到的缓存的命令
5.之后,主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致
Redis Sentinel (哨兵)部署
Sentinel介绍:Sentinel是Redis的高可用性(HA)解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线状态时,
自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。Redis提供的sentinel(哨兵)机制,通过sentinel模式启动redis后,
自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决(每个sentinel只有一次选举的机会,当主库出现故障,哨兵会投票从库中选出一个承担主库的任务,剩下的还是从库)
Sentinel作用:
- 监控:监控主从是否正常
2. 通知:出现问题时,可以通知相关人员
3. 自动故障迁移:自动主从切换
4. 统一的配置管理:连接者询问sentinel取得主从的地址
部署哨兵
yum install gcc-c++ ruby rubygems –y
需要单独一个机器做哨兵部署
配置文件在redis包里名字sentinel.conf
配置如下
protected-mode
no (去掉注释)
daemonize
yes (自行添加守护进程)
dir /tmp
logfile
"/var/log/redis/redis_26379.log" (自行添加哨兵的日志)
sentinel monitor mymaster 192.168.52.138 6379
2 (原基础上更改)
sentinel down-after-milliseconds mymaster
30000 (默认)
sentinel parallel-syncs mymaster
1
(默认)
sentinel failover-timeout mymaster
180000 (默认) )
Redis持久化
都在redis.conf中配置
一、RDB持久化
1.1介绍
RDB方式是通过快照完成的,当符合一定的条件时,redis会自动将内存中的所有数据进行快照并且存储到硬盘上,默认存储在redis根目录的dump.rdb文件中(文件名在配置文件中dbfilename),进行快照的条件在redis.conf配置文件中指定,有两个参数构成,时间和改动的键的个数,当在指定时间被更改的键的个数大于指定数值时就会进行快照,RDB是redis默认的持久化方式
1.2快照过程
当redis需要做持久化时,redis会fork一个子进程;子进程将数据写到磁盘上一个临时RDB文件中;当子进程完成写临时文件后,将原来的RDB替换掉,然后子进程退出
1.3RDB持久化配置
RDB是Redis默认采用的持久化方式,在redis.conf配置文件中默认有此下配置:
save 900 1
save 300 10
save 60 10000
save 开头的一行就是持久化配置,可以配置多个条件(每行配置一个条件),每个条件之间是“或”的关系,“save 900 1”表示15分钟(900秒钟)内至少1个键被更改则进行快照,“save 300 10”表示5分钟(300秒)内至少10个键被更改则进行快照。"60 10000"表示60秒内有10000个key出现变更 做一次快照
在redis.conf中:
配置dir指定rdb快照文件的位置
配置dbfilenam指定rdb快照文件的名称
1.4RDB的优缺点
RDB的优点:
1). 一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算每个小时归档一次最近24小时的数据,同时还要每天归档一次最近30天的数据。通过这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。
2). 对于灾难恢复而言,RDB是非常不错的选择。因为我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。
3). 性能最大化。对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。
4). 相比于AOF机制,如果数据集很大,RDB的启动效率会更高。
RDB的缺点:
1). 如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么RDB将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。
2). 由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。
二、AOF持久化
1.1介绍
redis会将每一个收到的写命令都通过write函数追加到文件中(默认是 appendonly.aof)。AOF就可以做到全程持久化,只需要在配置文件中开启(默认是no不开启的),开启AOF之后,(默认是:每秒fsync一次)
1.2持久化过程
Redis 执行 fork() ,现在同时拥有父进程和子进程。子进程开始将新 AOF 文件的内容写入到临时文件。对于所有新执行的写入命令,父进程一边将它们累积到一个内存缓存中,一边将这些改动追加到现有 AOF 文件的末尾: 这样即使在重写的中途发生停机,现有的 AOF 文件也还是安全的。当子进程完成重写工作时,它给父进程发送一个信号,父进程在接收到信号之后,将内存缓存中的所有数据追加到新 AOF 文件的末尾。现在 Redis 原子地用新文件替换旧文件,之后所有命令都会直接追加到新 AOF 文件的末尾。
1.3AOF的配置
开启AOF持久化
appendonly yes #启用aof持久化方式
在Redis的配置文件中存在三种同步方式,它们分别是:
appendfsync always #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync no #从不同步。高效但是数据不会被持久化。
AOF持久化文件的名称
appendfilename “appendonly.aof”
1.4如何修复坏损的AOF文件:
将现有已经坏损的AOF文件额外拷贝出来一份
执行”redis-check-aof –fix ”命令来修复坏损的AOF文件。
用修复后的AOF文件重新启动Redis服务器。
1.5AOF的优缺点
AOF的优点:
1). 该机制可以带来更高的数据安全性,即数据持久性。Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步。事实上,每秒同步也是异步完成的,其效率也是非常高的,所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失。而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中。可以预见,这种方式在效率上是最低的。至于无同步,无需多言,我想大家都能正确的理解它。
2). 由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果我们本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在Redis下一次启动之前,我们可以通过redis-check-aof工具来帮助我们解决数据一致性的问题。
3). 如果日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性。
4). AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。事实上,我们也可以通过该文件完成数据的重建。
AOF的劣势:
1). 对于相同数量的数据集而言,AOF文件通常要大于RDB文件。
2). 根据同步策略的不同,AOF在运行效率上往往会慢于RDB。总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效。
redis 持久化 哨兵 主从的更多相关文章
- Redis持久化、主从与哨兵架构详解
目录 Redis持久化 RDB快照(snapshot) AOF(append-only file) AOF重写 Redis 4.0 混合持久化 Redis数据备份策略: Redis主从架构 Redis ...
- redis持久化和主从同步
redis持久化rdb与aof 简介 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的 ...
- redis持久化以及主从服务器的配置
作者:silenceper 日期:2013-10-03 原文地址:http://silenceper.com/archives/959.html redis 与memcached 最大的一个区别就是R ...
- redis持久化,主从及数据备份
http://blog.csdn.net/lang_man_xing/article/details/38386113 现在在项目里已经大量使用redis了,为了提高redis的性能和可靠性我们需要知 ...
- 《吊打面试官》系列-Redis哨兵、持久化、主从、手撕LRU
你知道的越多,你不知道的越多 点赞再看,养成习惯 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联 ...
- Redis系列五 - 哨兵、持久化、主从
问:骚年,都说Redis很快,那你知道这是为什么吗? 答:英俊潇洒的面试官,您好.我们可以先看一下 关系型数据库 和 Redis 本质上的区别. Redis采用的是基于内存的,采用的是单进程单线程模型 ...
- redis哨兵主从自动切换
1.用的是TP5框架,改写框架自带的redis类 thinkphp/library/think/cache/driver/Redis.php //两台服务器都配置好了监控哨兵 //主从配置要设置好密码 ...
- MariaDB主从复制,redis发布订阅,持久化,以及主从同步
一. MariaDB主从复制 mysql基本操作 1 连接数据库 mysql -u root -p -h 127.0.0.1 mysql -u root -p -h 192.168.12.60 2 ...
- redis持久化策略梳理及主从环境下的策略调整记录
redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化.可以不定期的通过异步方式保存到磁盘上(即“半持久化模式”):也可以把每一次数据变化都写入到一个A ...
随机推荐
- swift实现线程安全的栈和队列
实现一个线程安全的栈 这里使用数组来存储栈的数据.不足之处在于本例中的Stack可以无限扩容,更好的是初始化时候指定一个最大容量,防止不断扩容申请内存导致内存不够的问题.这里的线程安全使用一个串行队列 ...
- C++ 编译器的安装(MinGW)
GNU GNU是一个自由软件工程项目,GNU工程已经开发了一个被称为“GNU”(GNU是“不是UNIX”的缩写)的.对Unix向上兼容的完整的自由软件系统(free software system). ...
- Linux性能优化从入门到实战:08 内存篇:内存基础
内存主要用来存储系统和应用程序的指令.数据.缓存等. 内存映射 物理内存也称为主存,动态随机访问内存(DRAM).只有内核才可以直接访问物理内存. Linux 内核给每个进程都提供了一个独立的 ...
- qt05 音乐播放器
这些步骤可实现音乐播放,但是列表不能显示 music = new QMediaPlayer(this); playlist = new QMediaPlaylist(this); playlist-& ...
- [洛谷P1514] NOIP2010 引水入城
问题描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N 行×M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度. ...
- 一个KVO 实现WKWebView加载进度条的例子 (注意最后移除观察者)
// // OpenWebViewController.m // Treasure // // Created by 蓝蓝色信子 on 16/7/29. // Copyright © 2016年 GY ...
- Xcode编辑器之filter查找功能和查看最近修改的文件
一,前言 有时候,我们的项目过大,创建类过多就会造成“目标文件”不好查找.这时候通过“filter”进行目录结构筛选无疑是最好的选择. 二,什么是filiter filiter 顾名思义为“过滤”,“ ...
- 20180805-Java ByteArrayOutputStream类
下面的例子演示了ByteArrayInputStream 和 ByteArrayOutputStream的使用: import java.io.* public class ByteStreamTes ...
- 第九届ECNU Coder K.计软联谊
题目链接:http://acm.ecnu.edu.cn/contest/16/problem/K/ 题目: K. 计软联谊 Time limit per test: 7.0 seconds Time ...
- 10 Advanced Bing Search Tricks You Should Know
Exclude Websites From Bing Search: wikipedia -wikipedia.org Excluding Keywords From Bing Search: fac ...