redis 主从复制

转载 2015年11月18日 17:08:08

Redis 的主从复制配置非常容易,但我们先来了解一下它的一些特性。

  1. redis 使用异步复制。从 redis 2.8 开始,slave 也会周期性的告诉 master 现在的数据量。可能只是个机制,用途应该不大。
  2. 一个 master 可以拥有多个 slave,废话,这也是业界的标配吧。

  3. slave 可以接收来自其他 slave 的连接。意思是不是就是说 slave 在接收其他的slave的连接之后成为 master ?等下我们来验证。

  4. redis 复制在 master 这一端是非阻塞的,也就是说在和 slave 同步数据的时候,master 仍然可以执行客户端的操作命令而不受其影响。这点都不能保证,要你干嘛?
  5. redis 复制在 slave 这一端也是非阻塞的。在配置文件里面有 slave-serve-stale-data 这一项,如果它为 yes ,slave 在执行同步时,它可以使用老版本的数据来处理查询请求,如果是 no ,slave 将返回一个错误。在完成同步后,slave 需要删除老数据,加载新数据,在这个阶段,slave 会阻止连接进来。
  6. Replication can be used both for scalability, in order to have multiple slaves for read-only queries (for example, heavy SORT operations can be offloaded to slaves), or simply for data redundancy.这句话我也没理解什么意思。

  7. 使用复制可以避免 master 因为需要把全部的数据集写入磁盘而造成的开销,因此可以把 master 中 save 配置项全部注释掉,不让它进行保存,然后配置 slave ,让 slave 保存。虽然有这个特性,但是我们好像一般不这么做。

好吧,我们做几个例子练习一下。

先打开三个终端,然后起三个实例,分别用三个 client 去连接它们:

zhaoguihuadediannao:src zhaogh$ ./redis-server --port 10000 --daemonize yes

zhaoguihuadediannao:src zhaogh$ 

zhaoguihuadediannao:src zhaogh$ ./redis-cli -p 10000

端口10000的做 master。

slave 01:

zhaoguihuadediannao:src zhaogh$ ./redis-server --port 10001 --daemonize yes

zhaoguihuadediannao:src zhaogh$ 

zhaoguihuadediannao:src zhaogh$ ./redis-cli -p 10001

slave 02:

zhaoguihuadediannao:src zhaogh$ ./redis-server --port 10002 --daemonize yes

zhaoguihuadediannao:src zhaogh$ 

zhaoguihuadediannao:src zhaogh$ ./redis-cli -p 10002

上面只是让它们的实例启动了并用客户端去连接它,并没有设置主从关系。在 slave 01 和 slave 02 上执行下面的命令:

127.0.0.1:10001> slaveof 127.0.0.1 10000

OK

127.0.0.1:10001> 

这样就设置好了主从关系。我们来试试有没有效果。

127.0.0.1:10001> get testkey001

(nil)

127.0.0.1:10001> 

这个时候是没有值的。

master 上执行:

127.0.0.1:10000> set testkey001 testvalue001

OK

127.0.0.1:10000> 

然后看看 slave 上有没有:

127.0.0.1:10001> get testkey001

"testvalue001"

127.0.0.1:10001> 

127.0.0.1:10002> get testkey001

"testvalue001"

127.0.0.1:10002> 

有了,是不是比***点读机还 easy ?已经有了感性的认识,我们来介绍一下它的原理吧。

当你设置了主从关系后,slave 在第一次连接或者重新连接 master 时,slave 都会发送一条同步指令给 master ;

master 接到指令后,开始启动后台保存进程保存数据,接着收集所有的数据修改指令。后台保存完了,master 就把这份数据发送给 slave,slave 先把数据保存到磁盘,然后把它加载到内存中,master 接着就把收集的数据修改指令一行一行的发给 slave,slave 接收到之后重新执行该指令,这样就实现了数据同步。

slave 在与 master 失去联系后,自动的重新连接。如果 master 收到了多个 slave 的同步请求,它会执行单个后台保存来为所有的 slave 服务。

一旦 master 和 slave 在失去联系并重新连接上,总是会重新进行一次完整的同步。不过从 redis 2.8 开始,只是部分重新同步也是可以的。具体请大家参考官方文档。

祝大家端午节快乐。

下一篇,redis 的集群配置,敬请期待。

Redis主从复制实现

Redis中的主从复制,也就是Master-Slave模型,其实现相对比较简单,一般使用在多个Redis实例间的数据同步以及Redis集群中用的比较多。 • 工作原理 • 特征说明 • 如何配置 •...
  • why_2012_gogo
  • why_2012_gogo
  • 2016年05月17日 15:36
  • 1268

深入剖析Redis主从复制

一、主从概述 Redis 支持 Master-Slave(主从)模式,Redis Server 可以设置为另一个 Redis Server 的主机(从机),从机定期从主机拿数据。特殊的,一个从机同样...
  • maliao1123
  • maliao1123
  • 2017年01月04日 10:26
  • 338

Redis入门之浅谈主从复制(一)

redis基础之主从复制
  • candy_rainbow
  • candy_rainbow
  • 2016年10月16日 00:00
  • 718

redis主从复制及切换

现在我的系统用redis做缓存服务器,redis是一个单点,当一台机器岩机的时候,redis的服务完全停止,这时就会影响其他服务的正常运行,所以我们要做的是redis主从复制及主动切换,这就是redi...
  • xiaoyu_0217
  • xiaoyu_0217
  • 2017年07月17日 18:39
  • 356

redis的主从复制机制

这边介绍一下Redis的主从复制,关于主从的概念这边就不介绍了的。 1、redis主从复制的特点 Master可以拥有多个Slave;多个Slave还可以连接其他的Master;同步数据时,Mast...
  • enson16855
  • enson16855
  • 2013年10月24日 20:32
  • 1543

Redis 讲解系列之 Redis的主从复制(一)

Redis 讲解系列之 Redis的复制(一)概念 Conception(概念) Redis的复制也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver...
  • u012437781
  • u012437781
  • 2017年10月13日 14:01
  • 85

redis持久化及主从复制详解(转)

作者:silenceper 日期:2013-10-03 原文地址: http://silenceper.com/archives/959.html redis 与memcached 最大的一个区...
  • abc86319253
  • abc86319253
  • 2014年12月26日 16:26
  • 1418

redis点滴(六)redis主从复制

一般来说,要将redis应用于一台服务器是万万不能的,原因如下: 1.从结构上,单个redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大 2.从容量上看,单个redis服...
  • u014209975
  • u014209975
  • 2016年12月12日 16:44
  • 875

Redis 主从复制 原理与用法

Redis 复制功能的几个重要方面: 1. 一个Master可以有多个Slave; 2. Redis使用异步复制。从2.8开始,Slave会周期性(每秒一次)发起一个Ack确认复制流(replicat...
  • Stubborn_Cow
  • Stubborn_Cow
  • 2015年12月31日 17:31
  • 4668

redis 主从复制,读写分离

redis的主从复制,读写分离,可以避免单点故障,而且可以提高服务器的负载能力.可以简单实现下面如图所示的主从结构: A(master) / \ B(slave1) C(slave2...
  • gongstrong123
  • gongstrong123
  • 2016年04月12日 17:22
  • 447
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:redis 主从复制
举报原因:
原因补充:

(最多只允许输入30个字)