redis报错整理(持续更新。。。)

报错1:

查看日志/var/log/redis/redis.log

843:M 19 Feb 17:26:29.097 * 1 changes in 900 seconds. Saving...

843:M 19 Feb 17:26:29.097 * Background saving started by pid 24809

24809:C 19 Feb 17:26:29.098 # Failed opening the RDB file nginx (in server root dir /etc/cron.d) for saving: Permission denied【无法打开用于保存的RDB文件nginx(在服务器根目录/etc/cron.d中):权限被拒绝】

843:M 19 Feb 17:26:29.198 # Background saving error

 

分析:

本公司用的阿里云的redis3.2.12版本,yum方式部署(因为没有引用irpm源,所以是低版本,引用irpm源可以部署最新版的redis);

默认用的是RDB持久化,根据redis规则会生成一个.rdb快照文件并写入磁盘

思路:

日志中rdb快照文件无法保存,并且提示权限问题,

在配置文件中查找rdb的名字和路径

vim /etc/redis.conf
 (237行) dbfilename dump.rdb    #数据库在做持久化时存储的文件名
 (247行) dir /var/lib/redis             #数据持久化文件存放的目录(如果目录不存在,需要手动创建),./表示当前目录

查看文件权限,redis用户没有写的权限

# ll /var/lib/redis/

total 12

-rw-r--r-- 1 redis redis  77 Feb 13 14:54 backup.db

-rw-r--r-- 1 redis redis 672 Feb 13 14:50 dump.rdb

-rw-r--r-- 1 redis redis 168 Feb 13 22:45 root

# ll /var/lib/

drwxr-x---  2 redis   redis   4096 Feb 13 22:45 redis

修改为777权限

 chmod  777  /var/lib/redis

#重新启动redis,解决

# systemctl restart redis

其他思路:

如果楼上的操作还没能解决问题,可以尝试关闭保护模式

 (80行) protected-mode no  #no为关闭保护模式,默认是开启的,因为我的默认就是开启的没法测试,只能就此作罢

有网友说配置的服务需要让systemctl能识别,就必须刷新配置,使其生效。【然而亲测,表示不执行systemctl daemon-reload命令;用systemctl restart redis是可以使修改的配置文件生效的,猜测:也许和redis版本和部署方式,操作系统有关吧】

$ systemctl daemon-reload

 

报错2:

# Error condition on socket for SYNC: Connection refused【同步套接字错误:连接被拒绝】

 * Connecting to MASTER 159.203.*.*:23128【连接到主机159.203.*.*:23128】

 * MASTER <-> SLAVE sync started【主同步<->从同步开始】

分析:连接被拒绝;有关因素【配置文件里的bind参数设置;】【表示以上错误第二次出现了】

查看bind参数,表示没问题

#查看配置文件,10.0.1.1为内网ip【bind的意思不是绑定外部服务器的IP,而是绑定本机可以接受访问的IP;这是linux的网络安全策略管理的】

vim /etc/redis.conf

62行  bind 10.0.1.1 127.0.0.1    #表示可以通过本机localhost和127.0.0.1和内网ip访问;在研发、测试环境可以考虑bind 0.0.0.0,线上生产环境建议绑定IP地址

因为是单机做的redis,做研发用的,访问redis也是通过内网访问,暂时不晓得为啥连接被拒。也许和以下告警有关系吧。

 

告警:

Running in standalone mode

 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.【警告:无法强制执行TCP backlog设置511,因为/proc/sys/net/core/somaxconn设置为较低的值128】

 # Server started, Redis version 3.2.12

 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.【“警告超限”内存设置为0!在内存不足的情况下,后台保存可能会失败。若要解决此问题,请将“vm.overcommit_memory=1”添加到/etc/sysctl.conf,然后重新启动或运行命令“sysctl vm.overcommit_memory=1”以使其生效。】

* DB loaded from disk: 0.000 seconds

 * The server is now ready to accept connections on port 6379

解决告警一;

临时解决:   $  echo 511 > /proc/sys/net/core/somaxconn

永久解决:  $ echo  "net.core.somaxconn= 1024" > /etc/sysctl.conf
                    $ sysctl -p       #使其生效

重启redis: $  systemctl restart redis

                   $  systemctl restart redis

解决告警二:

$  echo  "vm.overcommit_memory = 1"  > /etc/sysctl.conf

$ sysctl -p       #使其生效

重启redis: $  systemctl restart redis

                   $  systemctl restart redis

 

告警:


 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis.
To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot.
Redis must be restarted after THP is disabled.
【警告您的内核中启用了透明大页面(THP)支持。这将导致Redis的延迟和内存使用问题。要解决此问题,请以root用户身份运行命令“echo never>/sys/kernel/mm/transparent_hugepage/enabled”,并将其添加到/etc/rc.local中,以便在重新启动后保留设置。禁用THP后,必须重新启动Redis。】

