Construcción de una solución resistente a fallos basada en Oracle RAC y la arquitectura AccelStor Shared-Nothing

Un número considerable de aplicaciones Enterprise y sistemas de virtualización tienen sus propios mecanismos para construir soluciones de alta disponibilidad. En particular, Oracle RAC (Oracle Real Application Cluster) es un clúster formado por dos o más servidores de bases de datos Oracle que trabajan conjuntamente para equilibrar la carga y garantizar la alta disponibilidad a nivel de servidor/aplicación. Para operar en este modo, se necesita un almacenamiento compartido, que generalmente asume la función de un sistema de almacenamiento (СХД).

Como ya hemos discutido en uno de nuestros artículos, el sistema de almacenamiento (СХД), a pesar de contar con componentes duplicados (incluyendo los controladores), aún tiene puntos de falla, principalmente en forma de un único conjunto de datos. Por lo tanto, para construir una solución Oracle con requisitos de fiabilidad más estrictos, el esquema "N servidores – un СХД" necesita ser complejo.

Construcción de una solución resistente a fallos basada en Oracle RAC y la arquitectura AccelStor Shared-Nothing

Primero, por supuesto, debemos determinar cuáles son los riesgos de los que intentamos protegernos. En este artículo, no abordaremos la protección contra amenazas como "un meteorito ha caído". Así que la construcción de una solución de recuperación ante desastres geográficamente dispersa seguirá siendo el tema de uno de los próximos artículos. Aquí consideraremos la llamada solución de recuperación ante desastres Cross-Rack, donde la protección se construye a nivel de racks de servidores. Los racks pueden estar en una misma sala o en diferentes, pero normalmente dentro de un mismo edificio.

Estos racks deben contener todo el conjunto necesario de hardware y software que permita el funcionamiento de las bases de datos Oracle independientemente del estado del "vecino". En otras palabras, al utilizar una solución de recuperación ante desastres Cross-Rack, eliminamos los riesgos en caso de falla:

  • Servidores de aplicaciones Oracle
  • Sistemas de almacenamiento
  • Sistemas de conmutación
  • Fallo total de todo el equipo en el rack:
    • Fallo de alimentación
    • Fallo del sistema de refrigeración
    • Factores externos (humanos, naturales, etc.)

La duplicación de servidores Oracle implica el propio principio de funcionamiento de Oracle RAC y se realiza a través de la aplicación. La duplicación de los medios de conmutación tampoco representa un problema. Sin embargo, la duplicación del sistema de almacenamiento no es tan simple.

La opción más sencilla es replicar datos desde el almacenamiento principal a uno de respaldo. Puede ser sincrónica o asincrónica, dependiendo de las capacidades del almacenamiento. Con la replicación asincrónica, surge de inmediato la cuestión de asegurar la consistencia de los datos con respecto a Oracle. Pero incluso si hay una integración programática con la aplicación, en cualquier caso, ante una falla en el almacenamiento principal, se requerirá la intervención manual de los administradores para cambiar el clúster al almacenamiento de respaldo.

Una opción más complicada son los «virtualizadores» de software y/o hardware de almacenamiento que evitan problemas de consistencia y la intervención manual. Sin embargo, la complejidad de implementación y la posterior administración, así como el costo considerable de estas soluciones, ahuyentan a muchos.

Justamente para escenarios como la recuperación ante desastres Cross-Rack, la solución AccelStor NeoSapphire™ All Flash es ideal. H710 utilizando una arquitectura Shared-Nothing. Este modelo es un sistema de almacenamiento de dos nodos que emplea su propia tecnología FlexiRemap® para trabajar con unidades flash. Gracias a FlexiRemap® NeoSapphire™ H710 puede proporcionar hasta 600K IOPS@4K escritura aleatoria y 1M+ IOPS@4K lectura aleatoria, lo cual no se puede lograr con los sistemas de almacenamiento basados en RAID clásicos.

Pero la principal característica de NeoSapphire™ H710 es que ambas nodos están ejecutadas en gabinetes separados, cada uno con su propia copia de datos. La sincronización de nodos se realiza a través de una interfaz externa InfiniBand. Gracias a esta arquitectura, se pueden separar los nodos en diferentes ubicaciones a una distancia de hasta 100 m, proporcionando así la solución de recuperación ante desastres Cross-Rack. Ambos nodos funcionan completamente en modo sincrónico. Desde el punto de vista de los hosts, H710 se presenta como un almacenamiento de dos controladores normal. Por lo tanto, no es necesario realizar configuraciones adicionales complicadas ni opciones de software y hardware.

