设为首页 收藏本站
查看: 1117|回复: 0

[经验分享] 我的REDIS主备部署方案

[复制链接]

尚未签到

发表于 2015-7-20 11:51:49 | 显示全部楼层 |阅读模式
redis主备部署方案
  Redis部署方式采用主备的方式,通过keepalived来对外提供虚IP,并实现主备自动切换功能。
  主实例A:192.168.20.30
  备实例B:192.168.20.232
  虚IP:192.168.20.110
  正常工作时,虚IP在主实例A上,主实例A上的数据自动同步到备实例B上,当主实例A挂掉之后,备实例B将自动接管虚IP,并将redis转换为主模式,待原主实例A恢复后,A将自动切换成备模式,从B上同步数据,主备角色互换,实现融灾备份。
  
  安装部署步骤如下:

  • 1.       安装keepalived
wget http://www.keepalived.org/software/keepalived-1.2.6.tar.gz

tar zxvf keepalived-1.2.6.tar.gz

cd keepalived-1.2.6

./configure

如果报错

  configure: error:
  !!! OpenSSL is not properly installed on your system. !!!
  !!! Can not include OpenSSL headers files.
  解决办法:
  yum -y install openssl-devel
  yum -y install popt-devel
  ln -s /usr/src/kernels/2.6.32-220.el6.x86_64/ /usr/src/linux
  
  
  ./configure
  make
  make install
  
  cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
  cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
  cp /usr/local/sbin/keepalived /usr/sbin/
  mkdir /etc/keepalived
  添加keepalived的配置项:
  vi /etc/keepalived/keepalived.conf
global_defs {

   router_id LVS_DEVEL

}

vrrp_script Monitor_Redis {

script "/home/bbcv/redis/redis_keepalive.sh"

interval 3 #每3秒执行一次

weight 2

}

# VIP1

vrrp_instance VI_1 {

    state BACKUP           #主备服务器都设置成BACKUP

    interface eth0

    virtual_router_id 55

    priority 100     # 备份服务上将100改为90

    advert_int 1    #检查间隔

    nopreempt     #设置为不抢占,注意这个配置只能设置在state为BACKUP的主机上,而且这个主机的priority必须比另外一台高

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    notify_master /home/bbcv/redis/redis_master.sh

    notify_backup /home/bbcv/redis/redis_backup.sh

    track_script {

        Monitor_Redis #(调用redis进程检测脚本)

    }

    virtual_ipaddress {

        192.168.20.110

        #(如果有多个VIP,继续换行填写.)

    }

}

  启动keepalived
  service keepalived start

  • 2.       redis_keepalive.sh脚本
  该脚本主要实现对redis进程进行监控,当检测到redis进程挂掉时,自动停止keepalived进程,使虚IP进行漂移
  ²  注意添加该脚本的可执行权限!
  chmod +x redis_keepalive.sh
#!/bin/bash

time=$(date '+%Y-%m-%d %H:%M:%S' )

#redis部署路径

redispath=/home/bbcv/redis

#redis-cli部署路径

rediscli=$redispath/redis-2.0.0-rc4/redis-cli

if [ ! -d "logs" ]; then

        mkdir $redispath/logs

fi

logfile=$redispath/logs/redis-state.log

oldfile=$logfile'.'$(date +%Y-%m-%d --date='30 days ago')

yesterdayfile=$logfile'.'$(date +%Y-%m-%d --date='1 days ago')

#把昨天的日志重命名

if [ -f $yesterdayfile ]

then

        echo "OK"

else

        mv $logfile $yesterdayfile >> $logfile 2>&1

        echo "$time [$yesterdayfile] Move yesterdayfile Success!" >> $logfile

fi

#删除老的日志文件

if [ -f $oldfile ]

then

        rm -f $oldfile >> $logfile 2>&1

        echo "$time [$oldfile] Delete Old File Success!" >> $logfile

else

        echo "no old file"

fi

#检测redis端口是否正常

status=`$rediscli -h 127.0.0.1 -p 6379 info|grep role|awk -F ":" '{print $2}'`

$rediscli -h 127.0.0.1 -p 6379 info > /dev/null

if [ $? -eq 0 ]; then

        echo "$time redis server is OK" >>$logfile

        echo 目前状态为:$status >>$logfile

