Heim  >  Artikel  >  Datenbank  >  Redis双机热备方案

Redis双机热备方案

WBOY
WBOYOriginal
2016-06-07 17:36:541189Durchsuche

参考资料:http://patrick-tang.blogspot.com/2012/06/redis-keepalived-failover-system.htmlhttp://deidara.blog.51cto.com/400447/302402http://my.oschina.n

参考资料:

 

 

背景

 

目前,Redis集群的官方方案还处在开发测试中,未集成到稳定版中。且目前官方开发中的Redis Cluster提供的功能尚不完善(可参考官方网站或),在生产环境中不推荐使用。通过调研发现市面上要实现采用单一的IP来访问,大多采用keepalived实现redis的双机热备作为过渡方案。

 

环境部署

 

环境介绍:   
Master: 192.168.1.218     redis,keepalived    
Slave: 192.168.1.219        redis,keepalived    
Virtural IP Address (VIP):  192.168.1.220

 

设计思路:

两个redis server主从备份。提供redis 服务高可用;两个keepalived 服务主从备份,提供VIP 服务的高可用。

1)每台redis server分别有主,从两个配置文件(redis_master.conf, redis_slave.conf),通过启动脚本启动服务,启动脚本会检测这个redis集群中的其他服务器的角色,如果有master 服务存在,则以slave角色启动,否则将自己以master服务器启动;

2) keepalived 监控脚本,定时(频率:每秒一次)检测当前服务器是否获取集群VIP,如果获取集群VIP,则将本服务器上的redis服务器设置为master。同时将远端的其他redis服务器设置为slave;保证获取集群VIP的redis 服务器角色为master,其他的设置为slave。

3) keepalived 监控脚本,还会自动检测当前redis服务器是否正常,如果连续两次检测异常,则停掉本本机的keepalived服务,释放集群VIP,让去漂移到其他可以提供redis 服务的服务器上;

4)当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责同步数据;当 Master 挂掉,Slave 正常时, Slave接管服务,同时关闭主从复制功能;当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,于此同时Slave等待Master同步数据完成之后,恢复Slave身份。然后依次循环。

 

实施步骤:

----创建专用用户

useradd -g develop redisadmin   
echo Hisun@1125|passwd --stdin redisadmin

说明:以下部署过程都是在root(或具备sudo权限的账号)账户下进行。

----安装配置redis

1.下载redis源码

cd

wget

2.安装redis

tar -zxvf redis-2.8.3.tar.gz

cd redis-2.8.3

#reds的安装可以不用执行configure

make

#测试

make test

####在速度较慢的机器上执行make test可能出现下列错误,无影响

#*** [err]: Test replication partial resync: no backlog in tests/integration/replication-psync.tcl

3.配置redis

#创建redis主目录

mkdir -p /usr/local/redis-2.8.3/{bin,conf,logs}

cp -a -R -p src/redis-server /usr/local/redis-2.8.3/bin/

cp -a -R -p src/redis-cli /usr/local/redis-2.8.3/bin/

cp -a -R -p src/redis-benchmark /usr/local/redis-2.8.3/bin/

cp -a -R -p src/redis-sentinel /usr/local/redis-2.8.3/bin/

cp -a -R -p src/redis-check-dump /usr/local/redis-2.8.3/bin/

cp -a -R -p src/redis-check-aof /usr/local/redis-2.8.3/bin/

#创建redis启动脚本

vi /usr/local/redis-2.8.3/redis-start.sh

####以下为master上的配置,slave上的配置只需要修改对应的LOCALIP和REMOTEIP即可。

#!/bin/bash REDISPATH=/usr/local/redis-2.8.3 REDISCLI=$REDISPATH/bin/redis-cli LOGFILE=$REDISPATH/logs/redis-state.log LOCALIP=192.168.1.218 REMOTEIP=192.168.1.219 REMOTEREDISROLE=`$REDISCLI -h $REMOTEIP info | grep "role"` if grep "role:master" start as slave $REDISPATH/bin/redis-server $REDISPATH/conf/redis_slave.conf if [ "$?" == "0" ];then echo "[INFO]`date +%F/%H:%M:%S` :$LOCALIP start as slave successful." >> $LOGFILE else echo "[ERROR]`date +%F/%H:%M:%S` :$LOCALIP start as slave error." >> $LOGFILE fi else #start as master $REDISPATH/bin/redis-server $REDISPATH/conf/redis_master.conf if [ "$?" == "0" ];then echo "[INFO]`date +%F/%H:%M:%S` :$LOCALIP start as master successful." >> $LOGFILE else echo "[ERROR]`date +%F/%H:%M:%S` :$LOCALIP start as master error." >> $LOGFILE fi fi


#创建redis关闭脚本

vi /usr/local/redis-2.8.3/redis-stop.sh

####以下为master上的配置,slave上的配置相同。

#!/bin/bash REDISPATH=/usr/local/redis-2.8.3 LOGFILE=$REDISPATH/logs/redis-state.log kill -9 `ps -ef|grep '/bin/redis-server'|grep -v grep|awk '{print $2}'` if [ "$?" == "0" ];then echo "[INFO]`date +%F/%H:%M:%S` :redis shutdown completed!" >> $LOGFILE else echo "[ERROR]`date +%F/%H:%M:%S` :redis is not started." >> $LOGFILE fi



#创建redis配置文件

cp -a -R -p redis.conf /usr/local/redis-2.8.3/conf/redis_master.conf

cp -a -R -p redis.conf /usr/local/redis-2.8.3/conf/redis_slave.conf

#修改redis_master.conf对应配置项:

####192.168.1.218主服务器redis_master.conf对应配置项###### #daemonize no daemonize yes #bind 127.0.0.1 bind 192.168.1.218 logfile "/usr/local/redis-2.8.3/logs/redis.log" #其他配置依据实际生产环境修改 ######################################################## ####192.168.1.219从服务器redis_master.conf对应配置项###### #daemonize no daemonize yes #bind 127.0.0.1 bind 192.168.1.219 logfile "/usr/local/redis-2.8.3/logs/redis.log" #其他配置依据实际生产环境修改 ########################################################

#修改redis_slave.conf对应配置项:

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn