(資料圖片)
本人前幾天買了一臺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 dockersystemctl 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 ******
重啟容器之后問題解決
關鍵詞: