sql >> Base de Datos >  >> RDS >> PostgreSQL

Desafíos de escalar la base de datos PostgreSQL de Moodle

Moodle es el sistema de gestión de aprendizaje (LMS) más popular que permite a los educadores crear su propio sitio web con cursos o contenido que amplía el aprendizaje. Este tipo de plataformas son cada vez más importantes para permitirle continuar aprendiendo de forma remota cuando el sistema educativo tradicional no está disponible o simplemente como un complemento del mismo, por lo que el aumento del tráfico o los usuarios requieren escalar su entorno para garantizar una baja respuesta. tiempo.

La escalabilidad es la propiedad de un sistema/base de datos para manejar una cantidad creciente de demandas mediante la adición de recursos. Existen diferentes enfoques disponibles para escalar su base de datos según la forma en que necesite escalarla y, en un entorno de producción, lo más probable es que no se desee un tiempo de inactividad prolongado, por lo que también debe tener esto en cuenta.

En este blog, veremos qué opciones de escala están disponibles y cómo escalar su base de datos Moodle PostgreSQL de una manera fácil sin afectar su sistema en ejecución.

Escalado horizontal y escalado vertical

Hay dos formas principales de escalar su base de datos:

  • Escalado horizontal (scale-out):se realiza agregando más nodos de base de datos creando o aumentando un clúster de base de datos.
  • Escalado vertical (ampliación):se realiza agregando más recursos de hardware (CPU, memoria, disco) a un nodo de base de datos existente.

Para escalado horizontal , puede agregar más nodos de base de datos como nodos en espera. Puede ayudarlo a mejorar el rendimiento de lectura equilibrando el tráfico entre los nodos. En este caso, deberá agregar un balanceador de carga para distribuir el tráfico al nodo correcto según la política y el estado del nodo. También debe considerar agregar dos o más nodos de equilibrador de carga para evitar un único punto de falla y usar una herramienta como "Keepalived" para garantizar la disponibilidad. Keepalived es un servicio que le permite configurar una dirección IP virtual dentro de un grupo de servidores activo/pasivo. Esta dirección IP virtual se asigna a un servidor activo (Equilibrador de carga activo). Si este servidor falla, la dirección IP se migra automáticamente al servidor pasivo "Secundario", lo que le permite continuar trabajando con la misma dirección IP de forma transparente para los sistemas.

Para escalado vertical , podría ser necesario cambiar algunos parámetros de configuración para permitir que PostgreSQL use un recurso de hardware nuevo o mejor. Veamos algunos de estos parámetros de la documentación de PostgreSQL.

  • work_mem:especifica la cantidad de memoria que usarán las operaciones de clasificación interna y las tablas hash antes de escribir en archivos de disco temporales. Varias sesiones en ejecución podrían estar realizando este tipo de operaciones al mismo tiempo, por lo que la memoria total utilizada podría ser muchas veces el valor de work_mem.
  • maintenance_work_mem:especifica la cantidad máxima de memoria que usarán las operaciones de mantenimiento, como VACUUM, CREATE INDEX y ALTER TABLE ADD FOREIGN KEY. Las configuraciones más grandes pueden mejorar el rendimiento para la limpieza y la restauración de volcados de bases de datos.
  • autovacuum_work_mem:especifica la cantidad máxima de memoria que utilizará cada proceso de trabajo de autovacuum.
  • autovacuum_max_workers:especifica el número máximo de procesos de autovacuum que pueden estar ejecutándose en cualquier momento.
  • max_worker_processes:establece la cantidad máxima de procesos en segundo plano que el sistema puede admitir. Especifique el límite del proceso como aspiración, puntos de control y más trabajos de mantenimiento.
  • max_parallel_workers:establece la cantidad máxima de trabajadores que el sistema puede admitir para operaciones paralelas. Los trabajadores paralelos se toman del conjunto de procesos de trabajo establecidos por el parámetro anterior.
  • max_parallel_maintenance_workers:establece la cantidad máxima de trabajadores paralelos que se pueden iniciar con un solo comando de utilidad. Actualmente, el único comando de utilidad paralela que admite el uso de trabajadores paralelos es CREATE INDEX, y solo cuando se crea un índice de árbol B.
  • effect_cache_size:establece la suposición del planificador sobre el tamaño efectivo de la caché de disco que está disponible para una sola consulta. Esto se tiene en cuenta en las estimaciones del costo de usar un índice; un valor más alto hace que sea más probable que se usen escaneos de índice, un valor más bajo hace que sea más probable que se usen escaneos secuenciales.
  • shared_buffers:establece la cantidad de memoria que utiliza el servidor de la base de datos para los búferes de memoria compartida. Por lo general, se necesitan configuraciones significativamente más altas que el mínimo para un buen rendimiento.
  • temp_buffers:establece el número máximo de búferes temporales utilizados por cada sesión de base de datos. Estos son búferes locales de sesión que se usan solo para acceder a tablas temporales.
  • efective_io_concurrency:establece la cantidad de operaciones de E/S de disco simultáneas que PostgreSQL espera que se puedan ejecutar simultáneamente. Elevar este valor aumentará la cantidad de operaciones de E/S que cualquier sesión individual de PostgreSQL intenta iniciar en paralelo. Actualmente, esta configuración solo afecta a los análisis de montón de mapas de bits.
  • max_connections:determina el número máximo de conexiones simultáneas al servidor de la base de datos. El aumento de este parámetro permite que PostgreSQL ejecute más procesos de back-end simultáneamente.

