写一个keepalived中的redis_backup.sh脚本
时间: 2024-02-21 07:01:30 浏览: 82
下面是一个简单的redis_backup.sh脚本示例,用于将备份好的redis数据同步到备用服务器中:
```bash
#!/bin/bash
# 备份目录
BACKUP_DIR="/var/redis/backups"
# 备份文件名
BACKUP_FILE="$(ls -t $BACKUP_DIR | head -n1)"
# rsync命令
RSYNC="/usr/bin/rsync"
# 备用服务器地址
BACKUP_SERVER="192.168.1.2"
# 备用服务器用户名
BACKUP_USER="user"
# 备用服务器备份目录
BACKUP_DEST="/var/redis/backups"
# 同步备份文件到备用服务器
$RSYNC -avz -e ssh $BACKUP_DIR/$BACKUP_FILE $BACKUP_USER@$BACKUP_SERVER:$BACKUP_DEST
```
在使用该脚本时,需要注意以下几点:
1. 脚本需要在主服务器上执行,确保rsync命令可用,并且已经安装了ssh。
2. 脚本需要有执行权限,可以使用chmod命令添加执行权限。
3. 在keepalived的配置文件中,需要指定redis_backup.sh脚本的路径,并将备份目录设置为共享目录,以便备用服务器可以访问该目录。
4. 在备用服务器上,需要创建与主服务器相同的备份目录,并且需要确保备用服务器的ssh公钥已经添加到主服务器的authorized_keys文件中,以便主服务器可以通过ssh免密登录备用服务器。
相关问题
写一个keepalived中的redis_back.sh脚本
下面是一个简单的redis_back.sh脚本示例,用于备份redis数据库到指定目录:
```bash
#!/bin/bash
# 备份目录
BACKUP_DIR="/var/redis/backups"
# 备份文件名
BACKUP_FILE="redis_backup_$(date +%Y%m%d%H%M%S).rdb"
# redis-cli命令
REDIS_CLI="/usr/bin/redis-cli"
# redis服务器地址
REDIS_HOST="127.0.0.1"
# redis服务器端口
REDIS_PORT="6379"
# 执行BGSAVE命令备份redis数据库
$REDIS_CLI -h $REDIS_HOST -p $REDIS_PORT BGSAVE
# 等待BGSAVE命令执行完成
while [ $($REDIS_CLI -h $REDIS_HOST -p $REDIS_PORT lastsave | awk '{print $1}') -lt $($REDIS_CLI -h $REDIS_HOST -p $REDIS_PORT info persistence | grep rdb_last_save_time | awk -F: '{print $2}') ]
do
sleep 1
done
# 检查备份目录是否存在,如果不存在则创建
if [ ! -d $BACKUP_DIR ]; then
mkdir -p $BACKUP_DIR
fi
# 备份文件复制到备份目录
cp /var/lib/redis/dump.rdb $BACKUP_DIR/$BACKUP_FILE
# 删除过期的备份文件
find $BACKUP_DIR -type f -mtime +7 -delete
```
在使用该脚本时,需要注意以下几点:
1. 脚本需要在redis服务器上执行,确保redis-cli命令可用。
2. 脚本需要有执行权限,可以使用chmod命令添加执行权限。
3. 在keepalived的配置文件中,需要指定redis_back.sh脚本的路径,并将备份目录设置为共享目录,以便备用服务器可以访问该目录。
keepkived中的redis_master.sh脚本配置
好的,针对您的问题,我可以为您提供如下 redis_master.sh 脚本配置:
```
#!/bin/bash
# redis_master.sh: redis master failover script for keepalived
REDIS_CONF="/etc/redis/redis.conf"
REDIS_CLI="/usr/local/bin/redis-cli"
REDIS_PID=`cat /var/run/redis.pid`
# promote the slave as the new master
promote_new_master() {
# get the IP address of the slave that will be promoted
new_master_ip=$(/sbin/ip addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
# promote the slave
$REDIS_CLI SLAVEOF NO ONE
# update the redis configuration file to reflect the new master
sed -i "s/^\(slaveof\).*/\1 $new_master_ip 6379/" $REDIS_CONF
# restart redis
/etc/init.d/redis-server restart
}
# check if redis master is running
if [ -z "$REDIS_PID" ]; then
# redis master is not running, promote the slave
promote_new_master
else
# redis master is running, check if it is responding
redis_status=`$REDIS_CLI PING`
if [ "$redis_status" != "PONG" ]; then
# redis is not responding, promote the slave
promote_new_master
fi
fi
```
这是用于 Redis 双主模式下 keepalived 自动切换的脚本,当 keepalived 检测到 master 节点宕机后,会执行该脚本将 slave 节点提升为新的 master 节点。
该脚本的作用是检测当前 Redis 是否处于 master 节点状态,如果是,则检测 Redis 是否能够正常响应,如果不能,则将 slave 节点提升为新的 master 节点。如果 Redis 不处于 master 节点状态,则直接将 slave 节点提升为新的 master 节点。
需要注意的是,该脚本需要在 Redis 的 master 节点上运行,同时需要配置 keepalived 的 notify_master 和 notify_backup 选项,以便在 Redis 切换时自动执行该脚本。
阅读全文