项长老

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一、Redis的Replication

    优点:读写分离  

    下面的列表清楚的解释了Redis Replication的特点和优势。
    1). 同一个Master可以同步多个Slaves。
    2). Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。因此我们可以将Redis的Replication架构视为图结构。
    3). Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。
    4). Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。
    5). 为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成。即便如此,系统的伸缩性还是得到了很大的提高。
    6). Master可以将数据保存操作交给Slaves完成,从而避免了在Master中要有独立的进程来完成此操作。
    
二、Replication的工作原理

    在Slave启动并连接到Master之后,它将主动发送一个SYNC命令。此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave服务器在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。
    如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。

 master保存RDB文件是通过一个子进程进行的,所以master依然可以处理客户端请求而不被阻塞,但这也导致了在保存RDB文件期间,“键空间”可能发生变化(譬如接收到一个客户端请求,执行"set name diaocow"命令),因此为了保证数据同步的一致性,master会在保存RDB文件期间,把接受到的这些可能变更数据库“键空间”的命令保存下来,然后放到每个slave的回复列表中,当RDB文件发送完master会发送这些回复列表中的内容,并且在这之后,如果数据库发生变更,master依然会把变更的命令追加到回复列表发送给slave,这样就可以保证master和slave数据的一致性!

三、如何配置Replication

1、临时

在Slave_B服务器上执行命令:
slaveof 127.0.0.1 6379
上面的方式只是保证了在执行slaveof命令之后,B成为了A的slave,一旦服务(B)重新启动之后,他们之间的复制关系将终止。
2、永久:
修改slave的redis.conf
slaveof ip port   --设置master的ip和端口
 
如果主数据库设置了密码,需要在从数据的配置文件中通过masterauth参数设置主数据库的密码。

四、redis主从复制注意事项

如果你使用主从复制,那么要确保master激活了持久化,或者 确保它不会在宕掉后自动重启。因为slave是master的完整备份,因此如果master通过一个空数据集重启,slave也会被清掉。

参考:http://www.cnblogs.com/stephen-liu74/archive/2012/02/23/2364717.html
其他资料:http://blog.csdn.net/pi9nc/article/details/17735653

posted on 2016-04-28 23:03  项长老  阅读(172)  评论(0编辑  收藏  举报