查看该文件
# cat /sys/kernel/mm/transparent_hugepage/enabled 
[always] madvise never

添加
# echo never>/sys/kernel/mm/transparent_hugepage/enabled
# cat /sys/kernel/mm/transparent_hugepage/enabled 
always madvise [never]

并添加到/etc/rc.local
# cat /etc/rc.local
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled

报错复现:

 * 1 changes in 900 seconds. Saving...
* Background saving started by pid 11541
 # Failed opening the RDB file web (in server root dir /etc/cron.d) for saving: Permission denied
 # Background saving error

#进入库报错

127.0.0.1:6379> ping
(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
【(错误)missf Redis配置为保存RDB快照,但当前无法在磁盘上保留。可以修改数据集的命令被禁用。有关错误的详细信息,请检查Redis日志。】

 

#报错时在库里得到的信息
127.0.0.1:6379> info
# Server
redis_version:3.2.12
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:7897e7d0e13773f
redis_mode:standalone
os:Linux 3.10.0-957.5.1.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:20485
run_id:ebdd353964aa512e913fe692ddf4bb00b5a7c7a9
tcp_port:6379
uptime_in_seconds:80174
uptime_in_days:0
hz:10
lru_clock:5188297
executable:/usr/bin/redis-server
config_file:/etc/redis.conf

# Clients
connected_clients:1    #连接的客户机:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:812768    #已用内存:812768
used_memory_human:793.72K
used_memory_rss:3190784
used_memory_rss_human:3.04M
used_memory_peak:2298536    #已用内存峰值:2298536
used_memory_peak_human:2.19M
total_system_memory:16656289792
total_system_memory_human:15.51G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:3.93
mem_allocator:jemalloc-3.6.0

# Persistence
loading:0
rdb_changes_since_last_save:63
rdb_bgsave_in_progress:0
rdb_last_save_time:1582238527
rdb_last_bgsave_status:err
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

# Stats
total_connections_received:2132
total_commands_processed:18591
instantaneous_ops_per_sec:0
total_net_input_bytes:3345698
total_net_output_bytes:1744786
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:369
evicted_keys:0
keyspace_hits:1763
keyspace_misses:3070
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:144
migrate_cached_sockets:0

# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# CPU
used_cpu_sys:37.84
used_cpu_user:25.76
used_cpu_sys_children:0.26
used_cpu_user_children:0.40

# Cluster
cluster_enabled:0

# Keyspace
db0:keys=1,expires=0,avg_ttl=0

#发现的问题:连接池满了,dir的路径也不对

127.0.0.1:6379> config get dir
1) "dir"
2) "/etc/cron.d"

查看配置文件中路径

cat /etc/redis.conf 
dir /var/lib/redis

#修改
127.0.0.1:6379> config set dir /var/lib/redis
OK
127.0.0.1:6379> config get dir
1) "dir"
2) "/var/lib/redis"

#查看日志
 * RDB: 0 MB of memory used by copy-on-write
 * Background saving terminated with success

再次info查看信息
127.0.0.1:6379> info
# Server
redis_version:3.2.12
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:7897e7d0e13773f
redis_mode:standalone
os:Linux 3.10.0-957.5.1.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:20485
run_id:ebdd353964aa512e913fe692ddf4bb00b5a7c7a9
tcp_port:6379
uptime_in_seconds:88068
uptime_in_days:1
hz:10
lru_clock:5196191
executable:/usr/bin/redis-server
config_file:/etc/redis.conf

# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:812768
used_memory_human:793.72K
used_memory_rss:3059712
used_memory_rss_human:2.92M
used_memory_peak:2298536
used_memory_peak_human:2.19M
total_system_memory:16656289792
total_system_memory_human:15.51G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:3.76
mem_allocator:jemalloc-3.6.0

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1582251668
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

# Stats
total_connections_received:2136
total_commands_processed:18600
instantaneous_ops_per_sec:0
total_net_input_bytes:3345946
total_net_output_bytes:1761673
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:369
evicted_keys:0
keyspace_hits:1763
keyspace_misses:3070
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:203
migrate_cached_sockets:0

# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# CPU
used_cpu_sys:42.01
used_cpu_user:28.09
used_cpu_sys_children:0.37
used_cpu_user_children:0.63

# Cluster
cluster_enabled:0

# Keyspace
db0:keys=1,expires=0,avg_ttl=0

 

 对比前后的info
