Procesos específicos del RAC

Una de las principales diferencias que vamos a encontrar cuando nos encontremos en un RAC es que aparecen un monton de nuevos procesos daemon en el sistema operativo que apriori no sabemos para que sirven. En esta entrada vamos a echar un vistazo rápido a estos procesos.

  • LCK: Lock Process
  • LMD: Lock Manager Daemon Process
  • LMON: Lock Monitor Process
  • LMS: Lock Manager Server Process
  • ACFS: ASM Cluster File System CSS Process
  • ACMS: Atomic Control File toMemory Service Process
  • GTXn: Global Transaction Process
  • LMHB: Global Cache/Enqueue Service Heartbeat Monitor
  • PING: Interconnect Latency Measurement Process
  • RMSn: Oracle RAC Management Process
  • RSMN: Remote Slave Monitor Process

Entre estos procesos, los mas destacables son:

LCK: Lock Process

Los procesos LCK manejan las peticiones que no son parte del cache-fusión. Además de esto mantiene una lista de los elementos bloqueados que utilizará para validarlos durante la recuperación de la instancia.
Solamente puede haber un único proceso lck por instancia.

LMON: Lock Monitor Process

El lock monitor (LMON) es el proceso responsable de monitorizar el global enqueue.
Es el responsable de la reconfiguración de los bloqueos de los recursos del cluster cuando una instancia entre o sale del cluster además de ser el responsable del dynamic lock remastering. También es el responsable de comprobar si un nodo está muerto e iniciar la reconfiguración lo antes posible.
LMON generará un fichero de traza cada vez que ocurra una reconfiguracion (as opposed to
remastering of a subset of locks).

LMS: Lock Manager Server Process

El lock manager server (también llamado global cache service process) es el responsable de transmitir los bloques entre las instancias para las peticiones de cache-fusion.
En una petición consistent-read el LMS primero hará un rollback del bloque creando una consstent read (CR) de bloque y enviará esa versión del bloque por la interconexión al proceso foreground remoto.
Además de esto, el LMS interactúa con el LMD (Lock Manager Daemon Process) para obtener las peticiones de bloqueos.
Una instancia puede tener entre 1 y 26 procesos LMS. El número de procesos se puede fijar con el parámetro GCS_SERVER_PROCESSES y es un parámetro dependiente del numero de CPUS. En el momento del arranque se marca en CPU_COUNT/4.
Este proceso debe de correr con la máxima prioridad en el S.O (scheduling priority set to Real Time)

ACFS: ASM Cluster File System CSS Process

El Automatic Storage Management (ASM) Cluster File System CSS (ACFS) es un proceso Nuevo de la 11g Release 2 que entrega los cambios de miembros del CSS al ASM, estos cambios son necesarios para que el ASM mantenga la consistencia con el cluster.

ACMS: Atomic Control File toMemory Service Process

El Atomic Control File to Memory Service (ACMS) ) es un proceso Nuevo de la 11g Release 2 que se asegura que las updates del SGA son correctos globalmente o globalmente abortados (evento de fallo)

GTXn: Global Transaction Process

Los procesos Global Transaction (GTXn) es un proceso Nuevo de la 11g Release 2 que ayudan a mantener información global sobre las transacciones globales (XA) atraves del cluster.

LMHB: Global Cache/Enqueue Service Heartbeat Monitor

Los LM Heartbeat Monitor (LMHB) son un procesos Nuevo de la 11g Release 2 que se encargan de monitorizar que los LMON, LMD, and LMSn funcionan correctamente sin bloqueos

PING: Interconnect Latency Measurement Process

También nuevo en la 11g Release 2, cada pocos segundos se envían pings entre las instancias, el tiempo del ping es recopilado y medido

RMSn: Oracle RAC Management Process

El proceso Oracle RAC Management (RMSn) lleva a cabo varias tareas como puede ser crear los recursos de un RAC cuando una instancia se añade al cluster

RSMN: Remote Slave Monitor Process

El Remote Slave Monitor (RSMN) background process administra la creación de procesos esclavos y la comunicación entre sus corrdinadores. Estos procesos realizan tareas en nombre de un proceso de coordinación corriendo en otra instancia de clúster .

Comprobar versiones del cluster

Hoy vamos a ver otra de estas entradas sencillas que nos pueden llegar a ser de utilidad llegado el caso

Hay veces ( especialmente en los momentos del parcheado) que queremos saber la version de los componentes del cluster. En estos casos podemos tener varios binarios en la máquina y que sean distintos a el software que está corriendo, o distintas versiones entre distintos componentes del cluster, para ello tenemos las opción query del crsctl .
Las opciones que nos serán útiles son:

  • b>releaseversion: Muestra la versión de los binarios instalados en el nodo local. Este comando puede ser “engañado” modificando la variable PATH
  • activeversion: Muestra la versión que está funcionando. Durante un rolling upgrade la activeversion no cambiará hasta que el upgrading finalize. La activeversion siempre es la versión mas baja entre todos los nodos del cluster.
  • softwareversion:Es el contrario de activeversion, nos indicará la ultima versión instalada en el cluster, también puede indicarnos la version mas alta instalada en uno de los nodos.

