This is an old revision of the document!
Table of Contents
GPFS
Documentación (GPFS v5.18)
Estructura del cluster GPFS
Un cluster GPFS consiste en varios elementos:
- Cluster manager: 172.27.253.31 (sdmgt01-ib0). Realiza el monitoreo de los disk leases, detecta fallas, elige el nodo de file system manager, determina la continuidad del servicio, maneja los UIDs, etc.
- Quorum nodes: sdmgt01-ib0 y sdmgt02-ib0. Nodos seleccionables para Cluster Manager.
- File system manager. Hace las reparaciones, agregado de discos, redimensionamiento de espacio, maneja las quotas (reserva bloques en el fs para quienes están escribiendo, etc.). Hay un quota manager para administrar esto.
- Metanode: uno por archivo/directorio abierto, mantiene la integridad de la metadata. La metadata se almacena en el inodo correspondiente.
- AFM gateway node: Cada “cache fileset” se vale de un servidor que se designa como gateway. Cada nodoe en el cache cluster puede funcionar como gateway.
La info del cluster manager se obtiene de correr:
$ mmlsmgr file system manager node ---------------- ------------------ data_fs 172.27.253.32 (sdmgt02-ib0) home_fs 172.27.253.32 (sdmgt02-ib0) Cluster manager node: 172.27.253.31 (sdmgt01-ib0)
La data se almacena directamente en el inodo si no hay niveles de indirección, y se almacena en bloques indirectos como en UNIX en el caso contrario. El primer inodo contiene la inode file (lista de todos los registros de tamaño fijo representando los archivos y directorios), y hay otro pequeño grupo de inodos que contienen el resto de la información del file system. Esos inodos son el directorio root del fs, el block allocation map (representa la disponibilidad de bloques de espacio en disco; el tamaño de bloque, subbloque y subbloques/bloque se configuran en la creación del fs y no se pueden cambiar) y el inode allocation map (que mapea la disponibilidad de inodos). La información de las quotas se almacena en quota files, y se backupea con mmbackupconfig y mmrestoreconfig. Contiene los block limits, file limits, uso actual y período de gracia para users, grupos y filesets.
Directorios compartidos
Los discos de GPFS son /home y /data: /home: ~46TB de scratch, almacenamiento rápido
/data: ~1PB de almacenamiento frío
Las quotas son
mmlsquota
Block Limits | File Limits
Filesystem type KB quota limit in_doubt grace | files quota limit in_doubt grace Remarks
data_fs USR 3663216 0 0 0 none | 36899 0 0 0 none
home_fs USR 20519320 0 0 0 none | 151819 0 0 0 none
mmlsfs all -Q
File system attributes for /dev/data_fs:
========================================
flag value description
------------------- ------------------------ -----------------------------------
-Q user;group;fileset Quotas accounting enabled
user;group;fileset Quotas enforced
none Default quotas enabled
File system attributes for /dev/home_fs:
========================================
flag value description
------------------- ------------------------ -----------------------------------
-Q user;group;fileset Quotas accounting enabled
user;group;fileset Quotas enforced
none Default quotas enabled
Asumiendo que la integración con df es correcta, la cantidad de inodos para /data son 128 millones y para /home 47 millones:
data_fs 128M 89K 128M 1% /data home_fs 47M 1.7M 45M 4% /home
/data/admin: directorio restringido a users en el grupo qadmin
/data/shared: directorio abierto a todos, pero solo escritura por el grupo qadmin
/data/contrib: directorio abierto a todos, de escritura por todos pero permisos de borrado solo para el owner/sudo (sticky bit, chmod 1777)
Monitoreo de salud
Se puede ver un snapshot de la salud del cluster GPFS con
$ sudo /usr/lpp/mmfs/bin/mmhealth cluster show Component Total Failed Degraded Healthy Other -------------------------------------------------------------------------------------- NODE 87 1 1 82 3 GPFS 87 0 1 83 3 NETWORK 87 0 0 87 0 FILESYSTEM 2 0 0 2 0 DISK 4 0 0 4 0 FILESYSMGR 1 0 0 1 0 NATIVE_RAID 2 0 2 0 0
En cada nodo se puede correr un comando más específico:
# /usr/lpp/mmfs/bin/mmhealth node show -N cn013-ib0 Node name: cn013-ib0 Node status: HEALTHY Status Change: 114 days ago Component Status Status Change Reasons & Notices ------------------------------------------------------------------------------- GPFS HEALTHY 114 days ago - NETWORK HEALTHY 114 days ago - FILESYSTEM HEALTHY 114 days ago -
Para todos los nodos sería mmhealth node show -N all
Y se puede obtener un histórico con
# /usr/lpp/mmfs/bin/mmhealth node eventlog Node name: mmgt01-ib0 Timestamp Event Name Severity Details 2024-10-21 14:13:14.706824 -03 cluster_connections_bad WARNING Connection to cluster node 172.27.0.7 has 1 bad connection(s). (Maximum 2). 2024-10-21 14:13:21.499309 -03 cluster_connections_ok INFO All connections are good for target ip 172.27.0.7. 2024-10-21 14:13:21.509307 -03 local_fs_normal INFO The local file system with the mount point / used for /tmp/mmfs reached a normal level with more than 1000 MB free space.
Los eventos que aparecen pueden hacer de trigger para algún script en caso de falla. Eso estaría bueno implementarlo.
Logs
Los logs se encuentran disponibles en los nodos, en /var/adm/ras/mmfs.log.latest, /var/adm/ras/mmfs.log.<fecha> y /var/adm/ras/mmsysmonitor.<nodo>.log-<fecha>.gz (legible con less).
Rebuild de los módulos del kernel
Cada vez que se instala un kernel nuevo, hace falta correr mmbuildgpl:
[root@mmgt02 ~]# mmbuildgpl
--------------------------------------------------------
mmbuildgpl: Building GPL (5.1.8.2) module begins at Thu Jun 26 15:17:13 -03 2025.
--------------------------------------------------------
Verifying Kernel Header...
kernel version = 41800477 (418000477075001, 4.18.0-477.75.1.el8_8.x86_64, 4.18.0-477.75.1)
module include dir = /lib/modules/4.18.0-477.75.1.el8_8.x86_64/build/include
module build dir = /lib/modules/4.18.0-477.75.1.el8_8.x86_64/build
kernel source dir = /usr/src/linux-4.18.0-477.75.1.el8_8.x86_64/include
Found valid kernel header file under /usr/src/kernels/4.18.0-477.75.1.el8_8.x86_64/include
Getting Kernel Cipher mode...
Will use skcipher routines
Verifying Compiler...
make is present at /bin/make
cpp is present at /bin/cpp
gcc is present at /bin/gcc
g++ is present at /bin/g++
ld is present at /bin/ld
Verifying libelf devel package...
Verifying elfutils-libelf-devel is installed ...
Command: /bin/rpm -q elfutils-libelf-devel
The required package elfutils-libelf-devel is installed
Verifying Additional System Headers...
Verifying kernel-headers is installed ...
Command: /bin/rpm -q kernel-headers
The required package kernel-headers is installed
make World ...
make InstallImages ...
--------------------------------------------------------
mmbuildgpl: Building GPL module completed successfully at Thu Jun 26 15:17:56 -03 2025.
--------------------------------------------------------
Binarios
Los binarios de GPFS se encuentran en /usr/lpp/mmfs/bin/, con los siguientes comandos:
auditConsumerManager mmcesmmcchexport mmchqos mmimgrestore mmremotefs tsadddisk tskmipkm audit_watch.snap.py mmcesmmccrexport mmclidecode mmimportfs mmrepquota tsaddpdisk tslinkfileset auth.snap.py mmcesmmcdelexport mmclone mmimportnvmeof mmrestoreconfig tsaddrmap tslsattr basicsnap.py mmcesmonitor mmcloudfuncs mmjob mmrestorefs tsapolicy tslsdisk bscpwrap mmcesmonitord mmcloudgateway mmksh mmrestrictedctl tsauth tslsfileset bsshscpwrap mmcesnetaddaddress mmcmi mmktupgrade mmrestripefile tsbackup tslsfs bsshwrap mmcesnetchaddress mmcollectdebugdata mmlinkfileset mmrestripefs tsbackup33 tslsfsckx callhome.snap.py mmcesnetdeladdress mmcommon mmlockf mmrpldisk tsbuhelper tslsmgr ccrrestore mmcesnetdown mmcrcluster mmlogmsg mmrsh tscachectl tslspdisk ces.snap.py mmcesnetlsaddress mmcrfileset mmlogsort mmsdrcli tschattr tslspolicy cleanupkeystonedb mmcesnetmvaddress mmcrfs mmlsattr mmsdrfsdef tschcarrier tslspool clstrwatchcallbacks mmcesnetup mmcrfsc mmlscallback mmsdrfsdef.Linux tschdisk tslspool34 clstrwatchconsumermanager mmcesnetworkmonitor mmcrnodeclass mmlscluster mmsdrquery tscheckquota tslsqos cnss.snap.py mmcesnfschcfg mmcrnsd mmlsconfig mmsdrquerydef tschfileset tslsquota commonsnap.py mmcesnfschexport mmcrsnapshot mmlsdisk mmsdrrestore tschfs tslsrecgroup copyutil mmcesnfscrexport mmdefedquota mmlsfileset mmsdrserv tschmgr tslsrecoverygroupevents core.snap.py mmcesnfsdelexport mmdefquotaoff mmlsfs mmsetquota tschpdisk tslssnapshot daemonize mmcesnfsfuncs mmdefquotaon mmlsfsckx mmsetrcmd tschpolicy tslsvdisk ece.callhome.py mmcesnfsloadexport mmdefragfs mmlslicense mmshutdown tschpool tsmergeshadow ess_hal.snap.py mmcesnfslscfg mmdelacl mmlsmgr mmsmb tschqos tsnetverify fab3.snap.py mmcesnfslsexport mmdelcallback mmlsmount mmsmbfuncs tschrecgroup tsnsdaccess fcm.snap.py mmcesnfsmonitor mmdeldisk mmlsnode mmsmbman tschstoragepool tsnsddiscover gds.snap.py mmcesnode mmdelfileset mmlsnodeclass mmsmbsupportedoptions tsclone tsnsdrediscover gpfsrunlevel mmcesobjaccess mmdelfs mmlsnsd mmsmbvalidoptions tsclwatchrules tspcache gpfs.snap mmcesobjaccesslinkfset mmdelnode mmlsperfdata mmsnapdir tscmd tspcacheevict gui.callhome.py mmcesobjcfgman mmdelnodeclass mmlspolicy mmsnmpagentd tscp tspcachescan gui.snap.py mmcesobjchcfg mmdelnsd mmlspool mmsnmpagentd10 tscreatedir tspcachesnapdiff hadoop.snap.py mmcesobjchstoragepolicy mmdelsnapshot mmlsqos mmsnmpagentd30 tscrfileset tspcacheu lxtrace mmcesobjcrbase mmdevdiscover mmlsquota mmstartpolicy tscrfs tspcacheutil lxtrace-4.18.0-372.32.1.el8_6.x86_64 mmcesobjcrring mmdf mmlssnapshot mmstartup tscrrecgroup tspmon lxtrace-4.18.0-477.75.1.el8_8.x86_64 mmcesobjcrstoragepolicy mmdiag mmmigratefs mmstatdcallout tscrsnapshot tsprclear mmaddcallback mmcesobjdepstoragepolicy mmdsh mmmount mmsync tscrvdisk tspreparedisk mmadddisk mmcesobjfuncs mmdsm mmmsgqueue mmsysmonc tsctl tsprinquiry mmaddnode mmcesobjlscfg mmdspmsg mmnetverify mmsysmoncontrol tsdbfs tsprpreemptabort mmadquery mmcesobjlsstoragepolicy mmdump mmnfs mmsysmon.py tsdbmemleak tsprquery mmadquery_py2 mmcesobjmr mmdumpfilocks mmnfscleanup mmtrace tsdbmemleakparse tsprreadkeys mmafmcmd mmcesobjpolicyfuncs mmdumpkthreads mmnfsdown mmtracectl tsdbvdisk tsprreadres mmafmconfig mmcesobjs3 mmdumpperfdata mmnfsfuncs mmumount tsdefedquota tsprregister mmafmcosaccess mmcesop mmdynamicmap mmnfsgrace mmunlinkfileset tsdefquotaoff tsprreserve mmafmcosconfig mmcespnfsip mmeditacl mmnfsinit mmunmount tsdefquotaon tsprshowfence mmafmcosctl mmcesrecovernode mmedquota mmnfsinstall mmuserauth tsdefragfs tsputacl mmafmcoskeys mmcesservice mmexectsmcmd mmnfsmonitor mmvaryonvg tsdelacl tsqosnice mmafmctl mmcessmbchconfig mmexecvfile mmnfsnodeback mmwatch tsdeldisk tsquotaoff mmafmhomeconfig mmcessmbchexport mmexpelnode mmnfspreunmount mmxargs tsdelfileset tsquotaon mmafmlocal mmcessmbcrexport mmexportfs mmnfsquorumloss mmxcp tsdelfs tsrecgroupserver mmapplypolicy mmcessmbdelexport mmfileid mmnfsrecovernode mmyfields tsdelpdisk tsreclaimspace mmaudit mmcessmbexportacl mmfixcfg mmnfstakeover msgqueueDaemonManager tsdelrecgroup tsremount mmauditmount mmcessmbfuncs mmfs mmnfsuninstall msgqueueservicesmonitormanager tsdelsnapshot tsrepquota mmauditpreunmount mmcessmblsconfig mmfsadm mmnfsup network.callhome.py tsdelvdisk tsressnapshot mmauth mmcessmblsexport mmfsck mmnsddiscover network.snap.py tsdf tsrestorefileset mmautoload mmcesuserauthckservice mmfsckx mmobj nfsdebug.snap.py tsdiag tsrestripefile mmbackup mmcesuserauthcrservice mmfsctl mmpercentdecode nfspod.snap.py tsdsh tsrestripefs mmbackupconfig mmcesuserauthlsservice mmfsd mmpercentencode nfs.snap.py tseditacl tsrpldisk mmblock mmcesuserauthrmservice mmfsenv mmperfmon noobaa.snap.py tsedquota tssbrff mmbuildgpl mmchattr mmfsfuncs mmpmon object.callhome.py tsexpelnode tssbrindex mmcachectl mmchcluster mmfsfuncs.Linux mmprodname object.snap.py tsextattr tssetquota mmcallhome mmchconfig mmfsmount mmprotocoltrace objmetric_count.py tsfileid tssnapdir mmcallhremote mmchdisk mmgensymtable mmpsnap perfmon.callhome.py tsfindinode tsstarthelper mmccr mmcheckquota mmgetacl mmputacl perfmon_helper.py tsfindname tsstatus mmccrmonitor mmchecksubsys mmgetconfdata mmqos perfmon.snap.py tsfsck tsunlinkfileset mmccrnv mmchfileset mmgetifconf mmqosnice perf.snap.py tsfsckx tsunmount mmces mmchfs mmgetkafkaspecinfo mmquotaoff pymmcesnfsfuncs.py tsfsctl tsusercmd mmcesauthfuncs mmchlicense mmgetstate mmquotaon pymmcesnfslsexport.py tsgetacl tsxattr mmcesblockfuncs mmchmgr mmglobfuncs mmrcmd runmmfs tsgetscsiinfo tsyselect mmcesfuncs mmchnode mmglobfuncs.Linux mmrcp scpwrap tsgnrgethospdata wftopichk mmceshdfsfuncs mmchnodeclass mmgskkm mmreclaimspace smb.snap.py tsgnrvdiskfgscrub wftopics mmcesloadmonitor mmchnsd mmhealth mmrefresh sshscpwrap tsgskkm xcputil.sh mmceslog mmchpolicy mmhelp-apolicy mmremote sshwrap tsimgrestore mmcesminfuncs mmchpool mmimgbackup mmremotecluster sysmon.snap.py tskafkaauth
Si el nodo se encuentra colgado por problema con los fs, y si estamos seguros de que está colgado por este motivo, se puede ejecutar:
mmshutdown; mmstartup
Que intenta desarmar el stack de gpfs (fs, driver, modulos) y volver a cargarlos, vuelve tambien a montar los fs, pero interrumpe todo proceso que de estos dependa.
