Redis高可用解决方案
2014-06-12 13:00:45 点击:

Redis单点估计是很多人面临的问题,因为Redis的集群方案还在开发中Redis cluster Specification。当然也也有网友给出Redis高可用性之Fail...
Redis单点估计是很多人面临的问题,因为Redis的集群方案还在开发中Redis cluster Specification

当然也也有网友给出Redis高可用性之Failover过渡方案 ,看了这篇文章里面的思路结合我们现有的情况尝试做一个简单的Failover方案。

1:两台Redis写服务器,是在Redis_Master(192.168.1.10)、Redis_Slave(192.168.1.11)上绑定HAproxy的vip 192.168.1.100,四台Redis读服务器,是在Slave1、Slave2、Slave3、Slave4上绑定HAproxy的vip 192.168.1.101;

2:Redis_Master和Redis_Slave是以Master-Slave的方式启动(配置在config文件里),然后给Redis_Master发送slaveof命令(必须的配置文件里设置主从的形式,然后再用命令),指定其为Redis_Slave的Slave,这样以来Redis_Master和Redis_Slave可以实现双向同步,这是避免写单点的核心。

3:启动监控脚本对两个Redis服务进行扫描,如果Redis_Master挂掉,监控脚本对在线的Redis_Slave发送slaveof NO ONE命令,设置其为临时的Master,同时由于Redis_Master服务器挂掉,vip 192.168.1.100自动转移至TempMaster,不影响应用程序对Redis的写操作。此时应用程序新产生的数据都保存到Redis_Slave上,当然原来的只读服务器会出现短暂的数据不一致。此时再通过命令启动Redis_Master,配置文件里是作为Redis_Slave的从的方式启动。

本地测试监控脚本如下,Redis_Master和Redis_Slave挂了都可以用下面的脚本,如果是Redis_Slave挂了不用这个判断failoverProcess进程:
#!/bin/sh
#监测Redis服务
masterProcess=`ps -ef|grep '/etc/redis.conf'|grep -v grep|wc -l`                #以主的方式启动的配置文件
failoverProcess=`ps -ef|grep '/etc/redis_failover.conf'|grep -v grep|wc -l`     #以从的方式启动的配置文件
if [ $masterProcess -eq 0 -a $failoverProcess -eq 0 ];then
     datetime=`date '+%Y%m%d%H:%M:%S'`
     /usr/local/bin/redis-cli -h 127.0.0.1 -p 6380 slaveof NO ONE    #将该Slave变为TempMaster
     mv /data/redisdb/dump.rdb /data/redisdb/$datetime".dump.rdb"    #原来的数据备份
     /usr/local/bin/redis-server /etc/redis_failover.conf            #使用另一个配置文件以从的方式启动,这样能自动同步最新数据
     sleep 2

     /usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 slaveof NO ONE    #变回以前的主
     sleep 2

     /usr/local/bin/redis-cli -h 127.0.0.1 -p 6380 slaveof 127.0.0.1 6379 #还原以前的主从
     sleep 2

     /usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 slaveof 127.0.0.1 6380 #实现双向同步
else
     echo "process is ok!"
fi
 

4:Master和Slave下的4台从服务器如果任意一台挂掉了重启即可,数据将会自动从slaveof的机器同步;
以上只是一个思路,个人感觉要根据实际情况而定,无非是要解决单点和数据一致性的问题,用双写或多些的方式同样能做。

Redis高可用High Availability解决方案

Redis高可用High Availability解决方案

                                                          原文 http://haili.me/archives/416.html


相关热词搜索:解决方案

上一篇:Redis Cluster搭建方法简介
下一篇:低成本和高性能的MySQL云数据库的实现