User Tools

Site Tools


gpfs

This is an old revision of the document!


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.

gpfs.1755807965.txt.gz · Last modified: by lgalindo