磁盘满方案速查

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:4

磁盘满方案速查

# 问题描述 苍穹机器磁盘占比高或者满,轻则导致es只读不再记录日志,重则导致k8s异常业务中断,运维人员需要做好定期巡检和监控,以下总结部分苍穹部署后常见的磁盘问题解决方法 # 解决方法 ## 定位占比高的文件 首先查看当前磁盘占比,一般根目录和苍穹安装目录不能超过85% ``` df -h #如果过滤结果容器目录太多可以使用下面的语句不显示 df -h |egrep -v "docker|k8s" ``` ![1.webp](/download/0100f5c8570afd67482fb5b1bb93b7e953cb.webp) 不清楚如何定位可以从根目录开始查 ``` cd / du -sh * #从显示结果中找到占用最大的目录,切换到此目录下继续执行du -sh *,循环直到确定是什么程序占用高 ``` ![3.webp](/download/01005870f5a92d1d4961b520c8468fe07963.webp) 以下列举一些苍穹常见的磁盘占用大解决方法,示例安装路径选择的是/kingdee,现场请根据真实情况修改 ## zookeeper占用高 zookeeper目录下data占比高,里面主要是zk的快照和日志,可以配置自动清理,详细参考: [zookeeper数据导致服务器磁盘空间满处理方法](https://vip.kingdee.com/link/s/lHNQE) /kingdee/cosmic/common/zookeeper/zookeeper-3.5.9/conf/zoo.cfg 添加: autopurge.snapRetainCount=5 autopurge.purgeInterval=1 保存后重启zookeepe就会自动释放 ![4.webp](/download/0100620b0a32e7924f058898f16292329fce.webp) ## rabbitmq占用高 mq默认数据存放在/var/lib/rabbitmq/mnesia,如果此目录磁盘占用高,程序使用了mq没有关闭,或消息队列积压严重等原因导致,需要优先解决mq的问题占用自然会释放。 ![13.webp](/download/01002145a7ee0fbe46a19b91d53e0e9dff0f.webp) ## kafka占用高 kafka目录下kafka-logs占比高,里面是苍穹发送到kafka的日志数据,分为2种情况: 1. 没有开启定期清理功能,导致过期数据未清理,配置清理清理,详细参考: [kafka 官方配置文档](https://kafka.apache.org/documentation/#compaction) /kingdee/cosmic/elk/kafka/kafka_2.12-3.2.0/config/server.properties 添加: #设置日志保留48小时 log.retention.hours=48 #自动清理日志开关 log.cleaner.enable=true #日志清理检查周期(毫秒) log.retention.check.interval.ms=300000 #日志文件每个segment的大小,默认为1G log.segment.bytes=1073741824 保存重启后,kafka会标记过期的文件,在下一个清理周期后删除文件 ![5.webp](/download/0100dfedb70810bf4c29b238733efaf6ecb3.webp) 2. 开启清理的情况下占用依旧高,一般是由于苍穹日志过多导致,请参考下面es部分 ## es占用高 elasticsearch目录下esdata占比高,日志保留过多,可以先确认索引情况 curl http://127.0.0.1:9200/_cat/indices -u账号:密码 ![6.webp](/download/0100f5601e56f70f494db733ec7deeaa8e60.webp) 1. 可以通过索引名后缀的时间来判断es自动清理脚本是否正常运行,示例图片的同时存在2个月的,说明定时任务失败了,脚本/home/elsearch/autoclear.sh,手动sh执行根据报错信息修复,并重新配置elsearch用户crontab实现定期清理。 ```language #es索引自动清理脚本,默认7天可以自行修改 #!/bin/bash es_user=es账号 es_password="es密码" retain_time=`date +%Y%m%d -d "7 days ago"` function delete_indices() { time_num=`echo $1|sed 's/-//g'` if [ ${time_num} -lt ${retain_time} ];then curl -X DELETE http://127.0.0.1:9200/*$1 -u ${es_user}:${es_password} fi } curl -XGET http://127.0.0.1:9200/_cat/indices -u ${es_user}:${es_password} |awk '{print $3}' |grep '[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}'|awk '{print substr($0,length($0)-9)}'|sort -n|uniq|while read line; do delete_indices $line; done ``` 2. 如果是每个索引的磁盘占用都很大(会导致kafka和es的磁盘占用同时变大),那说明苍穹每天产生的日志很多。不同场景可能不一样,但开启了sql输出肯定会出现此情况。是否开了可以在monitor中查询到: ![7.webp](/download/0100049da9c94a694ff2ba79c365221a7f79.webp) 非必要情况下建议关闭这2个值,mc-公共环境变量/集群配置信息中找到此值修改为false保存发布,确认monitor界面刷新后为false才生效。 针对当前特别大的索引,可以手动删除,紧急情况下可以删除较大索引释放资源使用: ```language curl -XDELETE http://127.0.0.1:9200/索引名 -u es账号:密码 ``` ![8.webp](/download/010037a0fd63b54c4e0eac1b2e3a354585f3.webp) > 索引名为:集群名-span-yyyy-MM-dd 是开启了monitor中调用链的功能,此功能也会产生大量数据,可以根据现场需求开或关。 ## postgresql占用高 pg占用高,可以先判断具体是哪个目录高再确定如何解决 ![9.webp](/download/010070d17774eb004de399d2e99f1419b2f5.webp) #### 截图tree仅是展示结构,现场可以按照之前du -sh * 来确定文件大小 ### 1. archivelog 归档日志 归档日志是事务日志wal归档后生成的文件,修改postgresql.conf中archive_command项可以自定义路径。 ![14.webp](/download/01002db78df7797c4fc5801a787f304190f4.webp) 关闭归档则不会有文件,开启归档的情况下会不断增长,需要自行配置清理脚本结合crontab实现定期清理。脚本可以参考示例 ```language #每天凌晨2点自动清理对应目录下建立时间超过7天的文件,仅作参考。 crontab -e #编辑当前用户的计划任务,复制下一行内容后保存退出 0 2 * * * find /kingdee/cosmic/postgres/archivelog -type f -mtime +7 -exec rm -f {} \; ``` ### 2. base 数据 base目录占用大的话说明真实数据比较多,此处无法缩减,可以删除不用的数据库或者进行扩容。 ### 3. log 日志 部分历史安装器postgresql.conf中log_filename设置的是postgresql-%d.log,以30天一月的周期更新,产生较多日志。建议配置日志以7天一星期的周期滚动更新日志,log_filename修改为postgresql-%w.log,重启pg同时手动删除log目录下的编号超过6的日志文件。 ![10.webp](/download/0100a280470179c044909e49bcc155013546.webp) 同时由于安装器默认开启了log_duration,日志文件会比较大,可以关闭此参数并重启pg减少日志输出,具体作用参考: [PG数据库日志分析](https://vip.kingdee.com/link/s/lyQ7r) ![11.webp](/download/010028df187812314b6486821b642b10f364.webp) ### 4. pg_wal 事务日志 pg_wal过大一般有2种可能:1.开启归档,但是归档失败,可以根据log中日志分析;2.大量写入数据,pg_wal来不及清理。pg对wal大小的控制大多都是软限制,所以会出现wal暴增的情况。针对此问题可以参考:[PostgreSQL数据库清理wal日志](https://vip.kingdee.com/link/s/lJ2rY) 快速恢复语句可以参考: ```language #需要使用postgres用户执行 pg_archivecleanup $PGDATA/pg_wal `pg_controldata |grep "REDO WAL" |awk -F ':' '{print $2}'` ``` 注意:开启归档的情况下执行此语句仅是清理wal日志,依然需要同时检查归档日志是否需要清理删除(上文1. archivelog 归档日志内容)。 ## nginx-appstatic应用仓库占用高 苍穹默认有此路径的软连接到/var/appstatic,占用大一般是补丁或升级次数比较多,稳定运行的环境可以直接删除/var/appstatic/appstore/upgrade-bak ![12.webp](/download/0100ec6ab558298848c09f6263f2b259dd63.webp) ## k8s/docker 本身不会占用太多空间,需要的情况下可以使用docker system prune自动清理。 常见的磁盘占比超过85%,k8s会删除镜像,参考说明: [磁盘空间超85%,导致苍穹容器Pod启动失败的解决方法](https://vip.kingdee.com/link/s/lKQoW) 快速恢复方案: ```language #保证已经检查并清理了磁盘空间再执行,删除所有Evicted异常pod kubectl get pods --all-namespaces | grep Evicted| awk '{cmd=" kubectl delete pod "$2" -n "$1;system(cmd)}' #导入镜像,可以根据pod报错缺少镜像的针对性导入,不清楚如何排错的也可以全部导入一次 #文件服务器镜像,示例安装路径选择的/kingdee,可以根据实际情况修改 docker load -i /kingdee/cosmic/cosmic-k8s/cosmic-images/fileserver.image #苍穹镜像 docker load -i /kingdee/cosmic/cosmic-k8s/cosmic-images/mservice.image #k8s基础镜像,示例安装包singularity在根目录,可以根据实际情况修改。 #如果报错k8s_basic.image.tar.gz不存在,需要手动到files目录下解压k8s_all.tar.gz docker load -i /singularity/scripts/k8s/ansible/roles/00-copy_all/files/k8s_all/docker_rpm/k8s_basic.image.tar.gz #gpaas镜像 docker load -i /singularity/scripts/k8s/ansible/roles/20-import_gpaas_image/files/kce-images.tgz #harbor镜像 docker load -i /singularity/scripts/k8s/ansible/roles/20-import_gpaas_image/files/harbor-1.10.images.tgz #registry镜像 docker load -i /singularity/scripts/k8s/ansible/roles/30-deploy_registry/files/registry-image.tar.gz ```

磁盘满方案速查

# 问题描述苍穹机器磁盘占比高或者满,轻则导致es只读不再记录日志,重则导致k8s异常业务中断,运维人员需要做好定期巡检和监控,以下总结...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息