大家可以先看这篇文章ASP.NET Redis 开发对Redis有个初步的了解

Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构。

在master上执行写操作,在slave上面进行读操作,因为我们大多数场景查多一些。

实现步骤如下:

1.在Windows某个磁盘上创建两个目录,例如; MasterRedis(存储的是Master服务) SlaveRedis(存储的是Slave服务).

把Reidis文件分别拷贝一份到这两个目录中。

2.在Master服务中的配置文件redis.conf修改 :bind 127.0.0.1.

3.在Slave服务中的配置文件redis.conf修改:

port 6381(服务端口号要分开)

bind 127.0.0.1

slaveof 127.0.0.1 6379 (设置master的Host以及Port)

4.分别启动Master服务与Slave服务。

启动Master服务,开始——运行——CMD

启动Slave服务,开始——运行——CMD

这个时候会发现我们主从服务器配置都正确了。

接下来,我们尝试在master服务器里面写一条数据,然后看slave服务器上面能查询到么

再打开一个CMD窗口,

D:\Redis服务\MasterRedis>redis-cli.exe -h 127.0.0.1 -p 6379
redis 127.0.0.1:6379> set name "邹琼俊"
OK
redis 127.0.0.1:6379>

由于我们默认的redis配置:Save 900 1,表示有1个key改变,900秒以后执行快照,那么15分钟后才会同步到slave服务器。

15分钟后,打开slave服务器目录下面的dump.rdb进行查看:,表示已经同步到slave上面去了。

注意到,当我启动master,然后启动一个slave的时候,可以发现slave上:

[5444] 17 Apr 08:39:57 * MASTER <-> SLAVE sync started
[5444] 17 Apr 08:39:57 * Non blocking connect for SYNC fired the event.
[5444] 17 Apr 08:39:58 * MASTER <-> SLAVE sync: receiving 10 bytes from master
[5444] 17 Apr 08:39:58 * MASTER <-> SLAVE sync: Loading DB in memory
[5444] 17 Apr 08:39:58 * MASTER <-> SLAVE sync: Finished with success

会发送一个SYNC请求,从Master上面进行相应,而且它支持自动重连,

即当master掉线的情况下,它会处于等待请求的状态。

而Master上:

第一次Slave向Master同步的实现是:Slave向Master发出同步请求,Master先dump出rdb文件,然后将rdb文件全量传输给slave,然后Master把缓存的命令转发给Slave,初次同步完成。第二次以及以后的同步实现是:Master将变量的快照直接实时依次发送给各个Slave。不管什么原因导致Slave和Master断开重连都会重复以上过程。Redis的主从复制是建立在内存快照的持久化基础上,只要有Slave就一定会有内存快照发生。虽然Redis宣称主从复制无阻塞,但由于Redis使用单线程服务,如果Master快照文件比较大,那么第一次全量传输会耗费比较长时间,且文件传输过程中Master可能无法提供服务,也就是说服务会中断。

Redis数据快照

数据快照的原理是将整个Redis内存中的所有的数据遍历一遍存储到一个扩展名为rdb的数据文件中,通过save命令

可以调用这个过程。数据快照配置如下:

Save 900 1

Save 300 10

Save 60 10000

以上在redis.conf中的配置指出在多长时间内,有多少次更新操作,就将数据同步到数据文件中,这个可以多个条件进行配合,上面的含义是900秒后有一个key发生改变就执行save,300秒后有10个key发生改变就执行save,60秒有10000个key发生改变就执行save.

数据快照的缺点是持久化之后如果出现系统宕机则会丢失一段数据,因此增加了另外一种追加式的操作日志记录,叫append only file,其日志文件以aof结尾,我们称为aof文件,要开启aof日志的记录,需要在配置文件中进行如下配置: appendonly yes

Appendonly配置不开启,可能在断电时导致一段时间的数据丢失,因为redis本身同步数据文件时按save条件来同步的,所以有的数据会在一段时间内只存在于内存中。

Appendfsync no/always/everysec

no:表示等操作系统进行数据缓存同步到磁盘。性能最好,持久化没有保障。

Always:表示每次更新操作后手动调用fsync()将数据写到磁盘.每次收到写命令就立即强制写入磁盘,最慢的,但是保障完全的持久化。

Everysec:表示每秒同步一次.每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中。

为了定时减小AOF文件的大小,Redis2.4以后增加了自动的bgrewriteaof的功能,Redis会选择一个自认为负载低的情况下执行bgrewriteaof,这个重写AOF文件的过程是很影响性能的。解决方案:Master关闭Save功能,关闭AOF日志功能,以求达到性能最佳。Slave开启Save并开启AOF日志功能,并开启bgrewriteaof功能,不对外提供服务,这样Slave的负载总体上会高于Master负载,但是Master性能达到最好.

Bgrewriterof内部实现:

1.Redis通过fork一个子进程,遍历数据,写入新临时文件

2.父进程继续处理client请求,子进程继续写临时文件。

3.父进程把新写入的AOF写在缓冲区。

4.子进程写完退出,父进程接收退出消息,将缓冲区AOF写入临时文件。

