一.redis主从复制特点:
1.master(主)可以拥有多个slave(从)
2.多个slave可以连接同一个master外,还可以连接到其他slave
3.主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
4.提高系统的伸缩性
5.可以在master禁用数据持久化,注释掉master配置文件中的所有save配置,只需在slave上配置数据持久化
#当有一条Keys数据被改变是,900秒刷新到disk一次
#save 900 1
#当有10条Keys数据被改变时,300秒刷新到disk一次
#save 300 10
#当有1w条keys数据被改变时,60秒刷新到disk一次
#save 60 10000
二.redis主从复制过程:
当配置好slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进程,将 数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给slave,slave将 文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave。如果 master同时收到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像,然后发送给所有的slave。
三.配置
Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级 服务器集群架构。下面我演示下怎样在多台服务器上进行Redis数据主从复制。这里我假设有两台服务器,一台是Linux操作系统(局域网 IP:192.168.3.159),一台是Linux操作系统(局域网IP:192.168.3.169),在两个操作系统都安装 redis,安装过程参见http://blog.csdn.net/ajun_studio/article/details/6698147有详细的介绍。
此时我们要到用到linux ,这里我们采用centOs5.4 ,redis采用redis-2.0.4。
这里我使用1个master以及1个slave(master在一个Linux下,一个slave在一个Linux下,基本流程是
client -----whrite----->>>【Linux(master 192.168.3159:6379)】<<<--------------------slave----【Linux (slave 192.168.3.169:6381)】<<<<------read---------client
1.在master上修改redis.conf
bind 192.168.3.159
2.在slave上修改起redis.conf
port 6381(服务端口号要分开)
bind 192.168.3.169
slaveof 192.168.3.159 6379 (设置master的Host以及Port)
首先启动master
redis-server redis.conf
然后启动slave
redis-server redis.conf
查看日志出现
* Connecting to MASTER...
[5374] 23 Aug 03:33:20 * Receiving 5479067bytes data dump from MASTER
[5374]23 Aug 03:33:21 * MASTER <-> SLAVE sync succeeded
下面做个客户端测试吧
首先连接master添加数据
# ./redis-cli -h 192.168.3.159 -p 6379
redis> set name ajun
ok
接着连接slave取出数据
# ./redis-cli -h 192.168.3.169 -p 6381
redis> get name
'ajun'
到此为止 你的Redis主从复制算是圆满成功了!!!
赶快实验一下吧!!!