最近在测试redis的ha,在网上搜索了一下,对于keepalived+redis的主备,主要有以下两个链接:
A http://heylinux.com/archives/1942.html
B http://ylw6006.blog.51cto.com/470441/1086455
在这两个blog里面,有2处矛盾和疑问:
需要在Master与Slave上都开启本地化策略,否则在互相自动切换的过程中,未开启本地化的一方会将另一方的数据清空,造成数据完全丢失
主实例重起后不能通过slaveof方式从从实例同步数据.
实际搭环境测试了一下.
版本redis-2.6.7
首先redis1起为master模式,设置passwd.无持久化,
Redis2起为slvae模式,设置passwd和masterauth.开启aof持久化.
插入一些数据.测试主从同步ok,(注,slave在初次同步时master会进行一次快照)
模拟主实例down,kill redis1
将redis2通过slaveof no one命令提升为master,写入新数据.
重起redis1,此时里面的数据就是初次同步时的快照数据.
使用slaveof redis2命令从redis2同步数据.
情形和B文一样,info显示master_link_status:down
开始也以为是持久化策略的问题,尝试了不同的持久化策略未果,后来才想到是因为redis1没有配置masterauth导致连接redis2失败的原因.修改redis1配置后再试,果然就ok了.
同步完成后,重新设置redis2为slave,恢复初始主从状态.检查数据正常.
证明完全可以通过同步的方式恢复主实例.实现failover.