Algunos ejemplos de la salida son:

[grid@rac1 ]# crsctl query crs releaseversion
Oracle High Availability Services release version on the local node is [11.2.0.4.0]
 
[grid@rac1 ]# crsctl query crs activeversion
Oracle Clusterware active version on the cluster is [11.2.0.4.0]
 
[grid@rac1 ]# crsctl query crs softwareversion
Oracle Clusterware version on node [rac1] is [11.2.0.4.0]
En single node no
[grid@rac1 ]# crsctl query has releaseversion
Oracle High Availability Services release version on the local node is [11.2.0.4.0]

Procesos background de ACFS

Una vez tenemos un dispositivo bajo /dev/asm/ podemos trabajar con el como si de un disco normal fuera, pero, para poder trabajar en un sistema en cluster necesitaremos ACFS o una solución de terceros.

Procesos background de ACFS

Oracle lanza nuevos procesos para las instancias de ASM que tienen asociados filesystems ACFS
Estos procesos son :

00:00:04 asm_vdbg_+ASM1
00:00:00 asm_vmb0_+ASM1
00:00:00 asm_vbg0_+ASM1
00:00:43 asm_acfs_+ASM1

VDBG.- Volume driver background (asm_vdbg_+ASM1)

Este proceso es el encargado de pasarlas peticiones del ASM al driver de ASDM.
Es tan importante que si muriera de manera no planificada tiraría abajo la instancia ASM

VBGn Volume background process (asm_vmb0_+ASM1)

Es un pool de procesos worker que son los que se encargan de las peticiones entre ASM y ADVM
El nombre es muy similar al anterior,, pero el otro acaba en G y estos en numero

ACFS background process (asm_acfs_+ASM1)

Gestionan todas las transiciones del estado de los miembros del cluster en el ACFS

ACFS background process (asm_acfs_+ASM1)

Gestionan todas las transiciones del estado de los miembros del cluster en el ACFS

Volume Menbership background process (asm_vmb0+ASM1)

The Volume Membership Background processes (VMB0) plays the role of an I/O barrier and I/O fencing function. Interestingly, during an ASM instance failure, this process continues to exist until the ADVM driver has had a chance to write out pending I/O. +ASM_vmb_.trc

Acciones comunes sobre el ASM

Hoy vamos a ver un ejemplo de los comando seas habituales que solemos hacer en un ASM

Nombre de los diskgroups

ASMCMD

ASMCMD> lsdg

SQLPLUS

SQL> column name format a20;
SQL>  select NAME,ALLOCATION_UNIT_SIZE,STATE,TYPE,TOTAL_MB,FREE_MB from v$asm_diskgroup
NAME           ALLOCATION_UNIT_SIZE STATE      TYPE     TOTAL_MB    FREE_MB
---------- -------------------- ---------- ------ ---------- ----------
ASMFS             1048576 	  MOUNTED    EXTERN    1019       403
DATA01_PRUEBA     1048576	  MOUNTED    EXTERN    2246       267
OCRVOTING         1048576	  MOUNTED    EXTERN    1019       623
REDO              1048576	  MOUNTED    EXTERN     499       404

Discos en un diskgroup

ASMCMD

ASMCMD> lsdsk -p -G DATA01_PRUEBA
Group_Num  Disk_Num      Incarn  Mount_Stat  Header_Stat  Mode_Stat  State   Path
       2         1  3915953579  CACHED      MEMBER       ONLINE     NORMAL  /dev/oracleasm/disks/ASM01
       2         0  3915953576  CACHED      MEMBER       ONLINE     NORMAL  /dev/oracleasm/disks/DATA_PRUEBA
ASMCMD> lsdsk -G DATA01_PRUEBA
Path
/dev/oracleasm/disks/ASM01
/dev/oracleasm/disks/DATA_PRUEBA

SQLPLUS

SQL> select PATH,STATE,NAME from v$asm_disk where name like '%PRUEBA%';
PATH                		    STATE       NAME
---------------------------------------- ---------- --------------------
/dev/oracleasm/disks/DATA_PRUEBA    NORMAL     DATA01_PRUEBA_0000
/dev/oracleasm/disks/ASM01          NORMAL     DATA01_PRUEBA_0001

Discos candidatos

ASMCMD

ASMCMD> lsdsk --candidate -p
Group_Num  Disk_Num      Incarn  Mount_Stat  Header_Stat  Mode_Stat  State   Path
       0         5  3915953571  CLOSED      FORMER       ONLINE     NORMAL  /dev/oracleasm/disks/ASM02
       0         4  3915953570  CLOSED      FORMER       ONLINE     NORMAL  /dev/oracleasm/disks/ASM03
       0         1  3915953567  CLOSED      PROVISIONED  ONLINE     NORMAL  /dev/oracleasm/disks/ASM04
       0         0  3915953566  CLOSED      PROVISIONED  ONLINE     NORMAL /dev/oracleasm/disks/ASM05

