jueves, 23 de julio de 2015

AGREGANDO DISCOS EN ORACLE RAC 11gr2 CON ASMLIB

Que tal amigos!

Después de realizarse la instalación de un RAC Oracle 11gr2 en plataforma Linux-Suse, recibimos un requerimiento para incrementar el storage de la base de datos productiva. La configuración discos se realizó por medio de las librerías 'asmlib'. Esta son opcionales y únicamente se encuentran disponibles para plataformas Linux.

Durante años la ventaja de utilizar 'ASM' para eliminar la necesidad de utilizar 'filesystems', no fue explotada completamente debido a la práctica muy común entre los administradores de arquitecturas 'SAN' de agrupar los discos en grupo de volúmenes o 'volumen groups' y posteriormente generar particiones o 'logical volumens' que eran asignadas al 'ASM', para que a su vez estas particiones fueran asignadas a 'diskgroups' Oracle.

Por decirlo así, se realizaban grupos de discos a 'nivel Oracle'  sobre los grupos a 'nivel Linux', cuando únicamente deberían existir los 'diskgroups' de Oracle.

Regresando a nuestro ejercicio,  se tienen que adicionar los discos con todos los servicios en línea, incluyendo la base de datos, con los siguientes pasos:

1.- Validación de asmlib activo

En este caso, por ser una adición de discos, ya se tiene configurado el 'asmlib' incluyendo las siguientes librerías, validadas con el comando 'rpm -qa | grep asm'.

#rpm -qa | grep asm
oracleasmlib-2.0.4-1.SLE11
oracleasm-2.0.5-7.37.3               
oracleasm-support-2.1.8-1.SLE11

Todos los comandos de 'asmlib' son ejecutados con el usuario 'root'. Con el siguiente comando validamos que 'asmlib' se encuentre activo previo a la asignación de más de discos:

oracle@l:/rac1>
#/usr/sbin/oracleasm status
Checking if ASM is loaded: yes
Checking if /dev/oracleasm is mounted: yes

Cuando se instala el 'asmlib', automáticamente genera el filesystem 'oracleasmfs' montado sobre la ruta '/dev/oracleasm', el cual puede ser validado con la ejecución del comando df -ha.

Hasta este momento se verificó que se tienen activos todos servicios del 'asmlib'.

2.- Validación de discos  o 'LUNS' de la 'SAN' en ambos nodos

Ahora es momento de validar los nuevos discos. En nuestro caso, los discos que vamos a adicionar con 'asmlib' se encuentran sobre arquitectura 'SAN', en plataforma EMC Symmetric Vmax.

Se nos proporciona la siguiente lista con 6 'discos' o 'LUNS' SAS FC a 15 RPM que deberán ser agregados  utilizando 'asmlib'

emcpowerba
emcpowerbb
emcpowerbc
emcpowerbd
emcpowerbe
emcpowerbf

Estos discos también son conocidos como 'LUNS' o 'Logical Units Number'. Estas son particiones generadas en la misma 'SAN' en una capa anterior al sistema operativo.

X ejemplo: en nuestro caso nos asignaron seis 'LUNS', siendo que a nivel 'SAN' son únicamente dos discos físicos de 150 GB cada uno:

DISCO                                                                    LUN              TAMAÑO X LUN EN GB
--------------------------------------------------------------------------------------------------------------
Disco fisco /dev/sda de 150 GB                             emcpowerba              50
                                                                                emcpowerbb             50
                                                                                emcpowerbc             50
Disco fisco /dev/sdb de 150 GB                              emcpowerbd             50
                                                                                emcpowerbe              50
                                                                                emcpowerbf              50
--------------------------------------------------------------------------------------------------------------
Total discos físicos    300 GB                                 Total Luns                      300 GB


Al final, el sistema operativo va a 'ver' las 'LUNS' como discos físicos y finalmente las 'LUNS' serán asignadas al 'asmlib'.

El siguiente paso es validar si podemos 'ver' las 'LUNS' por medio del comando 'ls -l'. El listado nos muestra las 'LUNS' del rango 'ba' a 'bf'. La nomenclatura 'emcpower' nos indica que se tienen dos canales de fibra óptica por cada disco físico, para fines de redundancia. El software de 'EMC' llamado 'power path' es el encargado de manejar este tipo de configuración.

Ejecución del comando 'ls -l' ejecutado en el nodo uno:
   
root@rac1:>ls -l /dev/emcpowerb*
brw-rw---- 1 root disk 120,  832 Jul 17 17:40 /dev/emcpowerba
brw-rw---- 1 root disk 120,  848 Jul 17 17:40 /dev/emcpowerbb
brw-rw---- 1 root disk 120,  864 Jul 17 17:40 /dev/emcpowerbc
brw-rw---- 1 root disk 120,  880 Jul 17 17:40 /dev/emcpowerbd
brw-rw---- 1 root disk 120,  896 Jul 17 17:40 /dev/emcpowerbe
brw-rw---- 1 root disk 120,  912 Jul 17 17:40 /dev/emcpowerbf

