1、问题描述
重复告警。
2、分析过程
1.DWS集群在任意dn节点磁盘空间使用率超过90%后,将触发dws集群只读保护,避免发生磁盘占用率上升至100%后难以处理的情况。
2.常用命令
查看磁盘使用率
df –h
查看目录占用空间大小
du -sh *
查看集群状态(包含实例目录)
cm_ctl query -Cvd
查看对应dn的端口号
cat dn目录下/postgresql.conf |grep port
例:cat /var/chroot/DWS/data1/master1/postgresql.conf | grep port
3.登录dws各dn节点,确认为base目录异常增高。
注:这次集群只读均发生在dws集群base目录(如: /DWS/data1/master1/base)异常增高情况下,本文只讨论该情况。
3、问题根因
DWS集群在任意dn节点磁盘空间使用率超过90%后,将触发dws集群只读保护,避免发生磁盘占用率上升至100%后难以处理的情况。
4、解决方案
1、 /DWS/data1/master1/base下的数字为database的oid
找到近日异常增大或最大的通过以下查询确定数据库
select oid,* from pg_database
2、 查找异常增高的表或索引
l 方案一
- a)登录异常数据库
gsql –Udbadmin –d 数据库 –p 端口
注:数据库上面查询到,port为dn的port
执行如下sql,快速确认占用空间最大的前20的大表。
SELECT schemaname,tablename,pg_size_pretty(sum(dnsize)) AS totalsize, pg_size_pretty(max(dnsize)) AS maxsize, pg_size_pretty(min(dnsize)) AS minsize,pg_size_pretty(max(dnsize)-min(dnsize)) diffsize
FROM pg_catalog.pg_class c
INNER JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
INNER JOIN pg_catalog.table_distribution() s ON s.schemaname = n.nspname AND s.tablename = c.relname
INNER JOIN pg_catalog.pgxc_class x ON c.oid = x.pcrelid AND x.pclocatortype = ‘H’
GROUP BY schemaname,tablename
order by max(dnsize)-min(dnsize) desc
limit 20;
l 方案二
注1:正常情况下请按方案一进行日常巡检,这样可以对比历史数据更加清晰明了最近增大的表。若上面sql比较慢或平时没有巡检对比,可以采用方案二。
注2:database目录下,文件的命名方式,行存表或行存表分区为12345.1,其中红色部分为relfilenode,最后的数字表示这是该relation的第几个文件;列存表为12345_C10.1,其中红色部分表示relfilenode,C10表示这是第几列,最后的数字表示这是该relation第10列的第几个文件;每个文件大小达到1G后开启下一个文件
- a)进入异常dn的数据库目录(如:../base/15239),执行ll *.50,(如不存在,则执行ll *.30或ll *.20)确定大表。
连接到异常dn对应的database,执行
select * from pg_class where relfilenode = $relfilenode
或
select * from pg_class where oid = (select parentid from pg_partition where relfilenode = $relfilenode)
注:$relfilenode为上面查询到的大表oid
3、 根据情况,选择下面部分方法整改表和索引(需获得客户授权)
- a)若表倾斜,整改表。否则reindex重建索引
- b)对部分占用空间大的表进行清理
- c)vacuum full table
4、 磁盘空间达到90%
l 若已经达到90%,集群只读,无法进行写操作,需要先解除集群的只读状态。这些手段使用时都会使磁盘空间先升后降,因此必须确保剩余空间足够进行这些操作。
- a)在所有cn节点配置白名单,防止取消只读状态后有业务接入将磁盘插入至100%
一定要先备份!!!
cp /DWS/data1/coordinator/pg_hba.conf /DWS/data1/coordinator/pg_hba.conf_`date +’%Y-%m-%d_%H%M%S’`
注释白名单
- b)在主备cm_server cm/cm_server/cm_server.conf中修改
enable_transaction_read_only=off(关闭集群只读监控)
- c)在后台取消只读状态
gs_guc reload -Z coordinator -N all -I all -c “default_transaction_read_only = false”
l 执行完相关操作,确认空间已恢复后,需恢复集群白名单配置和CM的只读检测,此处需注意,一定要恢复白名单和CM的只读检测,否则下次磁盘使用率超过90%时将无法将集群置为只读状态,带来严重后果。
- a)enable_transaction_read_only=on
- b)恢复白名单(用备份文件恢复)
- c)gs_guc reload -Z coordinator -N all -I all -c “default_transaction_read_only = false”
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/316492.html