docker部暑redis 6.2.3哨兵(支持amd64和arm64),master slave sentinel使用acl认证,备份

docker部暑redis 6.2.3(支持amd64和arm64),使用acl认证

1、master

mkdir  /data/redis_master/
touch /data/redis_master//users.aclfile
cat > /data/redis_master/redis.conf << 'EOF'
port 6379
appendonly yes
dir /data/redis
maxmemory 2G
timeout 3600
#masterauth Redis123456
#requirepass Redis123456
aclfile "/data/redis/users.aclfile"
EOF

cat > /data/redis_master/startup.sh << 'EOF'
docker run -d \
--restart=always \
--name redis_master \
-v /etc/localtime:/etc/localtime \
-v /data/redis_master:/data/redis \
--network host  \
redis:6.2.3 \
redis-server /data/redis/redis.conf
EOF

bash /data/redis_master/startup.sh
#进入redis_master容器,acl授权
sleep 5
docker exec -i redis_master redis-cli -p 6379 << 'EOF'
ACL SETUSER default on >Redis123456 +@all
ACL SETUSER xbzeng on >Redis123456 +@all
ACL save
EOF

2、slave

mkdir /data/redis_slave
touch /data/redis_slave/users.aclfile
cat > /data/redis_slave/redis.conf << 'EOF'
port 16379
appendonly yes
dir /data/redis
maxmemory 2G
timeout 3600
masterauth Redis123456
#requirepass Redis123456
slaveof 192.168.11.192 6379
aclfile "/data/redis/users.aclfile"
EOF

cat > /data/redis_slave/startup.sh << 'EOF'
docker run -d \
--restart=always \
--name redis_slave \
-v /etc/localtime:/etc/localtime \
-v /data/redis_slave:/data/redis \
--network host  \
redis:6.2.3 \
redis-server /data/redis/redis.conf
EOF

bash /data/redis_slave/startup.sh
sleep 5
docker exec -i redis_slave redis-cli -p 16379 << 'EOF'
ACL SETUSER default on >Redis123456 +@all
ACL SETUSER xbzeng on >Redis123456 +@all
ACL save
EOF

3、sentinel

mkdir /data/redis_sentinel
touch /data/redis_sentinel/users.aclfile
cat > /data/redis_sentinel/redis.conf << 'EOF'
port 26379
sentinel monitor redis 192.168.11.192 6379 2
sentinel down-after-milliseconds redis 60000
sentinel failover-timeout redis 180000
sentinel parallel-syncs redis 1
#sentinel auth-pass redis Redis123456
aclfile "/data/redis/users.aclfile"
EOF


cat > /data/redis_sentinel/startup.sh << 'EOF'
docker run -d \
--restart=always \
--name redis_sentinel \
-v /etc/localtime:/etc/localtime \
-v /data/redis_sentinel:/data/redis \
--network host  \
redis:6.2.3 \
redis-server /data/redis/redis.conf --sentinel
EOF
bash /data/redis_sentinel/startup.sh

sleep 5
docker exec -i redis_sentinel redis-cli -p 26379 << 'EOF'
ACL SETUSER default on >Redis123456 +@all
ACL SETUSER xbzeng on >Redis123456 +@all
ACL save
EOF

4.phpredisadmin 管理工具

mkdir /data/redisadmin
cat > /data/redisadmin/startup.sh << 'EOF'
docker run -itd --restart=always \
--name redisadmin \
-e REDIS_1_HOST=192.168.11.192 \
-e REDIS_1_NAME=redisadmin01 \
-e REDIS_1_PORT=6379 \
-e REDIS_1_AUTH=Redis123456 \
-e ADMIN_USER=redis \
-e ADMIN_PASS=redis@123 \
-p 10081:80 \
-v /etc/localtime:/etc/localtime \
erikdubbelboer/phpredisadmin:latest
EOF
bash /data/redisadmin/startup.sh

5、备份与恢复

方法一:redis-dump
mkdir /data/redis_backup -p
cat > /data/redis_backup/Dockerfile << 'EOF'
FROM redis:6.2.3
# 导出
# redis-dump -u localhost:6379  > ./redis_6379.json
# 导入
# cat ./redis_6379.json | redis-load -u localhost:6379

