本次测试环境使用一台ip为192.168.2.11的虚拟机。拷贝redis.conf改名为redis-slave.conf作为redis的从服务器启动时的配置文件。
1.修改从节点配置文件
1) vim redis-slave.conf
2) 修改端口为6380 #唯一即可
2) 修改 slaveof 的值,如:slaveof 192.168.2.11 6379
2.按照主从顺序启动redis实例
cd /usr/redis #根据自己情况而定
./bin/redis-server ./redis.conf #启动redis主服务器
./bin/redis-server ./redis-slave.conf #启动redis从服务器
3.测试
1) 在主从数据库端键入 info replication 可以查看信息
2) 在主节点设置新的key: set username admin
3) 经测试,从节点只能读取,不能写入
4.主从复制原理(磁盘复制)
当一个从数据库启动时,会向主数据库发送SYNC命令,主数据库收到命令后会开始在后台保存快照(即RDB持久化过程),并将保存快照期间接收到的命令缓存起来。
当快照完成后,Redis会将快照文件和缓存的命令发给从数据库,从数据库收到数据后,会载入快照文件并执行缓存的命令。以上过程称为复制初始化。
复制初始化之结束后,主数据库每收到写命令时就会将命令同步给从数据库,从而保证主从数据库数据一致,这一过程称为复制同步阶段。
需要注意:
复制同步阶段贯穿整个主从同步过程的始终,直到主从关系终止为止。在复制过程中,即使关闭了RDB方式的持久化(删除所有save参数),依旧会执行快照操作。
5.无磁盘复制
Redis在与从数据库进行复制初始化时不会将快照存储到磁盘,而是直接通过网络发送给从数据库,避免了IO性能差的问题。
需要修改redis.conf文件:
repl-diskless-sync yes
6.宕机问题
1.从数据库宕机
答:再次启动从数据库即可。
说明:当主从数据库之间的连接断开后,Redis2.8之前的版本会重新进行复制初始化过程,这样就使得主从数据库断开连接后数据恢复的过程的效率很低下。
Redis2.8版本的一个重要改进就是断线支持有条件的增量数据传输,当从数据库再次连接到主数据库时,主数据库只需要将断线期间执行的命令发给从数据库即可,大大提高了Redis主从复制的实用性。
2.主数据库宕机
1)在从库中执行,键入slaveof no one命令。从库升级为主库
2)重新启动主库,键入slaveof命令,降为从库