else

        echo "$time no redis service found!" >>$logfile

        sleep 2

        # try to found it again

        $rediscli -h 127.0.0.1 -p 6379 info > /dev/null

        if [ $? -eq 0 ]; then

                echo "$time redis server is OK" >>$logfile

                echo 目前状态为:$status >>$logfile

                #exit 0

        else

                echo "$time redis server error" >>$logfile

                #stop keepalived

                /etc/init.d/keepalived stop

                echo "$time stop keepalived" >>$logfile

        fi

fi


  • 3.       redis_master.sh脚本
  该脚本主要实现当keepalived切换到master时,执行slaveof no one语句把redis的端口转换为主模式
  ²  注意添加该脚本的可执行权限!
  chmod +x redis_master.sh
#!/bin/sh

#本机IP地址

localip=127.0.0.1

#另一台服务器的地址

backip=192.168.20.232

#redis端口号

port="6379 9998 11111 14948"


time=$(date '+%Y-%m-%d %H:%M:%S' )

#redis部署路径

redispath=/home/bbcv/redis

#redis-cli部署路径

rediscli=$redispath/redis-2.0.0-rc4/redis-cli

#日志文件目录

logfile=$redispath/logs/redis-state.log

for p in $port

do

{

        echo "$time redis $p端口切换成主端口" >>$logfile

        $rediscli -h $localip -p $p slaveof no one >>$logfile 2>&1

        sleep 1

}

done


  • 4.       redis_backup.sh
  该脚本主要实现当keepalived切换到master时,执行slaveof 主redisIP 端口 语句,把redis的端口转换为备模式,并同步主redis的数据
  ²  注意添加该脚本的可执行权限!
  chmod +x redis_backup.sh
#!/bin/sh

#本机IP地址

localip=127.0.0.1

#另一台服务器的地址

backip=192.168.20.232

#redis端口号

port="6379 9998 11111 14948"


time=$(date '+%Y-%m-%d %H:%M:%S' )

#redis部署路径

redispath=/home/bbcv/redis

#redis-cli部署路径

rediscli=$redispath/redis-2.0.0-rc4/redis-cli

#日志文件目录

logfile=$redispath/logs/redis-state.log

for p in $port

do

{

        echo "$time redis $p端口切换成$backip的备端口" >>$logfile

        $rediscli -h $localip -p $p slaveof $backip $p  >>$logfile 2>&1

        sleep 1

}

done


  • 5.       安装redis
1.新建文件夹,如mkdir redis

2.将redis-2.2.13.tar.gz拷入其中

3.解压并进入主目录

4.make

5.make install(Ubuntu上需要sudo执行)

6.修改配置文件redis.conf

修改如下:

daemonize no 改为 daemonize yes

取消注释:

syslog-enabled no (改为syslog-enabled yes )

syslog-facility local0

已将修改后的redis.conf文件放入附件,不同需求还需再修改配置文件(如修改端口等)

7.在执行redis-server redis.conf启动时,可能会报如下错误:

Can't chdir to '/var/db/redis': No such file or directory

需要手动创建'/var/db/redis'文件夹

# WARNING overcommit_memory is set to 0! Background save may fail under low memory condition

需要执行 sysctl vm.overcommit_memory=1 修改内核参数

8.再次执行redis-server redis.conf可成功启动redis


  • 6.       测试
1.查看当前redis是主还是备

/home/bbcv/redis/redis-2.0.0-rc4/redis-cli -h 127.0.0.1 -p 6379 info

DSC0000.jpg

2.在主redisA上新增一条数据,查看备redisB是否同步该数据

/home/bbcv/redis/redis-2.0.0-rc4/redis-cli -h 127.0.0.1 -p 6379

DSC0001.jpg

3.停止主redisA,查看虚IP是否切换到备redisB服务器,并查看备redisB服务器是否切换成主状态

ip a查看虚IP是否在本机上

DSC0002.jpg

4.恢复redisA,查看redisA是否从redisB中同步数据


百度文库: http://wenku.baidu.com/view/511754254b73f242336c5f72.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-88682-1-1.html 上篇帖子: 深入redis内部--内存管理 下篇帖子: REDIS 主从复制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表