Si comparamos todas las soluciones descritas anteriormente para la recuperación ante desastres Cross-Rack, la opción de AccelStor se destaca notablemente entre las demás:

AccelStor NeoSapphire™ Arquitectura Shared Nothing
Virtualizador de almacenamiento de software o hardware
Solución basada en replicación

Disponibilidad

Fallo del servidor
Sin tiempo de inactividad
Sin tiempo de inactividad
Sin tiempo de inactividad

Fallo del conmutador
Sin tiempo de inactividad
Sin tiempo de inactividad
Sin tiempo de inactividad

Fallo del sistema de almacenamiento
Sin tiempo de inactividad
Sin tiempo de inactividad
Tiempo de inactividad

Fallo de todo el armario
Sin tiempo de inactividad
Sin tiempo de inactividad
Tiempo de inactividad

Costo y complejidad

Costo de la solución
Bajo*
Alta
Alta

Complejidad de implementación
Bajo
Alta
Alta

*AccelStor NeoSapphire™ es un sistema de almacenamiento All Flash que, por definición, no es “barato”, especialmente dado su doble capacidad. Sin embargo, al comparar el costo final de una solución basada en él con las de otros proveedores, se puede considerar que su costo es bajo.

La topología de conexión de los servidores de aplicaciones y nodos del sistema All Flash será la siguiente:

Construcción de una solución resistente a fallos basada en Oracle RAC y la arquitectura AccelStor Shared-Nothing

Al planificar la topología, también se recomienda encarecidamente realizar una duplicación de los switches de gestión y del interconexión de los servidores.

A partir de aquí y en adelante, se hablará de la conexión a través de Fibre Channel. En caso de utilizar iSCSI, será lo mismo, con la salvedad de los tipos de switches utilizados y algo de configuración diferente del sistema.

Trabajo de preparación en el sistema

Equipo y software utilizados

Especificaciones de servidores y switches

Componentes
Descripción

Servidores de Oracle Database 11g
Dos

Sistema operativo del servidor
Oracle Linux

Versión de la base de datos de Oracle
11g (RAC)

Procesadores por servidor
Dos CPU Intel® Xeon® de 16 núcleos E5-2667 v2 a 3.30GHz

Memoria física por servidor
128GB

Red FC
FC de 16Gb/s con multipathing

FC HBA
Emulex Lpe-16002B

Puertos públicos dedicados 1GbE para gestión del clúster
Adaptador Ethernet RJ45 de Intel

Switch FC de 16Gb/s
Brocade 6505

Puertos privados dedicados 10GbE para sincronización de datos
Intel X520

Especificación del sistema de almacenamiento AccelStor NeoSapphhire™ All Flash

Componentes
Descripción

Sistema de almacenamiento
Modelo de alta disponibilidad NeoSapphire™: H710

Versión de imagen
4.0.1

Número total de unidades
48

Tamaño de unidad
1.92TB

Tipo de unidad
SSD

Puertos objetivo FC
16 x 16Gb ports (8 por nodo)

Puertos de gestión
El cable Ethernet 1GbE que conecta a los hosts a través de un switch Ethernet

Puerto de latido
El cable Ethernet 1GbE que conecta entre dos nodos de almacenamiento

Puerto de sincronización de datos
Cable InfiniBand de 56Gb/s

Antes de comenzar a utilizar el sistema, es necesario inicializarlo. Por defecto, las direcciones de gestión de ambos nodos son las mismas (192.168.1.1). Se deben conectar uno por uno y asignar nuevas (ya diferentes) direcciones de gestión y configurar la sincronización de tiempo, tras lo cual los puertos de gestión se pueden conectar a una única red. Luego, se procede a unir los nodos en un par HA mediante la asignación de subredes para las conexiones Interlink.

Construcción de una solución resistente a fallos basada en Oracle RAC y la arquitectura AccelStor Shared-Nothing

Una vez completada la inicialización, se puede gestionar el sistema desde cualquier nodo.

A continuación, se crean los volúmenes necesarios y se publican para los servidores de aplicaciones.

Construcción de una solución resistente a fallos basada en Oracle RAC y la arquitectura AccelStor Shared-Nothing

Se recomienda encarecidamente crear varios volúmenes para Oracle ASM, ya que esto aumentará el número de objetivos para los servidores, lo que a su vez mejorará el rendimiento general (más sobre las colas en otra sección) el artículo).

Configuración de prueba

Nombre del volumen de almacenamiento
Tamaño del volumen

Data01
200GB

Data02
200GB

Data03
200GB

Data04
200GB

Data05
200GB

Data06
200GB

Data07
200GB

Data08
200GB