El desafío aquí puede ser cómo saber si necesita escalar su base de datos de Moodle y de qué manera, y la respuesta es Monitoreo.

Monitoreo de PostgreSQL para Moodle

Escalar una base de datos es un proceso complejo, por lo que debe verificar algunas métricas para poder determinar la mejor estrategia para escalarla.

Puede monitorear el uso de la CPU, la memoria y el disco para determinar si hay algún problema de configuración o si realmente necesita escalar su base de datos. Por ejemplo, si ve una carga alta en el servidor pero la actividad de la base de datos es baja, probablemente no sea necesario escalarlo, solo necesita verificar los parámetros de configuración para que coincidan con sus recursos de hardware.

Verificar el espacio en disco utilizado por el nodo PostgreSQL por base de datos puede ayudarlo a confirmar si necesita más disco o incluso una partición de tabla. Para verificar el espacio en disco utilizado por una base de datos/tabla, puede usar alguna función de PostgreSQL como pg_database_size o pg_table_size.

Desde el lado de la base de datos, debe verificar:

  • Cantidad de conexión
  • Ejecución de consultas
  • Uso del índice
  • Inflar
  • Retraso de replicación

Estas podrían ser métricas claras para confirmar si es necesario escalar su base de datos.

ClusterControl como Sistema de Monitoreo y Escalado

ClusterControl puede ayudarlo a hacer frente a las dos formas de escalado que mencionamos anteriormente y a monitorear todas las métricas necesarias para confirmar el requisito de escalado.

Si aún no usa ClusterControl, puede instalarlo e implementar o importar su base de datos PostgreSQL actual seleccionando la opción "Importar" y siga los pasos para aprovechar todas las funciones de ClusterControl, como copias de seguridad, failover automático, alertas, monitoreo y más.

Escalado horizontal

Para el escalado horizontal, si va a acciones de clúster y selecciona "Agregar esclavo de replicación", puede crear una nueva réplica desde cero o agregar una base de datos PostgreSQL existente como réplica.

Veamos cómo agregar un nuevo esclavo de replicación puede ser una tarea realmente fácil.

Como puedes ver en la imagen, solo necesitas elegir tu Master servidor, ingrese la dirección IP para su nuevo servidor esclavo y el puerto de la base de datos. Luego, puede elegir si desea que ClusterControl instale el software por usted y si el esclavo de replicación debe ser síncrono o asíncrono.

De esta manera, puede agregar tantas réplicas como desee y distribuir el tráfico de lectura entre ellas mediante un balanceador de carga, que también puede implementar con ClusterControl.

Ahora, si va a las acciones del clúster y selecciona "Agregar Load Balancer", puede implementar un nuevo HAProxy Load Balancer o agregar uno existente.

Y luego, en la misma sección del balanceador de carga, puede agregar un Keepalived servicio que se ejecutará en los nodos del equilibrador de carga para mejorar su entorno de alta disponibilidad.

Después de agregar un Load Balancer o usar una IP virtual que tenga el servicio Keepalived en lugar, debe actualizar su configuración de Moodle para usar el nuevo punto final de la base de datos. Para ello, vaya a su directorio raíz de Moodle y modifique el archivo config.php con la nueva dirección IP:

$CFG->dbhost    = 'IP_ADDRESS';

$CFG->dbname    = 'moodle';

$CFG->dbuser    = 'mdluser';

$CFG->dbpass    = '********';

$CFG->prefix    = 'mdl_';

$CFG->dboptions = array (

  'dbpersist' => 0,

  'dbport' => PORT,

  'dbsocket' => '',

);

Asegúrese de que puede acceder a su base de datos a través del Load Balancer o la dirección IP virtual, o si necesita actualizar su archivo pg_hba.conf PostgreSQL para permitirlo.

Escalado vertical

Para el escalado vertical, con ClusterControl puede monitorear los nodos de su base de datos tanto desde el sistema operativo como desde el lado de la base de datos. Puede verificar algunas métricas como el uso de la CPU, la memoria, las conexiones, las consultas principales, las consultas en ejecución y aún más. También puedes habilitar la sección Dashboard, que te permite ver las métricas de una forma más detallada y amigable.

Desde ClusterControl, también puede realizar diferentes tareas de administración como Reiniciar Host, Reconstruir Esclavo de replicación o Esclavo de promoción con un solo clic.

Conclusión

Escalar su base de datos Moodle PostgreSQL puede ser una tarea difícil, ya que necesitará saber cómo necesita escalar y cómo hacerlo sin afectar los sistemas. Tener un buen sistema de monitoreo es el primer paso para saber cuándo y cómo necesita escalar su base de datos de Moodle. Agregar un Load Balancer lo ayudará a evitar tiempos de inactividad innecesarios y también mejorará la alta disponibilidad en su entorno LMS.

Todas estas cosas que mencionamos se pueden hacer usando ClusterControl, lo que facilitará el trabajo. ClusterControl ofrece una amplia gama de funciones, como supervisión, alertas, conmutación por error automática, copia de seguridad, recuperación de un momento dado, verificación de copia de seguridad, escalado y más.