1
Dnlyao OP mongo:
image: mongo:4.0.9 container_name: mongo ports: - "27011:27017" environment: - MONGO_INITDB_ROOT_USERNAME= - MONGO_INITDB_ROOT_PASSWORD= volumes: - /data/databases/mongodb/mongo/db:/data/db - /data/databases/mongodb/mongo/backup:/data/backup - /data/databases/mongodb/mongo.key:/mongo/mongo.key command: ["mongod","--replSet","TT","--keyFile","/mongo/mongo.key", "--wiredTigerCacheSizeGB", "3"] 这个是 dokcer-compose 文件,能清理,还是只能加硬盘? |
2
AoEiuV020JP 122 天前
要么扩容要么删数据,还能怎么处理?
|
3
Dnlyao OP @AoEiuV020JP 这样写 /data/db 文件夹内全是数据是吧?不会出现容器日志导出来是吗?
|
5
Nazz 122 天前
扩容, 然后新建分区挂载逻辑卷到根目录
|
6
Dnlyao OP @julyclyde 之前搜的清理帖子,说是有 docker 日志,和容器内的日志在服务器上,所以导致占用高。想问一下,这么些 compose 文件,是否和日志相关。
|
7
AdamJin 122 天前
你可以看下容器的 logpath ,其中 log 文件大不大。
|
8
AdamJin 122 天前 1
du -h $(docker inspect --format='{{.LogPath}}' $(docker ps -qa))
|
9
laminux29 122 天前 2
你这 docker 结构相当不错啊,扩容应该很简单的。
1.把以下 3 个目录,tar + zstd: /data/databases/mongodb/mongo/db /data/databases/mongodb/mongo/backup /data/databases/mongodb/mongo.key 2.container 停掉 3.导出 container ,tar + zstd 4.上面有 4 个 tar + zstd ,如果数据重要,找 3 个大硬盘,给每个硬盘复制一份,复制时请打开校验选项,也就是复制后,要校验一次。这个步骤是为了满足生产数据的 3 副本的基本要求。 5.原始物理机,磁盘扩容。 生产环境,此时还应该对内存跑一个 Memtest86+ 生产环境,此时还应该对所有存储介质做 3 检:寿命检查、全盘坏道检查、性能检查。 6.扩容完毕后,数据导回去就行,但记得复制时,同样需要打开校验选项。 |
14
assassing 122 天前
有些情况下,容器内日志可以占用达到上百 GB 。
解决方法是使用 docker-compose down 命令删除容器,再使用 docker-compose up -d 启动。这样容器内所有临时文件,包括日志都会自动清除。 |
15
assassing 122 天前
@laminux29 #9 为什么这么复杂-_-。我理解的扩容是新加一块更大的物理硬盘,格式化后把 /data/databases/mongodb/ 目录转移过去就行了
|
16
laminux29 122 天前
@assassing
如果是自用+不重要的数据,为了方便,甚至可以直接在线+原地扩容。 但问题是,楼主说 MongoDB ,我认为很大可能是生产数据。 生产数据的扩容,步骤非常多,原因是需要确保每个环节的正确性,毕竟数据无价,某些公司,如果数据没了,公司也没了。 我在上面发的步骤,检查内存,检查存储,并且复制完成后,还要进行一次验证,生产数据必须严格按照 3 副本原则等等,这些都是生产数据处理时的必要步骤。 |
17
assassing 122 天前
@laminux29 #16 是的,LVM 可以原地扩容,不需要动 Mongo 。生产环境多节点情况下,是一个个节点扩容,Mongo 自带数据校验并且能自动切换主从,也不需要停机。Mongo 备份有专用命令,不是通过打包(虽然也可以)。
|
18
ha1o 121 天前
确定是真实数据库数据太多导致磁盘满了吗?有可能是 docker 的问题:
```docker system df```看一下 RECLAIMABLE 是不是占用很大,是的话应该重启下服务这些空间就回收了 |
19
julyclyde 121 天前
|
22
assassing 121 天前
@julyclyde #21 哈哈,那就惨了。我只见过没有把数据目录挂载出来的,不敢删容器。不然创建容器时,都会到本地挂载目录看一眼,确定挂载成功,里面有文件。
|
25
ryan4yin 120 天前 1
首先通过 du / df /ncdu 定位到是谁占用了存储,如果是 Mongo 数据那就得看数据能不能删除,或者机器能不能扩容了。
如果是日志太大,docker compose 有参数可以限制日志文件大小: https://stackoverflow.com/questions/39078715/specify-max-log-json-file-size-in-docker-compose 清理日志这方面,可以停机的话就直接 docker-compose down 再 up ,停机会有问题的话可以直接 root 用户下运行这个命令把日志清空: echo '' > /path/to/log/file |