Redis系列-主从复制配置

转载 2016年05月31日 12:42:25

redis虽然有着卓越的性能,但我们仍然可以通过master/slave这种简单架构,进行读写分离,进一步挖掘redis的性能,提高系统的可用性。

redis怎么进行主从复制呢?redis复制主要是通过master server持久化的rdb文件实现的。master server 先dump出内存快照文件,然后将rdb文件传给slave server,slave server 根据rdb文件重建内存表。redis复制过程如下:

1、slave server启动连接到master server之后,salve server主动发送SYNC命令给master server

 2、master server接受SYNC命令之后,判断,是否有正在进行内存快照的子进程,如果有,则等待其结束,否则,fork一个子进程,子进程把内存数据保存为文件,并发送给slave server

3、master server子进程进程做数据快照时,父进程可以继续接收client端请求写数据,此时,父进程把新写入的数据放到待发送缓存队列中

4、slave server 接收内存快照文件之后,清空内存数据,根据接收的快照文件,重建内存表数据结构

5、master server把快照文件发送完毕之后,发送缓存队列中保存的子进程快照期间改变的数据给slave server,slave server做相同处理,保存数据一致性

6、master server 后续接收的数据,都会通过步骤1建立的连接,把数据发送到slave server

需要注意:slave server如果因为网络或其他原因断与master server的连接,当slave server重新连接时,需要重新获取master server的内存快照文件,slave server的数据会自动全部清空,然后再重新建立内存表,这样会让slave server 启动恢复服务比较慢,同时也给master server带来较大压力,可以看出redis的复制没有增量复制的概念,这是redis主从复制的一个主要弊端,在实际环境中,尽量规避中途增加从库。

通过上面的介绍,我们对redis的主从复制有了个大概了解,下面讲讲具体怎么配置master/slave。由于条件限制,这里用一台机器,启动两个进程来进行主从复制。

master server 配置文件master.conf, 主要配置如下:

[plain] view plain copy
  1. daemonize yes  
  2. pidfile /var/run/redis_6379.pid  
  3. port 6379  
  4. #save 900 1  
  5. #save 300 10  
  6. #save 60 10000  
  7. dbfilename dump.rdb  
  8. dir /var/lib/redis/6379  
slave server 配置文件slave.conf主要配置如下:

[plain] view plain copy
  1. daemonize yes  
  2. pidfile /var/run/redis_6379.pid  
  3. port 6380  
  4. save 900 1  
  5. save 300 10  
  6. save 60 10000  
  7. dbfilename dump.rdb  
  8. dir /var/lib/redis/6380  
  9. slaveof 127.0.0.1 6379  
slave.conf中,主要通过slaveof指定其master的ip和端口。启动master和slave:

[plain] view plain copy
  1. /usr/local/bin/redis-server /etc/redis/master.conf  
  2. /usr/local/bin/redis-server /etc/redis/slave.conf  
连接master server,写入数据:
[plain] view plain copy
  1. [root@xsf001 ~]# redis-cli -p 6379  
  2. redis 127.0.0.1:6379> set user.1.name zhangsan  
  3. OK  
连接 slave server,读数据:

[plain] view plain copy
  1. [root@xsf001 ~]# redis-cli -p 6380  
  2. redis 127.0.0.1:6380> get user.1.name  
  3. "zhangsan"  

从测试结果看,数据确实自动复制了。通过复制功能,我们可以在master上只写数据,在slave上读数据,关闭master的持久化(或aof)功能(在salve上开启),从而分担master服务器读压力,提高master服务器性能,同时,master挂了,可以快速地用slave server来替换master server,提高系统的可用性。

在实际环境中,我们可以根据redis复制特点,定制适合我们自己的复制架构。比如,采用master server ->slave server ->slave server ->slave server这种一拖一【或一拖一再拖多】的方式,和常规的一拖多方式相比,这种方式更能减少master server在复制数据时的压力。当然,由于redis复制的天然缺陷,我们也可以采用主动复制的方式【通过redis代理层,client在写master时,写多个master】来改造优化redis自带的复制策略,不过,主动复制,怎么保持数据的一致性也是个不小的挑战。

redis配置文件相关信息,请参阅以前的blog:Redis系列-配置文件小结

Redis主从复制和集群配置系列之五

很清晰,非常感谢http://blog.csdn.net/nuli888/article/details/52134117 redis主从和MySQL主从目的差不多,但redis主从...

Redis主从复制和集群配置系列之二

非常感谢http://www.cnblogs.com/gossip/p/5992716.html 一、本文目的          Redis的主从配置分为两篇文章,第一篇主要介绍了Redis主从配...

Redis主从复制和集群配置系列之三

一、本文目的        演示在一台机器上搭建3主3从的redis集群,通过演示了解redis集群的搭建,使用和注意事项     二、搭建说明        1、同一台机器搭建3主3从的...

Redis主从复制和集群配置系列之一

此文章比较全面,包括对节点的操作 非常感谢http://blog.csdn.net/u011204847/article/details/51307044 Redis主从复制和集群配置 ...

Redis系列-主从复制配置

Redis虽然有着卓越的性能,但我们仍然可以通过master/slave这种简单架构,进行读写分离,进一步挖掘redis的性能,提高系统的可用性。 redis怎么进行主从复制呢?redis复制主...

Redis主从复制和集群配置

  • 2017年11月18日 17:32
  • 1.06MB
  • 下载

Redis主从复制和集群配置

  • 2017年08月21日 16:05
  • 541KB
  • 下载

Redis系列~主从复制(十八)

redis主从复制 概述 1、Redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自...

Redis主从复制和集群配置

  • 2017年08月29日 16:52
  • 17.37MB
  • 下载

redis系列-主从复制

redis自身提供了主从的机制,通过配置可以实现数据的备份
  • whuqin
  • whuqin
  • 2014年06月03日 17:06
  • 754
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Redis系列-主从复制配置
举报原因:
原因补充:

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