一、问题回顾
项目突然报异常
[INFO] 2024-02-20 10:09:43.116 i.l.core.protocol.ConnectionWatchdog [171]: Reconnecting, last destination was 192.168.0.231:6379
[WARN] 2024-02-20 10:09:43.120 i.l.core.protocol.ConnectionWatchdog [151]: Cannot reconnect to [192.168.0.231:6379]: finishConnect(..) failed: Connection refused: /192.168.0.231:6379
看异常显示redis无法连接,使用redis-cli
命令也无法正常进入,显示拒绝连接,但进程没有挂掉。
分析原因是由于redis与业务共一个服务器,内存只有8G,业务服务启动过多,内存不足导致redis拒绝连接。
没办法只能先启动,命令如下:
1 | /usr/local/bin/redis-server /usr/local/redis/redis .conf |
启动后发现项目自动连上了,但查看redis数据时,发现历史数据都丢失了。继续查看redis配置
1 | cat /usr/local/redis/redis .conf |
查看是否有设置持久化,没有开启aof,只开启了默认的rdb。
rdb的路径配置是当前目录。
而前面启动的路径并不是在/usr/local/redis/
,导致数据为空,重新切换到该路径启动数据恢复正常。
二、解决方案
上面临时启动治标不治本,跟领导商量了一下,决定找网管把服务器的内存升级一下。升级面临着需要重启服务器,所有依赖redis的服务都会停摆,所以要提前做好准备工作,节省操作时间。
步骤如下:
1、把相关业务添加到系统自启动
2、将Redis也添加到系统自启动
3、停止业务服务,避免新的请求进来
4、手动保存Redis镜像,保证数据不丢失
5、升级配置,重启服务器
6、等待Redis和业务开机启动
7、验证业务服务是否正常
详细操作:
1、把相关业务添加到系统自启动
本例所使用的操作系统是Centos 7,其他系统的命令会有所不同。
1 2 3 | cd /etc/rc .d chmod +x rc. local #添加rc.local可执行权限 vim rc. local |
在文件的最后添加下面代码:
1 | sudo sh /mnt/core/start .sh |
以上脚本文件也要添加可执行权限
1 | chmod +x start.sh |
2、创建Redis开机自启动服务
打开目录
1 | cd /usr/lib/systemd/system |
创建服务
1 | touch redis.service |
然后使用以下命令打开文件
1 | vim redis.service |
并将文件内容更改为以下代码:
1 2 3 4 5 6 7 8 9 | [Unit] Description=redis-server After=network.target [Service] Type=forking ExecStart= /usr/local/bin/redis-server /usr/local/redis/redis .conf PrivateTmp= true [Install] WantedBy=multi-user.target |
使Redis服务开机自启生效
systemctl enable redis
检查Redis是否已成功设置为开机自启。
可以通过运行以下命令来确认新服务的设置
systemctl list-unit-files | grep redis
完成以上步骤后,您的Redis服务器应该会在每次系统启动时自动启动。
三、注意事项
1、我们要把redis.conf的dir配置修改成固定的路径,否则自启动时使用的dump.rdb不是原文件,会重新生成一个新的。dir ./
修改成 dir /usr/local/redis
,如下图:
2、启动重启之前需要手动保存一下,本例没有启用aof,直接关闭可能有数据丢失风险。操作命令如下
1 2 3 4 5 | redis-cli -a 'password' 127.0.0.1:6379> BGSAVE Background saving started 127.0.0.1:6379> lastsave (integer) 1708435050 |
lastsave
命令需要多执行几次,然后比对时间,可以根据以下命令查看
在linux环境下时间戳转换成日期格式
1 | date -d @1708435050 |
确保已经把数据完整保存后就可以执行关闭Redis操作了
1 | 127.0.0.1:6379> shutdown |
四、相关命令
关闭redis
1 | redis-cli -h 192.168.0.231 -a 'password' shutdown |
本机可以省略-h参数
1 | redis-cli -a 'password' shutdown |
或进入redis-cli后操作
1 | 127.0.0.1:6379> shutdown |
查看 redis 数据大小
1 2 3 | redis-cli -a 'password' dbsize 或 127.0.0.1:6379> dbsize |
查看redis服务执行的命令情况
1 | redis-cli -a 'password' monitor |
实时监控 Redis 实例
1 | redis-cli -a 'password' --stat |
默认每秒输出一条新行,其中包含有用信息和每个采集点的请求次数差异
查看 redis 默认的最大连接数
1 2 3 | redis-cli -a 'password' config get maxclients # 或进入redis-cli后操作 127.0.0.1:6379> config get maxclients |
查看 redis 默认存放备份文件的目录路径,配置文件中默认为 dir ./
1 2 3 | redis-cli -a 'password' config get dir # 或进入redis-cli后操作 127.0.0.1:6379> config get dir |
查看备份 RDB 文件的名称,默认为 dump.rdb
1 2 3 | redis-cli -a 'password' config get dbfilename # 或进入redis-cli后操作 127.0.0.1:6379> config get dbfilename |
到此这篇关于Redis突现拒绝连接问题处理总结的文章就介绍到这了,更多相关Redis拒绝连接内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!