DWS重新挂载cgroup

举报
dgt 发表于 2023/11/30 14:08:49 2023/11/30
【摘要】 dws重新挂载cgroup

HCS下DWS在执行sql涉及资源池管理时,创建控制组等发生如下报错时
failed to set : Permission denied ; can't create cgroup for Failed to remove a non-empty group。
Failed to initialize Cgroup. Please check workload manager is enabled and Cgroup have been created!

发生该中情况的原因是云上欧拉系统存在一定问题,导致操作系统内核cgroup功能会有机率掉,而资源池池功能依赖cgroup,所以会导致资源池使用异常。
该情况一般发生在扩容,节点故障修复等场景。若发生该情况可以通过重新挂载的方式处理。

1、执行如下sql,确认出问题的节点
select pgxc_cgroup_reload_conf();
2、切换到root用户下,先解挂cgroup,再挂载gs_cgroup。
/var/chroot/DWS/manager/app/bin/gs_cgroup -M
/var/chroot/DWS/manager/app/bin/gs_cgroup -U Ruby -c -H /var/chroot/DWS/manager/app
注:上述命令的$GAUSSHOME需要使用全路径替换
3、切换到沙箱内Ruby用户刷新cgroup
gs_cgroup --refresh
4、使用内核函数重新加载并检测
select pgxc_cgroup_reload_conf();
5、执行之前报错的命令,看是否已不再报错

原因分析如下:
DWS软件在设置cgroup是基于libcgroup 的api,libcgroup 是通过echo将DWS创建的控制组里写入配置和进程信息。而欧拉的系统现在是使用systemd 进行资源控制的,systemd会移动进程到默认创建的cgroup里面,导致DWS的资源控制无法生效。系统可能因为人为或其他操作触发systemd 接管了cgroup 控制,导致DWS的控制组失效了,进而导致创建控制组失败。
触发条件:
使用echo 命令(例如 echo pid /sys/fs/cgroup/xxx)配置进程的cgroup资源属性
执行systemctl daemon-reload,systemctl enable xxx,systemctl disablexxx 命令后上述配置失效,恢复为原始属性
资源统计功能没有开启的情况下,如果有上述触发条件systemctl daemon-reload, system enable service,system disable service,就会使配置失效。
规避方案:
资源统计功能开启的情况下,会保存资源统计信息,配置不会失效,规避方案利用了该原理。
未出现异常前,在集群内所有节点的沙箱外root用户执行下面的命令,加固操作系统的CPUSetAccounting、MemoryAccounting、CPUAccounting配置。
systemctl set-property -- -.slice CPUSetAccounting=yes
systemctl set-property -- -.slice MemoryAccounting=yes
systemctl set-property -- -.slice CPUAccounting=yes

出现异常后,通过前面文章重新挂载cgroup方式修复。

参考:https://bbs.huaweicloud.com/blogs/411369

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。