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.