背景:最近生产环境greenplum集群批量回收普通用户login权限时误把超级用户gpadmin权限回收,导致集群异常无法正常提供服务、无法进行日常运维操作,抛出异常:FATAL: role "gpadmin" is not permitted to log in
故障操作复现:
登录数据库执行回收gpadmin登录权限
postgres=#
postgres=# alter role gpadmin nologin;
ALTER ROLE
postgres=#
此时数据库无法执行日常运维操作提示无登录权限,如下:
[gpadmin@redhat2 ~]$ psql
psql: FATAL: Ident authentication failed for user "gpadmin"
[gpadmin@redhat2 ~]$
[gpadmin@redhat2 ~]$ gpstate -m
20220218:00:00:42:051408 gpstate:redhat2:gpadmin-[INFO]:-Starting gpstate with args: -m
20220218:00:00:42:051408 gpstate:redhat2:gpadmin-[INFO]:-local Greenplum Version: 'postgres (Greenplum Database) 4.3.8.0 build 1'
20220218:00:00:42:051408 gpstate:redhat2:gpadmin-[CRITICAL]:-gpstate failed. (Reason='FATAL: role "gpadmin" is not permitted to log in
') exiting...
[gpadmin@redhat2 ~]$
解决方案:
一、使用其它超级用户登录数据库,然后执行:alter role gpadmin login;
2二、当无其它超级用户可进行修改时,需要使用特殊方式登录单用户模式进行修改gpadmin权限,详细如下:
1.停GP集群,此时已无法通过使用gpstop 命令进行正常停集群了,使用kill -15 杀进程停止服务,切记不能使用kill -9 杀进程。
[gpadmin@redhat2 ~]$ ps -ef|grep green
gpadmin 49824 1 0 Feb17 ? 00:00:00 /opt/greenplum/greenplum-db-4.3.8.0/bin/postgres -D /data/pg_system/gpseg-1 -p 5432 -b 1 -z 2 --silent-mode=true -i -M master -C -1 -x 0 -E
gpadmin 51469 49511 0 00:01 pts/0 00:00:00 grep green
[gpadmin@redhat2 ~]$
[gpadmin@redhat2 ~]$ kill -15 49824
[gpadmin@redhat2 ~]$
2.登录master节点单用户模式修改gpadmin权限:
[gpadmin@redhat2 ~]$ /opt/greenplum/greenplum-db-4.3.8.0/bin/postgres --single -P -O -D /data/pg_system/gpseg-1 -p 5432 -c gp_session_role=utility postgres
PostgreSQL stand-alone backend 8.2.15
backend> alter role gpadmin login;
backend>
使用ctrl+D退出
此时已经可以通过gpstart -m启动master
3.登录seg节点进单用户模式修改gpadmin权限:
[gpadmin@redhat3 ~]$ /opt/greenplum/greenplum-db-4.3.8.0/bin/postgres --single -P -O -D /data/pg_system/primary/gpseg0 -p 40000 -c gp_session_role=utility postgres
PostgreSQL stand-alone backend 8.2.15
backend> alter role gpadmin login;
backend>
[gpadmin@redhat3 ~]$ /opt/greenplum/greenplum-db-4.3.8.0/bin/postgres --single -P -O -D /data/pg_system/mirror/gpseg1 -p 50000 -c gp_session_role=utility postgres
PostgreSQL stand-alone backend 8.2.15
backend> alter role gpadmin login;
backend>
注意:所有节点primary+mirror均需要进行登录修改,如进程已经存在无法登录使用kill -15关闭进程后进行操作。
4.启动集群
gpstart -a
集群可进行正常启动,检查gpadmin用户权限、检查增删改情况,集群以恢复正常