RUN echo  "deb http://mirrors.aliyun.com/debian buster main" >/etc/apt/sources.list; echo  "deb http://mirrors.aliyun.com/debian buster-updates main" >> /etc/apt/sources.list

RUN apt-get update && apt-get install ruby-dev -y \
    && apt-get install make -y \
    && apt-get install procps -y \
    && apt-get install gcc -y \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# RUN gem sources -a http://ruby.taobao.org/
RUN gem install redis-dump -V
EOF

#创建redis_dump镜像
cd /data/redis_backup
docker build --network host -t redis-dump ./
  • 备份脚本(redis_dump)
cat > /data/redis_backup/backup.sh << 'EOF'
#!/bin/bash
#########mysql backup####################
db_user="xbzeng" 
db_passwd="Redis123456" 
db_host="192.168.11.192" 
db_port="6379"
REDIS_DUMP="docker run -it --rm --network host redis-dump  redis-dump " 

##########code & res backup####################
backup_dir="/data/redis_backup/auto_backup"
time="$(date +"%d-%m-%Y")" 
MKDIR="/bin/mkdir" 
RM="/bin/rm" 
MV="/bin/mv" 
GZIP="/bin/gzip" 

# the directory for story the newest backup 
test ! -d "$backup_dir/backup.0/" && $MKDIR -p "$backup_dir/backup.0/" 

# check the directory for store backup is writeable 
test ! -w $backup_dir && echo "Error: $backup_dir is un-writeable." && exit 0 

#备份指定库
$REDIS_DUMP -u $db_host:$db_port -a $db_passwd | $GZIP  > "$backup_dir/backup.0/redis_$time.gz"   

####滚动清理历史备份
test -d "$backup_dir/backup.5/" && $RM -rf "$backup_dir/backup.5" 
for int in 4 3 2 1 0 
do 
if(test -d "$backup_dir"/backup."$int") 
then 
next_int=`expr $int + 1` 
$MV "$backup_dir"/backup."$int" "$backup_dir"/backup."$next_int" 
fi 
done 

exit 0;
EOF

#crontab自动备份
echo -e '#redis_dump备份\n0 4 * * * bash /data/redis_backup/backup.sh'   >> /var/spool/cron/root 
  • 恢复脚本(redis_dump)
    如果要全部恢复,请清空redis数据库
cd /data/redis_backup/auto_backup/backup.1
zcat redis_13-08-2021.gz |docker run -i --rm --network host redis-dump  redis-load -u 192.168.11.192:6379 -a Redis123456 

方法二:备份aof和rbd

  • 备份脚本(redis_dump)
cat > /data/redis_backup/backup_file.sh << 'EOF'
#!/bin/bash
#########backup####################
db_user="xbzeng"
db_passwd="Redis123456"
db_host="192.168.11.192"
db_port="6379"
REDIS="docker exec -it redis_master redis-cli "

##########code & res backup####################
aof_rbd_dir="/data/redis_master"
backup_dir="/data/redis_backup/auto_backup"
time="$(date +"%d-%m-%Y")"
MKDIR="/bin/mkdir"
RM="/bin/rm"
MV="/bin/mv"
GZIP="/bin/gzip"

# the directory for story the newest backup
test ! -d "$backup_dir/backup.0/" && $MKDIR -p "$backup_dir/backup.0/"

# check the directory for store backup is writeable
test ! -w $backup_dir && echo "Error: $backup_dir is un-writeable." && exit 0

#备份指定库
$REDIS -u redis://$db_host:$db_port -a $db_passwd bgsave

tar zcvf "$backup_dir/backup.0/redis_$time.gz" $aof_rbd_dir/*.rdb $aof_rbd_dir/*.aof

####滚动清理历史备份
test -d "$backup_dir/backup.5/" && $RM -rf "$backup_dir/backup.5"
for int in 4 3 2 1 0
do
if(test -d "$backup_dir"/backup."$int")
then
next_int=`expr $int + 1`
$MV "$backup_dir"/backup."$int" "$backup_dir"/backup."$next_int"
fi
done

exit 0;
EOF

#crontab自动备份
echo -e '#redis_dump备份\n0 4 * * * bash /data/redis_backup/backup_file.sh'   >> /var/spool/cron/root 
  • 恢复
    关闭redis,把aof和rdb文件放回原来的目录后启redis
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值