Data09
200GB

Data10
200GB

Grid01
1GB

Grid02
1GB

Grid03
1GB

Grid04
1GB

Grid05
1GB

Grid06
1GB

Redo01
100GB

Redo02
100GB

Redo03
100GB

Redo04
100GB

Redo05
100GB

Redo06
100GB

Redo07
100GB

Redo08
100GB

Redo09
100GB

Redo10
100GB

Algunas explicaciones sobre los modos de operación de la matriz y los procesos que ocurren en situaciones anormales.

Construcción de una solución resistente a fallos basada en Oracle RAC y la arquitectura AccelStor Shared-Nothing

Cada nodo tiene un parámetro de "número de versión" en su conjunto de datos. Después de la inicialización primaria, es el mismo y vale 1. Si por alguna razón el número de versión es diferente, siempre se sincronizan los datos de la versión superior a la inferior, tras lo cual el número de la inferior se ajusta, es decir, eso significa que las copias son idénticas. Las razones por las que las versiones pueden ser diferentes son:

  • Reinicio planificado de uno de los nodos.
  • Fallo en uno de los nodos debido a un apagón repentino (poder, sobrecalentamiento, etc.).
  • Interrupción de la conexión InfiniBand sin posibilidad de sincronización.
  • Fallo en uno de los nodos debido a daños en los datos. Aquí será necesario crear un nuevo grupo HA y realizar una sincronización completa del conjunto de datos.

En cualquier caso, el nodo que permanece en línea incrementa su número de versión en uno, para que después de restaurar la conexión pueda sincronizar su conjunto de datos.

Si hay una interrupción en la conexión por el enlace Ethernet, Heartbeat se cambia temporalmente a InfiniBand y regresa en 10 segundos cuando se restaura.

Configuración de hosts.

Para garantizar la tolerancia a fallos y aumentar el rendimiento, es necesario habilitar el soporte MPIO para la matriz. Para ello, hay que agregar líneas al archivo /etc/multipath.conf y luego reiniciar el servicio multipath.

Texto ocultodevices {
device {
vendor "AStor"
path_grouping_policy "group_by_prio"
path_selector "queue-length 0"
path_checker "tur"
features "0"
hardware_handler "0"
prio "const"
failback immediate
fast_io_fail_tmo 5
dev_loss_tmo 60
user_friendly_names yes
detect_prio yes
rr_min_io_rq 1
no_path_retry 0
}
}

A continuación, para que ASM trabaje con MPIO a través de ASMLib, es necesario modificar el archivo /etc/sysconfig/oracleasm y luego ejecutar /etc/init.d/oracleasm scandisks.

Texto oculto

# ORACLEASM_SCANORDER: Matching patterns to order disk scanning
ORACLEASM_SCANORDER="dm"

# ORACLEASM_SCANEXCLUDE: Matching patterns to exclude disks from scan
ORACLEASM_SCANEXCLUDE="sd"

Nota

Si no se desea utilizar ASMLib, se pueden utilizar reglas UDEV, que son la base para ASMLib.

A partir de la versión 12.1.0.2, la opción de Oracle Database está disponible para instalar como parte del software ASMFD.

Es importante asegurarse de que los discos creados para Oracle ASM estén alineados con respecto al tamaño del bloque con el que trabaja físicamente la matriz (4K). De lo contrario, pueden surgir problemas de rendimiento. Por lo tanto, es necesario crear volúmenes con los parámetros adecuados:

parted /dev/mapper/device-name mklabel gpt mkpart primary 2048s 100% align-check optimal 1

Distribución de bases de datos en los volúmenes creados para nuestra configuración de prueba

Nombre del volumen de almacenamiento
Tamaño del volumen
Mapeo de LUNs de volumen
Detalles del dispositivo de volumen ASM
Tamaño de unidad de asignación

Data01
200GB
Mapear todos los volúmenes de almacenamiento a todos los puertos de datos del sistema de almacenamiento
Redundancia: Normal
Nombre: DGDATA
Propósito: Archivos de datos

4MB

Data02
200GB

Data03
200GB

Data04
200GB

Data05
200GB

Data06
200GB

Data07
200GB

Data08
200GB

Data09
200GB

Data10
200GB

Grid01
1GB
Redundancia: Normal
Nombre: DGGRID1
Propósito: Grid: CRS y votación

4MB

Grid02
1GB

Grid03
1GB

Grid04
1GB
Redundancia: Normal
Nombre: DGGRID2
Propósito: Grid: CRS y votación

4MB

Grid05
1GB

Grid06
1GB

