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

[经验分享] Redis双机热备(keepalived实现)

[复制链接]

尚未签到

发表于 2016-12-19 07:54:55 | 显示全部楼层 |阅读模式
  一 :场景:
  server1:192.168.1.142  redis,keepalived
  server2: 192.168.1.143  redis,keepalived
  VIP:192.168.1.42
  二: 目标
  用户只要访问通过集群VIP访问redis服务。要求这个架构在服务端保证HA
  三:原理
  两个redis server主从备份。提供redis 服务HA;
  两个keepalived 服务主从备份,提供VIP 服务的HA;
  1)每台redis server分别有主,从两个配置文件(redis.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 服务的服务器上;
  四:redis 安装配置
  1. redis的安装目录
  # /usr/local/redis-2.8.3
  2:redis 启动脚本配置

#!/bin/bash
REDISPATH=/usr/local/redis-2.8.3
REDISCLI=$REDISPATH/bin/redis-cli
LOGFILE=$REDISPATH/logs/redis-state.log
LOCALIP=192.168.1.142
REMOTEIP=192.168.1.152

REMOTEREDISROLE=`$REDISCLI -h $REMOTEIP info | grep "role"`
if grep "role:master" <<< $REMOTEREDISROLE ; then
#start as slave
echo "slave" >> $LOGFILE
$REDISPATH/bin/redis-server $REDISPATH/conf/redis_slave.conf
else
#start as master
echo "master" >> $LOGFILE
$REDISPATH/bin/redis-server $REDISPATH/conf/redis.conf
fi

  这里是142的配置,另外一台服务器只要修改IP地址,其他不变

LOCALIP=192.168.1.152
REMOTEIP=192.168.1.142

  3:redis 配置文件,按照正常的主从配置。
  五: keepalived安装配置
  1.  keepalived的安装目录
  # /usr/local/keepalived-1.2.9
  2. keepalived.conf 配置

! Configuration File for keepalived
vrrp_script chk_redis {
script "/usr/local/keepalived-1.2.9/etc/keepalived/chk_redis.sh"
interval 3
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 2
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.42
}
track_script {
chk_redis
}
}
  3:chk_redis.sh 监控脚本配置

#!/bin/bash
REDISPATH=/usr/local/redis-2.8.3
REDISCLI=$REDISPATH/bin/redis-cli
LOGFILE=$REDISPATH/logs/redis-state.log
LOCALIP=192.168.1.152
REMOTEIP=192.168.1.142
VIP=192.168.1.42
VIPALIVE=`ip a | grep "$VIP"`
if [ "$VIPALIVE" == "" ]; then
echo "[info]:"`date`" keepalived server is pengding or stop" >> $LOGFILE
else
echo "bbb" >> $LOGFILE
#check local service is running
if [ "`$REDISCLI PING`" == "PONG" ]; then
# check local redis server role.
REDISROLE=`$REDISCLI info | grep "role"`
if grep "role:slave" <<< $REDISROLE ; then
#change local redis server as master
echo "[info1]:"`date`" Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
#change remoting redis server as slave
REMOTEREDISROLE=`$REDISCLI -h $REMOTEIP info | grep "role"`
if grep "role:master" <<< $REMOTEREDISROLE ; then
echo "[info2]:"`date`" Run remote server SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h $REMOTEIP SLAVEOF $LOCALIP 6379 >> $LOGFILE  2>&1
fi
else
REMOTEREDISROLE=`$REDISCLI -h $REMOTEIP info | grep "role"`
if grep "role:master" <<< $REMOTEREDISROLE ; then
echo "[info3]:"`date`" Run remote server SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h $REMOTEIP SLAVEOF $LOCALIP 6379 >> $LOGFILE  2>&1
fi
fi
else
echo "[warn]:"`date`"  redis server($LOCALIP) is not health..." >> $LOGFILE
sleep 1
if [ "`$REDISCLI PING`" != "PONG" ]; then
echo "[error]:"`date`"  redis server($LOCALIP) will be stop..." >> $LOGFILE
service keepalived stop
fi
fi
fi
  这里是152的配置,另外一台服务器只要修改IP地址,其他不变。如上代码,这里不贴出来了。
  六: 测试
  只要任何一台keepalived正常,就可以提供vip服务。 redis的master会随着vip的漂移而改变,谁获得了vip,谁就具有redis 的master角色,其他都会置为slave角色

运维网声明 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-316113-1-1.html 上篇帖子: [转] Redis启动多端口、运行多实例 下篇帖子: 10.redis支持5种数据类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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