Redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。
Redis的复制原理:
本身就是Master发送数据给slave,只是第一次连接是Slave向Master发送同步请求,其它的都是Master主动向Slave发送数据。
Redis主从复制的过程:
当设置好slave服务器后,slave会建立和master的连接,然后发送sync命令。无论是第一次同步建立的连接还是连接断开后的自动尝试重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。后台进程完成写文件后,master就发送文件给slave,slave将文件保存到磁盘上,然后加载到内存恢复数据库快照到slave上的数据库中。
master后续收到的写命令都会通过开始建立的连接发送给slave。从master到slave的同步数据的命令和从client发送的命令使用相同的协议格式。当master和slave的连接断开时slave可以自动尝试重新建立连接。如果master同时收到多个slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave。
Redis主从复制特点:
1.master可以拥有多个slave
2.多个slave不但可以连接同一个master外,还可以连接到其它slave
3.主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
4.提高系统的伸缩性
配置slave服务器(master无需特别配置,只配置slave即可):
vi编辑配置文件
[root@martin etc]# vi /usr/local/redis/etc/redis.conf
1.在约116行找到 # slaveof <masterip> <masterport> 这里是主服务器的IP和端口(从属于哪个master的哪个port)
slaveof 192.168.1.26 6379
2.在约124行找到 # masterauth <master-password> 这里是主服务器的授权密码(如果master没有设置密码此处则不用配置)
masterauth 123456
3.重启slave服务器,重新登录到slave
4.查看服务器角色(身份):
redis 127.0.0.1:6379> info
......
role:slave #角色
master_host:192.168.1.26 #master主机
master_port:6379 #master端口
master_link_status:up #master连接状态:up同步;down异步
master_last_io_seconds_ago:4 #最后一次同步在见秒钟前
master_sync_in_progress:0
slave_priority:100
db0:keys=4,expires=0 #数据库有几个key,过期key的数量
总结:照此方法,此slave机还可以被充当为其它服务器的master。