Ejecución del comando 'ls -l' ejecutado en el nodo dos, donde se valida que están utilizando los mismos discos que en él nodo uno.

root@rac2:>ls -l /dev/emcpowerb*
brw-rw---- 1 root disk 120,  832 Jul 17 17:38 /dev/emcpowerba
brw-rw---- 1 root disk 120,  848 Jul 17 17:38 /dev/emcpowerbb
brw-rw---- 1 root disk 120,  864 Jul 17 17:38 /dev/emcpowerbc
brw-rw---- 1 root disk 120,  880 Jul 17 17:38 /dev/emcpowerbd
brw-rw---- 1 root disk 120,  896 Jul 17 17:38 /dev/emcpowerbe
brw-rw---- 1 root disk 120,  912 Jul 17 17:40 /dev/emcpowerbf

3.- Particionamiento de los discos con 'fdisk' únicamente en el nodo uno del RAC

El siguiente paso es particionar las seis 'LUNS' con el comando 'fdisk'. Este se realizara únicamente en el nodo uno del 'RAC'. En este punto es importante no particionar por error una de las 'LUNS' ya existentes y asignadas al 'ASM'.  En las opciones 'First Sector' y 'Last sector' se va a teclear 'enter' para que tome por default el tamaño completo de la 'LUN' en una sola partición de tipo 'primary'. El siguiente ejemplo muestra el particionamiento de la 'LUN' '/dev/emcpowerba'

fdisk /dev/emcpowerba
Command (m for help): u
Changing display/entry units to sectors
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First sector (61-1048575, default 61):
Last sector or +size or +sizeM or +sizeK (2048-5048575, default 5048575):
Using default value 5048575                   
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

El comando 'fdisk' nos va a generar el archivo '/dev/emcpowerba1', el cual va a ser asignado al 'asmlib':

root@lnx:/rac1> ls -l emcpowerba*
brw-rw---- 1 root disk 120,  832 Jul 17 17:40 emcpowerba
brw-rw---- 1 root disk 120,  833 Jul 17 17:40 emcpowerba1

Es conveniente validar la partición generada con el comando 'fdisk -l', donde podemos visualizar en la columna 'Device Boot' la partición generada:

rac1:~ # fdisk -l /dev/emcpowerba

Disk /dev/emcpowerba: 53.7 GB, 53687746560 bytes
40 heads, 32 sectors/track, 81921 cylinders, total 104858880 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfff072fe

Device Boot       Start         End      Blocks    Id  System
/dev/emcpowerba1  2048     104858879    52428416   83  Linux

Este procedimiento se va a ejecutar sobre las seis 'LUNS' asignadas. Si ejecutamos el comando 'fdisk -l /dev/emcpowerba' en el nodo dos del 'RAC', nos indicara que no existe la partición. Más adelante el comando '#usr/sbin/oracleasm scandisks' se encarga de actualizar las particiones en el nodo dos.

4.- Ejecución del comando 'createdisk' con 'asmlib'

Con el usuario 'root' vamos a ejecutar el comando de 'asmlib''createdisk' para etiquetar las particiones de las 'LUNS' previamente generadas únicamente en el nodo uno.

root@rac1>
 #/usr/sbin/oracleasm createdisk DGDAT07 /dev/emcpowerba1
#/usr/sbin/oracleasm createdisk DGDAT08 /dev/emcpowerbb1
#/usr/sbin/oracleasm createdisk DGDAT09 /dev/emcpowerbc1
#/usr/sbin/oracleasm createdisk DGDAT010 /dev/emcpowerbd1
#/usr/sbin/oracleasm createdisk DGDAT011 /dev/emcpowerbe1
#/usr/sbin/oracleasm createdisk DGDAT012 /dev/emcpowerbf1
   
5.- Ejecución del comando '#/usr/sbin/oracleasm listdisks' en el nodo uno.

EL comando 'listdisks' nos va a desplegar los discos generados por 'asmlib', incluyendo los discos etiquetados anteriormente:

root@rac1>
#/usr/sbin/oracleasm listdisks  
DGDAT01
DGDAT02
DGDAT03
DGDAT04
DGDAT05
DGDAT06
DGDAT07
DGDAT08
DGDAT09
DGDAT010
DGDAT011
DGDAT012

6.- Ejecución del comando '/usr/sbin/oracleasm scandisks' únicamente en el nodo dos

