redis+keepalived 高可用方案

本文介绍如何通过Keepalived实现Redis的高可用性集群部署。详细步骤包括安装Keepalived、配置主从节点、编写健康检查及状态切换脚本,并安装与配置Redis。此外还提供了验证方法确保VIP漂移正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因公司业务需求需搭建redis 高可用方案

两台主机

10.21.10.43  master 

10.21.10.44 slave   

两台机器分别安装keeplived     

yum install keepalived

在master(110.21.10.43)上修改keepalived的住配置文件

vim /etc/keepalived/keepalived.conf

修改内容如下

! Configuration File for keepalived
global_defs {
   router_id redis100
}
vrrp_script chk_redis 

     script "/etc/keepalived/scripts/redis_check.sh 10.21.12.43 6379" 
     interval 2 
     timeout 2
     fall 3
}
vrrp_instance redis {
     state MASTER 
     interface bond1  
     virtual_router_id 50 
     priority  150       
     nopreempt # no seize,must add
     advert_int 1
authentication {   #all node must same
         auth_type PASS
         auth_pass 1111
    } 
    virtual_ipaddress {  
      10.21.10.241/24 dev bond1 label eth0
    }
    track_script { 
         chk_redis 
    } 
      notify_fault /etc/keepalived/scripts/redis_fault.sh 
      notify_stop /etc/keepalived/scripts/redis_stop.sh 
}

 

在slave(110.21.10.44)上修改keepalived的住配置文件

 

! Configuration File for keepalived
global_defs {
   router_id redis101
}
vrrp_script chk_redis
{
     script "/etc/keepalived/scripts/
redis_check.sh 10.21.12.44 6379"
     interval 2
     timeout 2
     fall 3
}
vrrp_instance redis {
    state BACKUP
    interface bond1
    virtual_router_id 50
    priority  100
    advert_int 1
authentication {   #all node must same
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
   
 10.21.10.241/24 dev bond1 label eth0 #10.21.10.241是vip 地址 bond1 是本机网卡名 eth0 是虚出来的
    }
    track_script {
         chk_redis
    }
    notify_master "/etc/keepalived/scripts/redis_master.sh 10.21.10.43 6379"
    notify_backup "/etc/keepalived/scripts/redis_backup.sh 10.21.10.43 6379"
    notify_fault /etc/keepalived/scripts/redis_fault.sh
    notify_stop /etc/keepalived/scripts/redis_stop.sh
}

然后编写 脚本 在/etc/keepalived/scripts 路径下 创建 redis_check.sh redis_fault.sh redis_stop.sh 这三个脚本 和keepalived 调用的脚本一致

redis_check.sh 脚本内容如下

#!/bin/bash
ALIVE=`/usr/local/redis/bin/redis-cli -h $1 -p $2 -a 'redis 密码' PING`
LOGFILE="/var/log/keepalived-redis-check.log"
if [ "$ALIVE"x = "PONG"x ]; then :
    exit 0
else
    date >> $LOGFILE
    echo "Failed:redis-cli -h $1 -p $2 PING $ALIVE " >> $LOGFILE 2>&1
        /etc/init.d/keepalived stop
    exit 1
fi

redis_fault.sh 脚本

#!/bin/bash 
LOGFILE=/var/log/keepalived-redis-state.log 
echo "[fault]" >> $LOGFILE
date >> $LOGFILE 

redis_stop.sh 脚本

#!/bin/bash 
LOGFILE=/var/log/keepalived-redis-state.log 
echo "[stop]" >> $LOGFILE 
date >> $LOGFILE 

注意区别 slave 的配置文件比master 多两条执行脚本命令

 

然后编写slave 使用脚本 在/etc/keepalived/scripts 路径下 创建 redis_master.sh redis_back.sh 和 redis_check.sh redis_fault.sh redis_stop.sh 这三个脚本 和keepalived 调用的脚本一致

比master 多两个脚本

redis_master.sh 脚本内容

#!/bin/bash 
REDISCLI="/usr/local/redis/bin/redis-cli -h $1 -p $2" 
LOGFILE="/var/log/keepalived-redis-state.log" 
echo "[master]" >> $LOGFILE 
date >> $LOGFILE 
echo "Being master...." >> $LOGFILE 2>&1 
echo "Run SLAVEOF cmd ... " >> $LOGFILE 
#$REDISCLI SLAVEOF $1 $2 >> $LOGFILE  2>&1
#echo "SLAVEOF $1 cmd can't excute ... " >> $LOGFILE 
#sleep 10 ##delay 15 s wait data sync exchange role
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1 

 

redis_back.sh 数据同步脚本

#!/bin/bash 
REDISCLI="/usr/local/redis/bin/redis-cli" 
LOGFILE="/var/log/keepalived-redis-state.log" 
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -a '
redis密码' SLAVEOF $1 $2 >> $LOGFILE 2>&1
# echo "Being slave...." >> $LOGFILE 2>&1
sleep 15 #delay 15 s wait data sync exchange role

 

redis_check.sh 脚本内容如下

#!/bin/bash
ALIVE=`/usr/local/redis/bin/redis-cli -h $1 -p $2 -a 'redis 密码' PING`
LOGFILE="/var/log/keepalived-redis-check.log"
if [ "$ALIVE"x = "PONG"x ]; then :
    exit 0
else
    date >> $LOGFILE
    echo "Failed:redis-cli -h $1 -p $2 PING $ALIVE " >> $LOGFILE 2>&1
        /etc/init.d/keepalived stop
    exit 1
fi

redis_fault.sh 脚本

#!/bin/bash 
LOGFILE=/var/log/keepalived-redis-state.log 
echo "[fault]" >> $LOGFILE
date >> $LOGFILE 

redis_stop.sh 脚本

#!/bin/bash 
LOGFILE=/var/log/keepalived-redis-state.log 
echo "[stop]" >> $LOGFILE 
date >> $LOGFILE 

 

给这些脚本执行权限

 

--------------------------------------------------------------------------------------------------------------------------------

二 安装 redis

具体安装不在这讲述 百度很多

修改redis配置文件

添加一下配置

daemonize yes

masterauth reidspass(redis住库密码)

 

-----------------------------------------------------------

 

三 验证

 

先在master 查看vip 是不是在生效

ip addr

吧 master 上 redis 停掉 查看slave vip 已经飘到slave

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值