SQLPLUS

column state format a10;
column HEADER_STATUS format a20;
column path format a30;
SQL> select STATE,PATH,HEADER_STATUS from v$asm_disk where header_status !='MEMBER';
STATE    PATH                          	 HEADER_STATUS
-------- -------------------------------------------------- ------------
NORMAL    /dev/oracleasm/disks/ASM05               PROVISIONED
NORMAL    /dev/oracleasm/disks/ASM02               FORMER
NORMAL    /dev/oracleasm/disks/ASM03               FORMER
NORMAL    /dev/oracleasm/disks/ASM04               PROVISIONED

Eliminar un Diskgroup

Para poder eliminar un diskgroup este debe de estar montado.
En caso de querer eliminarlo desmontado deberemos de ponerel flag “forcé”

SQL> drop diskgroup FSARCHPRUEBA force including contents;
Diskgroup dropped.

Creación de Diskgroup

En este caso creamos un grupo de redundancia HIGH, por lo que necesitamos 3 failure groups
SQLPLUS

CREATE DISKGROUP DATA HIGH REDUNDANCY
 FAILGROUP controller1 DISK
   '/dev/oracleasm/disks/ASM01' NAME ASM01,
   '/dev/oracleasm/disks/ASM02' NAME ASM02
FAILGROUP controller2 DISK
   '/dev/oracleasm/disks/ASM03' NAME ASM03,
   '/dev/oracleasm/disks/ASM04' NAME ASM04
FAILGROUP controller3 DISK
   '/dev/oracleasm/disks/ASM05' NAME ASM05
 ATTRIBUTE 'au_size'='4M',
   'compatible.asm' = '11.2',
   'compatible.rdbms' = '11.2';

Ahora creamos un grupo con external

CREATE DISKGROUP REDO EXTERNAL REDUNDANCY
DISK  '/dev/oracleasm/disks/REDO01' NAME REDO01
ATTRIBUTE 'au_size'='4M',
  'compatible.asm' = '11.2',
  'compatible.rdbms' = '11.2';

ASMCMD
En asmcmd la creación del diskgroup se hace mediante el comando mkdg, pero los parámetros han de ser pasados en un fichero xml

Añadir un disco

ASMCMD (Se hace mediante la sintaxsis en xml)
Chdg fichero-cambios.xml
SQLPLUS

SQL> alter diskgroup DATA01_PRUEBA add disk '/dev/oracleasm/disks/ASM05';
Diskgroup altered.
SQL> select PATH,STATE,NAME from v$asm_disk where name like '%PRUEBA%';
PATH                        		  STATE    NAME
-------------------------------------------------- -------- ------------------------------
/dev/oracleasm/disks/DATA_PRUEBA        NORMAL   DATA01_PRUEBA_0000
/dev/oracleasm/disks/ASM05              NORMAL   DATA01_PRUEBA_0002
/dev/oracleasm/disks/ASM01              NORMAL   DATA01_PRUEBA_0001
Quitamos un disco 

ASMCMD (Se hace mediante la sintaxsis en xml)
chdg fichero-cambios.xml
SQLPLUS
Para eliminarse se usa la columna NAME y no PATH


SQL> alter diskgroup DATA01_PRUEBA drop disk DATA01_PRUEBA_0001;
Diskgroup altered.

Comprobar ficheros abiertos de en ASM

ASMCMD> lsof
DB_Name  Instance_Name  Path                                                     
+ASM     +ASM2          +ocrvoting.255.4294967295                                
asmvol   +ASM2          +asmfs/ADVMFS1.256.888838797                             
prueba   prueba2        +data01_prueba/prueba/controlfile/current.256.888313451  
prueba   prueba2        +data01_prueba/prueba/datafile/sysaux.260.888313489      
prueba   prueba2        +data01_prueba/prueba/datafile/system.259.888313463      
prueba   prueba2        +data01_prueba/prueba/datafile/undotbs1.261.888313519    
prueba   prueba2        +data01_prueba/prueba/datafile/undotbs2.267.888578953    
prueba   prueba2        +data01_prueba/prueba/datafile/users.263.888313549       
prueba   prueba2        +data01_prueba/prueba/onlinelog/group_1.257.888313455    
prueba   prueba2        +data01_prueba/prueba/onlinelog/group_2.258.888313459    
prueba   prueba2        +data01_prueba/prueba/onlinelog/group_3.264.888315899    
prueba   prueba2        +data01_prueba/prueba/onlinelog/group_4.265.888315903    
prueba   prueba2        +data01_prueba/prueba/tempfile/temp.262.888313531