一.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.youkuaiyun.com/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
- port 6381(服务端口号要分开)
- bind 192.168.3.169
- slaveof 192.168.3.159 6379 (设置master的Host以及Port)
3.启动服务
首先启动master
- redis-server redis.conf
- 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
- # ./redis-cli -h 192.168.3.169 -p 6381
- redis> get name
- 'ajun'
赶快实验一下吧!!!
经验证 不bind服务器ip 及两台机器ip是127.0.0.1 也是可以主从配置的
二:redis动态的主变从 从变主
/opt/apps_install/redis-2.4.8/src/redis-cli -h 10.10.83.226 -p 6379 SLAVEOF 10.10.83.225 6379
SLAVEOF 10.10.83.225 6379 是变成225的从