踩坑记录:本次docker部署redis原因是因为,前次部署时,没有指定redis.conf,没有挂载文件目录,导致数据没有持久化。另外,每次容器重启后,需要手动修改requirepass参数。为了,防止数据丢失,又能兼容到老的redis容器数据。实施本次迁移。
遇到问题
1、redis容器起不来。没有日志,没有报错。因为-d为后台启动,导致没有任何信息。想要查看运行后台,可以去掉-d
2、redis.conf文件不能实时同步更新。 因为vim等命令修改,导致文件的某个参数发生变化。采用chmod 666 redis.config 解决问题
3、dump.rdb复制到容器后,redis并没有同步到历史数据。原因为,redis持久化有两种模式,rdb和aof。其中,rdb为定期全量持久化,aof为增量式持久化。两种可以同时开启,优先aof。当开启aof后,rdb文件不生效。
redis image 版本 7.0.11
redis.conf 内容
#redis服务器配置
# 绑定IP地址
#解除本地限制 注释bind 127.0.0.1
bind 0.0.0.0
# 服务器端口号
port 6379
#配置密码,不要可以删掉
requirepass *******
#这个配置不要会和docker -d 命令 冲突
# 服务器运行模式,Redis以守护进程方式运行,默认为no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败,如果后面redis启动失败,就将这个注释掉
daemonize no
#当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定(自定义)
pidfile /usr/local/redis/run/redis6379.pid
#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 60
# 服务器系统默认配置参数影响 Redis 的应用
maxclients 10000
tcp-keepalive 300
#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合(分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改)
dir /data
dbfilename dump.rdb
rdbcompression yes
rdbchecksum yes
save 900 1
save 300 10
save 60 10000
# 按需求调整 Redis 线程数
tcp-backlog 511
# 设置数据库数量,这里设置为16个数据库
databases 16
# 启用 AOF, AOF常规配置
#appendonly yes
#appendfsync everysec
#no-appendfsync-on-rewrite no
#auto-aof-rewrite-percentage 100
#auto-aof-rewrite-min-size 64mb
# 慢查询阈值
slowlog-log-slower-than 10000
slowlog-max-len 128
# 是否记录系统日志,默认为yes
syslog-enabled yes
#指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel notice
# 日志输出文件,默认为stdout,也可以指定文件路径
logfile stdout
# 日志文件
logfile /data/server.log
# 系统内存调优参数
# 按需求设置
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
docker 运行容器命令
docker run -p 6379:6379 --name redis -v /usr/local/redis/redis.config:/etc/redis/redis.conf -v /usr/local/redis/data:/data -v /usr/local/redis/logs:/logs -d redis redis-server /etc/redis/redis.conf