En este caso NO fue requerida la ejecución del comando '/sbin/partprobe' para actualización de la tabla de particiones.  Ejecutamos el comando '/usr/sbin/oracleasm scandisks' en el nodo dos:

root@rac2>
#/usr/sbin/oracleasm scandisks

Reloading disk partitions: done
Cleaning any stale ASM disks ...
Scanning system for ASM disks ...
Instantiating disk "DGDAT07"
Instantiating disk "DGDAT08"
Instantiating disk "DGDAT09"
Instantiating disk "DGDAT010"
Instantiating disk "DGDAT011"
Instantiating disk "DGDAT012"

Una vez finalizada la ejecución del comando, en el mismo nodo dos, validamos que se encuentren accesibles los nuevos discos etiquetados por 'asmlib':

 #/usr/sbin/oracleasm listdisks  
DGDAT01
DGDAT02
DGDAT03
DGDAT04
DGDAT05
DGDAT06
DGDAT07
DGDAT08
DGDAT09
DGDAT010
DGDAT011
DGDAT012

El comando 'fdisk -l /dev/emcpowerba' ejecutado en él nodo dos, nos mostrara la particiones, ya que el comando'/usr/sbin/oracleasm scandisks' se encargó de actualizar la tabla de particiones sin necesidad de reiniciar los dos nodos de Linux.

7.- Adicionar los discos al diskgroup DATA

Una vez validados los discos en ambos nodos del clúster, ingresamos con él usuario ‘grid’, con las variables de ambiente para conectarse a la instancia de ‘ASM’  en el nodo uno con el comando ‘sqlplus  /as sysasm’ . Generamos el script agregando el prefijo ‘ORCL:’  que Oracle agrega a los discos cuando son configurados por medio de ‘asmlib’.

ALTER DISKGROUP DATA ADD DISK             
'ORCL: DGDAT07',
'ORCL: DGDAT08',
'ORCL: DGDAT09',
'ORCL: DGDAT010',
'ORCL: DGDAT011’,
'ORCL: DGDAT012'
REBALANCE POWER 10;

Monitoreamos la ejecución por medio de la vista ‘gv$asm_operation’,  donde nos muestra un estimado de 10 minutos para efectuar el rebalanceo de discos

SQL> select group_number, operation, state, est_minutes, inst_id from gv$asm_operation;

GROUP_NUMBER  OPERATION   STATE    EST_MINUTES    INST_ID
---------------------  ---------------   -------    -----------------     ----------
           1                             REBAL            RUN            10                          1
           1                             REBAL            WAIT                                         2


Después de 10 minutos efectuamos nuevamente la consulta, al no retornar registros se da por finalizado el proceso de adición de discos.

SQL> select group_number, operation, state, est_minutes, inst_id from gv$asm_operation;

No rows selected

EL incremento de discos se puede realizar por medio de la utilería ‘asmca’ con la limitante de no poder especificar el grado de rebalanceo.   En él parámetro ‘asm_power_limit’ de la instancia de ‘ASM’ tenemos el valor por default que es 1. Sin embargo, en este caso no limito el grado de rebalanceo utilizado, que fue de 10. 

SQL> show parameter power

NAME                                             TYPE            VALUE
------------------------------------ ----------- ------------------------------
asm_power_limit                      integer            1  

Algunas notas de Oracle nos indican que hay que actualizar el parámetro ‘asm_diskstring’ con el valor de ‘ORCL:*’. En este caso no se actualizó este parámetro.  Después de agregar los discos, se reiniciaron los dos nodos del ‘RAC’ y no se tuvieron problemas para levantar las dos instancias de ‘ASM’, por lo que abra que revisar en detalle las notas de ‘metalink’ para validar su efecto.

SQL> show parameter asm_diskstring

NAME                                                      TYPE        VALUE
------------------------------------ ----------- ------------------------------
asm_diskstring                                   string
  
Conclusiones

El adicionar discos a una configuración ya existente por medio de ‘asmlib’ presenta algunas ventajas: 
  • Persistencia de discos.  Los discos utilizados por ‘ASM’ tendrán un nombre fijo, sin importar cuantas veces se reinicien los equipos.
  •  No es necesario utilizar ‘discovery path’ ya que de forma automática se detectan los discos.
  • No es requerido cambiar los dueños de los discos a nivel sistema operativo, con chown oracle:oinstall.
  • La opción ‘scandisks’ facilita la actualización de tabla de particiones en ambientes ‘RAC’.
  • A pesar de la ‘persistencia’ de los discos, el reinicio de los servidores se realiza en tiempos aceptables.


 Saludos!

José Manuel Vizcaíno Culebra

Contacto servicios profesionales

jose.vizcainoculebra@gmail.com

5532439143 Ciudad de México.