Dynamic Scaling - Agregar y quitar cpus según la carga que tengan los servidores
¿Cómo funciona el Dynamic Scaling?
Este componente puede ser ejecutado como daemon en uno o más nodos del VM Cluster (a mi me parece mejor tenerlo en todos los nodos) del Exadata (en la nube o cloud at customer). Lo que hace es monitorear cada cierto tiempo el uso de la cpu y si la carga de la cpu supera un umbral determinado durante un periodo de tiempo, este componente automáticamente incrementará la cantidad de cpu del VM Cluster y lo hará respetando una cantidad máxima definida por vos.
Luego si la carga de la cpu disminuye por sobre un umbral determinado durante un periodo de tiempo, este componente reducirá automáticamente la cantidad de cpu del VM Cluster y lo hará hasta una cantidad mínima definida por vos.
Incluso, si tenés un ACFS configurado, el Dynamic Scaling tendrá en consideración la carga de todos los nodos del cluster y realizará el aumento o disminución de cpu en base a la carga del cluster completo.
¿Cuáles son los requerimientos para que funcione?
OCI-client o REST-API (Yo uso REST-API porque me parece más sencillo): Para usar la REST-API necesitas descargar desde OCI una API KEY y un API KEY FINGERPRINT. Esto te lo explico en este post: ¿Cómo obtener la API KEY de un usuario en OCI?
Los servidores deben tener acceso a internet para poder interactuar con la API. El acceso puede ser a través de un proxy que tenga tu empresa.
¿Cómo instalar esta funcionalidad?
Descargar el archivo .zip correspondiente a tu sistema operativo de la nota 2719916.1
Transferir el archivo .zip a todos los servidores del VM Cluster en el directorio /tmp
Descomprimir el archivo .zip
Instalar el archivo rpm:
rpm -ivh /tmp/dynamicscaling-2.0.2-5.el7.x86_64.rpm
Crear un directorio compartido bajo el ACFS:
mkdir /acfs01/.dynamicscaling chown opc.opc /acfs01/.dynamicscaling
Crear el directorio oculto .oci dentro del home del usuario opc, donde estarán los archivos de configuración:
mkdir /home/opc/.oci
Conectarse a OCI y descargar la API KEY del usuario y el archivo config. Esta tarea la explico paso a paso en este post: ¿Cómo obtener la API KEY de un usuario en OCI?
Copiar la API KEY al directorio /home/opc/.oci y ejecutar lo siguiente:
chmod go-rwx <nombre_key>.pem
En el directorio /home/opc/.oci crear el archivo config con las lineas obtenidas en el punto 7 y en el parámetro key_file asignarle el directorio /home/opc/.oci
Factores de incremento - Clásico vs Incremental
Esto se refiere a la velocidad con la cual el Dynamic Scaling aumentará la cantidad de cpus de tu VM Cluster.
Con el factor clásico (es el default) uno le define un valor y todas las veces que el Dynamic Scaling aumente la cantidad de cpus, lo hará con ese valor. Por ejemplo, si el valor es 4, se sumarán 4 cpus cada vez que se necesite aumentar la cantidad.
Valor del Factor Clásico | Cantidad de OCPUs a agregar | |
Primera vez | 8 | 8 |
Segunda vez | 8 | 8 |
Tercera vez | 8 | 8 |
Con el factor incremental, uno le define un valor y cuando el Dynamic Scaling deba aumentar la cantidad de cpus, la primera vez lo hará con ese valor, pero la segunda vez, lo hará con el doble de ese valor, la tercera vez, lo hará con el triple de ese valor y así sucesivamente.
Valor del Factor Incremental | Cantidad de OCPUs a agregar | |
Primera vez | 8 | 8 |
Segunda vez | 8 | 16 |
Tercera vez | 8 | 24 |
Es resumen, si tu VM Cluster de repente tiene mucha carga, el Factor Incremental llegará más rápido al máximo de cpu definido por vos. Pero cuidado, porque cuanto más cpu se agregue, mayor será el costo que deba pagar tu empresa. A usarlo con responsabilidad 😉.
¿Cómo registrarla como servicio de sistema operativo para que inicie automáticamente luego de un reinicio?
Sencillo, se debe crear el archivo /etc/systemd/system/dynamicscaling.service con este contenido, adaptando los valores entre <> a tu entorno:
# Copyright (c) 2020, 2021 Oracle and/or its affiliates. All rights reserved.
#
# Oracle dynamicscaling.service
[Unit]
Description=Dynamicscaling - Scale-up and Scale-down automation utility for OCI DB System
Wants=network-online.target local-fs.target
After=network-online.target local-fs.target
[Service]
User=opc
Type=simple
Environment="HTTPS_PROXY=https://<IP>:<puerto>"
Environment="https_proxy=https://<IP>:<puerto>"
Environment="PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/dynamicscaling"
ExecStart=/bin/sh -c "/opt/dynamicscaling/dynamicscaling.bin --vm-cluster-id <ocid_vm_cluster> --ociregion <nombre_region> --tenancy-id <ocid_tenant> --user-id <ocid_usuario> --keyfingerprint <key_fingerprint> --privatekey /home/opc/.oci/<nombre_key>.pem --proxyhost <ip> --proxyport <puerto> --maxocpu 10 --minocpu 2 --ocpu 2 --acfs /acfs01/.dynamicscaling --mailx <dirección_mail> --subject <palabra de referencia> --sopnum 3"
TimeoutStartSec=300
PIDFile=/tmp/.dynamicscaling.pid
Restart=on-failure
RestartSec=5s
ExecStop=/bin/kill -s SIGINT $MAINPID
[Install]
WantedBy=multi-user.target
Luego ejecutar como root estos comandos:
systemctl daemon-reload
systemctl enable dynamicscaling.service
systemctl start dynamicscaling.service
systemctl status dynamicscaling.service
¡¡¡Y listo!!!!
Hasta el próximo post 🙂
Saludos desde Buenos Aires, Argentina.
Subscribe to my newsletter
Read articles from Facundo Ezequiel Grande directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Facundo Ezequiel Grande
Facundo Ezequiel Grande
Soy una persona, luego un ingeniero y magister que posee más de 15 años de experiencia administrando base de datos Oracle y diseñando arquitecturas para satisfacer las necesidades del negocio y también para innovar. Eventos como orador: • Speaker del Oracle Developer Community Tour 2018 • Speaker del Oracle Groundbreakers Tour 2019 LATAM Experiencia Técnica: • Oracle Cloud Infrastructure (OCI). • Exadata Cloud at Customer. • Migración de base de datos utilizando Golden Gate con corte de servicio tendiendo a cero. • Administrador de PDBaaS, dentro de una nube privada interna de Oracle. • Oracle In-Memory. • Oracle Data Masking / Oracle Data Redaction. • Automatización de aplicación de parches PSU utilizando el Cloud Control. • Actualmente me desempeño como Administrador de Bases de Datos, principalmente de Oracle, versiones 11g, 12c, 18c y 19c con arquitectura multitenant. • Utilización del comando DUPLICATE para actualizar ambientes de testeo con información productiva. • Realizo todo lo que concierne a la administración de bases de datos, como ser instalaciones de motores (Single Instance, RAC y RAC Extendido) 11g, 12c, 18c y 19c. Realizo upgrades y, migraciones de bases de datos entre servidores con distintos sistemas operativos, aplicaciones de parches PSU, CPU, OOP, respaldos y recuperaciones a través de RMAN. • Recuperación de objetos rápida y retroceso de la instancia en el tiempo utilizando la tecnología Oracle Flashback. • Creación de ambientes de contingencia utilizando Oracle Data Guard. Pruebas de Switchover y Failover. También utilizo Oracle Snapshot StandBy para aprovechar mejor estos ambientes de contingencia. • Instalación y configuración del Cloud Control 12c/13c. • Administro bases de datos que se alojan en el Oracle Exadata Machine. • Experiencia en la administración de bases de datos que soportan el sistema SAP, realizo tareas como refresh, particionamiento de tablas, etc. • Oracle Golden Gate 11g, 12c, 18c y 19c. • Sistemas operativos: AIX, Unix (HP-UX), Linux (RedHat – Centos), Windows. • Scripting en bash. • He configurado bases espejos (Stand By) de manera manual para motores con licencia Standard.