5.临时文件重命名成appendonly.aof,原来文件被覆盖,整个过程完成。

Redis数据恢复

当Redis服务器挂掉以后,重启时将按以下优先级恢复数据到内存:

1.如果只配置了AOF,重启时加载AOF文件恢复数据。

2.如果同时配置了RBD和AOF,启动时只加载AOF文件恢复数据。

3.如果只配置了RDB,启动时将加载dump文件恢复数据。

Redis主从复制的更多相关文章

  1. [原]Redis主从复制各种环境下测试

    Redis 主从复制各种环境下测试 测试环境: Linux ubuntu 3.11.0-12-generic 2GB Mem 1 core of Intel(R) Core(TM) i5-3470 C ...

  2. NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索

    一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一 ...

  3. 【转】 NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索

    一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一 ...

  4. redis+Keepalived实现Redis主从复制

    redis+Keepalived实现Redis主从复制: 环境:CentOs6.5Master: 10.10.10.203Slave:   10.10.10.204Virtural IP Addres ...

  5. 深入剖析 redis 主从复制

    主从概述 redis 支持 master-slave(主从)模式,redis server 可以设置为另一个 redis server 的主机(从机),从机定期从主机拿数据.特殊的,一个 从机同样可以 ...

  6. 谈谈redis主从复制的重点

    Redis主从复制的配置十分简单,它可以使从服务器是主服务器的完全拷贝.下面是关于Redis主从复制的几点重要内容: Redis使用异步复制.但从Redis 2.8开始,从服务器会周期性的应答从复制流 ...

  7. 配置Redis主从复制

    [构建高性能数据库缓存之redis主从复制][http://database.51cto.com/art/201407/444555.htm] 一.什么是redis主从复制? 主从复制,当用户往Mas ...

  8. Redis主从复制及状态监测

    参考链接:http://www.cnblogs.com/morvenhuang/p/4184262.html #配置redis主从复制: #安装redis- master slave #修改slave ...

  9. Redis主从复制(Master/Slave)

    Redis主从复制(Master/Slave) 修改配置文件 拷贝多个redis.conf文件分别配置如下参数: 开启daemonize yes pidfile port logfile dbfile ...

  10. [转载] 深入剖析 redis 主从复制

    转载自http://www.cnblogs.com/daoluanxiaozi/p/3724299.html 主从概述 redis 支持 master-slave(主从)模式,redis server ...

随机推荐

  1. Android系统默认对话框添加图片

    开发工具Android Studio 今天公司UI要求软件对话框改成加图片的,以前没有做过,所以就学习了一下,废话不多说, 看效果: 创建XML文件dialog_lsit_item.xml <L ...

  2. 【开源】专业K线绘制[K线主副图、趋势图、成交量、滚动、放大缩小、MACD、KDJ等)

    这是一个iOS项目雅黑深邃的K线的绘制. 实现功能包括K线主副图.趋势图.成交量.滚动.放大缩小.MACD.KDJ,长按显示辅助线等功能 预览图 最后的最后,这是项目的开源地址:https://git ...

  3. LINQ to SQL语句(7)之Exists/In/Any/All/Contains

    适用场景:用于判断集合中元素,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就返回True,否则为False).有2种形式,分别为简单形式 ...

  4. LVM基本介绍与常用命令

    一.LVM介绍LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制LVM - 优点:LVM通常用于装备大量磁盘的系统,但它同样适 ...

  5. 兼容Mono的下一代云环境Web开发框架ASP.NET vNext

    微软在2014年5月12日的TechEd大会上宣布将会发布下一代ASP.NET框架ASP.NET vNext的预览.此次发布的ASP.NET框架与以前相比发生了根本性的变化,凸显了微软“云优先”(cl ...

  6. 从零开始,DIY一个jQuery(2)

    在上篇文章我们简单实现了一个 jQuery 的基础结构,不过为了顺应潮流,这次咱把它改为模块化的写法,此举得以有效提升项目的可维护性,因此在后续也将以模块化形式进行持续开发. 模块化开发和编译需要用上 ...

  7. 论C#之多继承

    C#多继承的讨论似乎是个古老的问题了,但今天本文要向大家展示的C#多继承可能是大家闻所未闻见所未见的,甚至是发明C#语言的人也不曾想到我会这样去写代码,并且自得其乐. 说起多继承,首先大家可以想想这个 ...

  8. K-近邻算法(KNN)

    简介 k近邻算法是数据分类一种常用的算法,属于监督学习算法的一类,它采用不同特征值之的距离进行分类.K近邻算法具有精度高.对异常值不敏感.无数据输入假定的优点,缺点是计算复杂度高.空间复杂度高.适用于 ...

  9. 同步与异步 & 阻塞与非阻塞

    在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 一.同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用 ...

  10. 在thinkPHP3.2.3框架下实现手机和PC端浏览器的切换

    查看thinkphp版本号方法 打开文件“根目录\ThinkPHP\ThinkPHP.php”下的文件ThinkPHP.php,在22--23行可以看到版本信息THINK_VERSION,如下图: 说 ...