codecamp

Redis 持久化动态修改

其实相对于VIP的切换,动态修改持久化则是比较常见的一个需求,一般在一主多从多Sentinel的HA环境中,为了性能常常在Master上关闭持久化,而在Slave上开启持久化,但是如果发生切换就必须有人工干预才能实现这个功能。可以利用client-reconfig-script自动化该进程,无需人工守护,我们就以RDB的动态控制为例: Sentinel配置文件如下:

sentinel client-reconfig-script mymaster /redis/script/rdbctl.sh

rdbctl.sh源代码:

#!/bin/bash

_DEBUG="on"
DEBUGFILE="/smsred/redis-3.0.4/log/sentinel_failover.log"
MASTERIP=${6}
MASTERPORT=${7}
SLAVEIP=${4}
SLAVEPORT=${5}
MASK='24'
IFACE='bond0'
MYIP=$(ip -4 -o addr show dev ${IFACE}| grep -v secondary| awk '{split($4,a,"/");print a[1]}')


DEBUG () {
        if [ "$_DEBUG" = "on" ]; then
                echo `$@` >>  ${DEBUGFILE}
        fi
}



set -e
DEBUG date
DEBUG echo $@ 
DEBUG echo "===Begin Failover==="
#If Master

if [ ${MASTERIP} = ${MYIP} ]; then
       #Disable RDB
       redis-cli -h ${MYIP} -p ${MASTERPORT} -a c1m2b3c4 config set save ""
       DEBUG echo ${MYIP}
       DEBUG echo "Disable Master RDB:" ${MYIP} ${MASTERPORT}
        DEBUG echo "===End Failover==="
        exit 0

#Or Slave
else
        echo "test5" >> $DEBUGFILE
       redis-cli -h ${MYIP} -p ${SLAVEPORT} -a c1m2b3c4 config set save "900 1 300 10 60 100000000"
       DEBUG echo ${MYIP}
       DEBUG echo "Enable Slave RDB:" ${MYIP} ${SLAVEPORT}
        DEBUG echo "===End Failover==="
        exit 0
fi

exit 1

原理和VIP切换一节基本一致,不再赘述。


Redis 虚拟IP切换
Redis Sentinel最大连接数
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Redis 数据操作

Redis安全问题

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }