本人前几天买了一台2核4G+40G磁盘空间的云服务器用来学习使用,在服务器上安装了docker。为了学习redis主从架构,使用docker-compose部署了一主二从三台redis服务,部署完成之后测试发现从服务器并没有同步主服务器的数据,查看配置文件没有看出来什么问题,进入三台redis服务容器内部使用info replication
查看主从信息发现也没有问题,看了很久都没看出问题于是就先休息了。第二天想着是不是服务器哪里的问题重启看看能不能解决,重启之后运行docker ps
命令查看容器运行情况结果提示:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?。由于服务器上docker配置了开机启动,redis的docker-compose.yml配置了重启策略
# docker服务设置开机启动 systemctl start docker systemctl enable docker # docker-compose.yml设置重启策略 restart: always
所以理论上重启应该会自动启动docker服务并运行redis容器
既然错误提示没有启动docker,那就systemctl start docker
手动启动试试,结果报错Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
,跟随提示执行systemctl status docker.service
命令查看错误信息
结果详细信息里也没看出具体什么原因导致的docker启动失败,于是就开始上网查资料,看看有没有遇到类似问题的博客,docker安装后启动失败--cclovezbf这位老哥的博客给了我思路,虽然我们的错误不一样,但是可以通过tail -200f /var/log/messages
查看所有软件的日志,执行命令找到如下日志
Jun 26 02:06:13 hecs-411924 dockerd: time="2023-06-26T02:06:13.217249515+08:00" level=error msg="Error writing log message" driver=json-file error="error writing log entry: write /var/lib/docker/containers/77c466b6276136d2de92716f184ff4153ee400f828fd265e34ce472f8fe6ce12/77c466b6276136d2de92716f184ff4153ee400f828fd265e34ce472f8fe6ce12-json.log: no space left on device" message=
可以看到问题出在磁盘空间不足,但是我这个40G的磁盘刚安装了docker和几个镜像,怎么会磁盘就满了呢?最后通过du df
命令一顿操作发现问题处在两个redis从服务器的日志上,路径是/var/lib/docker/containers/
,两个从服务器日志文件分别占了大概18G,查看日志内容发现一直在刷重复日志
看这一段Unexpected reply to PSYNC from master: -NOAUTH Authentication required.\n","stream": "stdout","time":"2023-06-25T14:36:02.104810656Z"}
,问题原因找到了,我主服务器设置了密码,但是从服务器配置文件中却没有配置主服务器的密码,导致从服务器容器一直在刷日志,最终导致磁盘爆满。另外之前的从服务器数据没有同步的问题也是这个原因
发现问题之后解决就很简单了,在从服务器配置文件中加上主服务器密码
# 设置主服务器密码 masterauth ******
重启容器之后问题解决