# diff v0 v2
14,15c14,15
< uptime_in_seconds:80174
< uptime_in_days:0
---
> uptime_in_seconds:88068
> uptime_in_days:1
17c17
< lru_clock:5188297
---
> lru_clock:5196191
30,31c30,31
< used_memory_rss:3190784
< used_memory_rss_human:3.04M
---
> used_memory_rss:3059712
> used_memory_rss_human:2.92M
41c41
< mem_fragmentation_ratio:3.93
---
> mem_fragmentation_ratio:3.76
46c46
< rdb_changes_since_last_save:63
---
> rdb_changes_since_last_save:0
48,49c48,49
< rdb_last_save_time:1582238527
< rdb_last_bgsave_status:err
---
> rdb_last_save_time:1582251668
> rdb_last_bgsave_status:ok
61,62c61,62
< total_connections_received:2132
< total_commands_processed:18591
---
> total_connections_received:2136
> total_commands_processed:18600
64,65c64,65
< total_net_input_bytes:3345698
< total_net_output_bytes:1744786
---
> total_net_input_bytes:3345946
> total_net_output_bytes:1761673
78c78
< latest_fork_usec:144
---
> latest_fork_usec:203
91,94c91,94
< used_cpu_sys:37.84
< used_cpu_user:25.76
< used_cpu_sys_children:0.26
< used_cpu_user_children:0.40
---
> used_cpu_sys:42.01
> used_cpu_user:28.09
> used_cpu_sys_children:0.37
> used_cpu_user_children:0.63

还找到另一种方法:

解决办法:
1)命令行修改
config set stop-writes-on-bgsave-error no
2)修改配置文件
vim redis.conf
stop-writes-on-bgsave-error 把后面的yes设置为no即可
#此办法需要重启redis

报错:


 10 changes in 300 seconds. Saving...
20485:M 20 Feb 12:20:20.071 * Background saving started by pid 30984
30984:C 20 Feb 12:20:20.075 * DB saved on disk
30984:C 20 Feb 12:20:20.076 * RDB: 0 MB of memory used by copy-on-write
20485:M 20 Feb 12:20:20.171 * Background saving terminated with success

分析:
因为保存太频繁,然后内存不够,程序会崩溃

rdb数据持久化和以下这些有关系
 200行 #   save ""
 201行
 202行 save 900 1    #900秒内改变1次key键就会保存
 203行 save 300 10   #300秒内改变10次key键就会保存
 204行 save 60 10000  #60秒内改变10000次key键就会保存

# client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
 

其他思路:关闭持久化

#但如果关闭持久化,服务器关机后,redis的数据会被全部清空;所以你需要虚拟内存Swap(交换分区);.


补充:

亲测发现使用命令redis-server /etc/redis.congf 和 systemctl restart redis是不同的,用redis-server /etc/redis.congf启动时,用systemctl status redsi命令是查不到的,可以在日志查看是否启动成功或者;或者直接用命令redis-cli看是否可以进入redis库;或者查端口。

在阿里云服务器centos7.6操作系统中以yum方式部署的redis-3.2.12,在用配置文件启动时不用加&符号;

记得之前在centos6中的命令: redis-server /etc/redis.conf &

现在在在阿里云服务器centos7.6的命令:redis-server /etc/redis.conf

参考和推荐文章

redis错误排查  排错推荐

Redis详解(六)------ RDB 持久化  查看理论推荐

redis的RDB持久化设置   小知识点推荐

redis的持久化之RDB的配置和原理   RDB数据库持久化简洁明了推荐

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要解决Docker启动Redis的问题,可以尝试以下两种方法: 方法一:设置stop-writes-on-bgsave-error值为no 1. 打开配置文件emqx_auth_redis.conf,配置redis连接地址。 2. 进入解压目录,执行docker build .来生成镜像。 3. 执行docker run命令启动服务,并指定端口号,例如:docker run --name emqx -p 1883:1883 -p 8883:8883 -p 18083:18083 -d 镜像ID。 4. 登录Redisredis-cli -h 127.0.0.1 -p 6379 5. 在Redis命令行中执行config set stop-writes-on-bgsave-error no来设置stop-writes-on-bgsave-error的值为no。 方法二:修改redis.conf配置文件 1. 使用vim打开Redis的配置文件redis.conf。 2. 找到stop-writes-on-bgsave-error这一行的配置项。 3. 将yes修改为no。 4. 保存并关闭文件。 5. 重启Redis服务,使修改的配置生效。 通过以上两种方法中的任意一种,您应该能够解决Docker启动Redis的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [docker dockerFile 一键部署 emqx](https://download.csdn.net/download/qq_39231899/82331253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [docker中启动redis整合Springboot提示误解决方案](https://blog.csdn.net/administratop/article/details/126498441)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值