重新挂载Cgroup(解决GaussDB(DWS)创建资源池失败问题)
现有局点遇到,无法创建资源池的问题,报错Cgroup加载失败
进入集群后,观察gs_cgroup的状态,通过gs_cgroup -P观察gs_cgroup的状态,如下所示:
根因在于:欧拉系统存在一定问题,导致操作系统内核cgroup功能会有机率掉,而资源池池功能依赖cgroup,所以会导致资源池使用异常,在资源池异常的情况下资源管理功能会有一定影响。cgroup掉的这个问题是以机器/容器为单位影响的,所以需要整改对应机器的cgroup配置。
现网在发生过容灾、扩容后,均有一定概率出现该问题,建议现网对于这种问题排查可使用
select pgxc_cgroup_reload_conf();
该命令会对每个节点的cgroup进行重新加载,返回失败,那可能那个节点有问题,该操作对于业务可能有一定影响,建议在业务低峰期或者无业务的时候执行,减少对现网业务的影响。
问题解决:
此种情况下需要进行cgroup重新挂载,遂总结下cgroup挂载的过程
1、识别$GAUSSHOME位置,先备份已有配置文件。
cp $GAUSSHOME/etc/***.cfg $GAUSSHOME/etc/***.cfg.bak1
注:$GAUSSHOME:GaussDB(DWS)的主目录
2、切换到root用户下,先解挂cgroup,再挂载gs_cgroup。
$GAUSSHOME/bin/gs_cgroup -M
$GAUSSHOME/bin/gs_cgroup -U Ruby -c -H $PATH
此处需要沙箱内的gs_cgroup二进制地址,path使用$GAUSSHOME即可,通常情况下退出沙箱后的$GAUSSHOME会无法访问,可以使用mount命令获取下正常节点的沙箱地址。如:/var/chroot/DWS/manager/app
3、连接到沙箱内,切回到ruby用户重新刷新cgroup信息
gs_cgroup --refresh
4、执行命令对比当前节点cgroup是否可用,不再报错即正常(可跳过)
gs_cgroup -P
5、使用内核函数重新加载
连接进入数据库中,执行select pgxc_cgroup_reload_conf();进行重新检测
6、此时重新创建资源池,提示成功。
7、在集群内所有节点的沙箱外root用户执行下面的命令,刷新操作系统的CPUSetAccounting、MemoryAccounting、CPUAccounting配置。
systemctl set-property -- -.slice CPUSetAccounting=yes
systemctl set-property -- -.slice MemoryAccounting=yes
systemctl set-property -- -.slice CPUAccounting=yes
systemctl show -- -.slice | grep -i Accounting
显示结果均为yes,即恢复正常
- 点赞
- 收藏
- 关注作者
评论(0)