master-slave
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了master-slave相关的知识,希望对你有一定的参考价值。
Redis的master/slave数据复制方式可以是一主一从或者是一主多从的方式,Redis在master是非阻塞模式,也就是说在slave执行数据同步的时候,master是可以接受客户端的请求的,并不影响同步数据的一致性,然而在slave端是阻塞模式的,slave在同步master数据时,并不能够响应客户端的查询。
Redis的master/slave模式下,master提供数据读写服务,而slave只提供读服务。
Redis的Replication工作原理
在Slave启动并连接到Master之后,它将主动发送一个SYNC命令。此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave服务器在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。
如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。
特点
1.master可以有多个slave;
2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构;
3.主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求;
相反slave在初次同步数据时则会阻塞不能处理client的请求;
4.主从复制可以用来提高系统的可伸缩性,我们可以用多个slave 专门用于client的读请求;
5.可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。
配置
1. 同时启动两个Redis服务器,可以考虑在同一台机器上启动两个Redis服务器,分别监听不同的端口,如6379和6370。
2. 在Slave服务器上执行一下命令:
/> redis-cli -p 6370 #这里我们假设Slave的端口号是6370
redis 127.0.0.1:6370> slaveof 127.0.0.1 6379 #我们假设Master和Slave在同一台主机,Master的端口为6379
OK
上面的方式只是保证了在执行slaveof命令之后,redis_6370成为了redis_6379的slave,一旦服务(redis_6370)重新启动之后,他们之间的复制关系将终止。
如果希望长期保证这两个服务器之间的Replication关系,可以在redis_6370的配置文件中做如下修改:
/> cd /etc/redis #切换Redis服务器配置文件所在的目录。
/> ls
6379.conf 6370.conf
/> vi 6370.conf
将
# slaveof <masterip> <masterport>
改为
slaveof 127.0.0.1 6379
保存退出。
这样就可以保证Redis_6370服务程序在每次启动后都会主动建立与Redis_6379的Replication连接了。
以上是关于master-slave的主要内容,如果未能解决你的问题,请参考以下文章