一、问题回顾
项目突然报异常
[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拒绝连接。
没办法只能先启动,命令如下:
/usr/local/bin/redis-server /usr/local/redis/redis.conf
启动后发现项目自动连上了,但查看redis数据时,发现历史数据都丢失了。继续查看redis配置
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,其他系统的命令会有所不同。
cd /etc/rc.d
chmod +x rc.local #添加rc.local可执行权限
vim rc.local
在文件的最后添加下面代码:
sudo sh /mnt/core/start.sh
以上脚本文件也要添加可执行权限
chmod +x start.sh
2、创建Redis开机自启动服务
打开目录
cd /usr/lib/systemd/system
创建服务
touch redis.service
然后使用以下命令打开文件
vim redis.service
并将文件内容更改为以下代码:
[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,直接关闭可能有数据丢失风险。操作命令如下
redis-cli -a 'password'
127.0.0.1:6379> BGSAVE
Background saving started
127.0.0.1:6379> lastsave
(integer) 1708435050
lastsave
命令需要多执行几次,然后比对时间,可以根据以下命令查看
在linux环境下时间戳转换成日期格式
date -d @1708435050
确保已经把数据完整保存后就可以执行关闭Redis操作了
127.0.0.1:6379> shutdown
四、相关命令
- 关闭redis
redis-cli -h 192.168.0.231 -a 'password' shutdown
本机可以省略-h参数
redis-cli -a 'password' shutdown
或进入redis-cli后操作
127.0.0.1:6379> shutdown
- 查看 redis 数据大小
redis-cli -a 'password' dbsize
或
127.0.0.1:6379> dbsize
- 查看redis服务执行的命令情况
redis-cli -a 'password' monitor
- 实时监控 Redis 实例
redis-cli -a 'password' --stat
默认每秒输出一条新行,其中包含有用信息和每个采集点的请求次数差异
- 查看 redis 默认的最大连接数
redis-cli -a 'password' config get maxclients
# 或进入redis-cli后操作
127.0.0.1:6379> config get maxclients
- 查看 redis 默认存放备份文件的目录路径,配置文件中默认为
dir ./
redis-cli -a 'password' config get dir
# 或进入redis-cli后操作
127.0.0.1:6379> config get dir
- 查看备份 RDB 文件的名称,默认为 dump.rdb
redis-cli -a 'password' config get dbfilename
# 或进入redis-cli后操作
127.0.0.1:6379> config get dbfilename