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