Redo01
100GB
Redundancia: Normal
Nombre: DGREDO1
Propósito: Registro de reenvío del hilo 1

4MB

Redo02
100GB

Redo03
100GB

Redo04
100GB

Redo05
100GB

Redo06
100GB
Redundancia: Normal
Nombre: DGREDO2
Propósito: Registro de reenvío del hilo 2

4MB

Redo07
100GB

Redo08
100GB

Redo09
100GB

Redo10
100GB

Configuraciones de la base de datos

  • Tamaño de bloque = 8K
  • Espacio de intercambio = 16GB
  • Deshabilitar AMM (Gestión automática de memoria)
  • Deshabilitar Transparent Huge Pages

Otras configuraciones

# vi /etc/sysctl.conf
✓ fs.aio-max-nr = 1048576
✓ fs.file-max = 6815744
✓ kernel.shmmax 103079215104
✓ kernel.shmall 31457280
✓ kernel.shmmn 4096
✓ kernel.sem = 250 32000 100 128
✓ net.ipv4.ip_local_port_range = 9000 65500
✓ net.core.rmem_default = 262144
✓ net.core.rmem_max = 4194304
✓ net.core.wmem_default = 262144
✓ net.core.wmem_max = 1048586
✓ vm.swappiness=10
✓ vm.min_free_kbytes=524288 # no establecer esto si estás usando Linux x86
✓ vm.vfs_cache_pressure=200
✓ vm.nr_hugepages = 57000

# vi /etc/security/limits.conf
✓ grid soft nproc 2047
✓ grid hard nproc 16384
✓ grid soft nofile 1024
✓ grid hard nofile 65536
✓ grid soft stack 10240
✓ grid hard stack 32768
✓ oracle soft nproc 2047
✓ oracle hard nproc 16384
✓ oracle soft nofile 1024
✓ oracle hard nofile 65536
✓ oracle soft stack 10240
✓ oracle hard stack 32768
✓ soft memlock 120795954
✓ hard memlock 120795954

sqlplus “/as sysdba”
alter system set processes=2000 scope=spfile;
alter system set open_cursors=2000 scope=spfile;
alter system set session_cached_cursors=300 scope=spfile;
alter system set db_files=8192 scope=spfile;

Prueba de resiliencia

Para la demostración se utilizó HammerDB para emular la carga OLTP. Configuración de HammerDB:

Número de almacenes
256

Transacciones totales por usuario
1000000000000

Usuarios virtuales
256

Como resultado se obtuvo un indicador de 2.1M TPM, lo que está lejos del límite de rendimiento del arreglo H710, pero es el "techo" para la configuración de hardware actual de los servidores (principalmente debido a los procesadores) y su cantidad. El objetivo de esta prueba sigue siendo demostrar la resiliencia de la solución en general, no alcanzar máximos de rendimiento. Así que simplemente partiremos de este número.

Construcción de una solución resistente a fallos basada en Oracle RAC y la arquitectura AccelStor Shared-Nothing

Prueba de falla de uno de los nodos

Construcción de una solución resistente a fallos basada en Oracle RAC y la arquitectura AccelStor Shared-Nothing

Construcción de una solución resistente a fallos basada en Oracle RAC y la arquitectura AccelStor Shared-Nothing

Los hosts perdieron parte de las rutas al almacenamiento, continuando trabajando a través de las restantes con el segundo nodo. El rendimiento cayó por unos segundos debido a la reconfiguración de rutas, y luego volvió a los niveles normales. No hubo interrupciones en el servicio.

Prueba de falla del armario con todo el equipo

Construcción de una solución resistente a fallos basada en Oracle RAC y la arquitectura AccelStor Shared-Nothing

Construcción de una solución resistente a fallos basada en Oracle RAC y la arquitectura AccelStor Shared-Nothing

En este caso, el rendimiento también cayó por unos segundos debido a la reconfiguración de rutas, y luego volvió a la mitad del valor inicial. El resultado se redujo a la mitad de lo original debido a la exclusión de un servidor de aplicaciones. No hubo interrupciones en el servicio.

Si tiene necesidades de implementar una solución de recuperación ante desastres Cross-Rack con alta disponibilidad para Oracle a un costo razonable y con un esfuerzo mínimo de implementación/administración, la colaboración entre Oracle RAC y la arquitectura AccelStor Shared-Nothing será una de las mejores opciones. En lugar de Oracle RAC, se puede utilizar cualquier otro software que contemple la agrupación, así como las mismas bases de datos o sistemas de virtualización, por ejemplo. El principio de construcción de la solución seguirá siendo el mismo. Y la métrica final será un valor cero para RTO y RPO.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster