Administrar aplicaciones con estado, como bases de datos en Kubernetes, puede resultar un desafío. Los operadores agrupan el conocimiento práctico en soluciones que automatizan las tareas de gestión.
El uso del operador MySQL simplifica la implementación y expansión de un clúster MySQL listo para producción. También permite una alta disponibilidad al replicar pods que alojan la base de datos y permite realizar copias de seguridad y recuperación.
Clúster InnoDB
Haroon Khan es un profesional de datos que crea y mantiene bases de datos que admiten aplicaciones de alto rendimiento. Tiene más de una década de experiencia con diversas tecnologías, incluidas MySQL, Microsoft SQL Server, DB2 y herramientas de código abierto.
Le apasiona ayudar a las empresas a adoptar una arquitectura de datos moderna que pueda manejar amplios requisitos de datos. InnoDB Cluster es un componente fundamental en este esfuerzo y ofrece una escalabilidad de escritura mejorada. Sin embargo, implementarlo puede resultar un desafío si necesita familiarizarse con sus diversos componentes.
Además, es posible que se requieran varias herramientas para administrar la topología. Es posible que esta solución no sea adecuada para su aplicación si no desea invertir en el tiempo de desarrollo/integración/prueba de cada tecnología. Aquí es donde brilla la brújula Kubernetes de Haroon.
Él cree que escalar su MySQL con InnoDB Cluster debería ser independiente de escalar su complejidad. Por eso aboga por la integración con MySQL Operador Kubernetes. Esta poderosa combinación combina el poder del InnoDB Cluster con la elegancia de Kubernetes, simplificando la administración y la orquestación de una sola vez.
Si se reinicia una instancia, abandona el grupo y debe volver a unirse al grupo para volver a agregarse al conjunto de réplicas predeterminado. Para volver a unirse a un ejemplo, puede utilizar el comando cluster.rejoinInstance(), que toma un URI como parámetro. Este comando garantiza que la instancia esté EN LÍNEA y pueda agregarse al grupo.
También verifica que no seas un Split Brain (comparando tus GTID ejecutados con los GTID ejecutados/purgados de otros miembros EN LÍNEA). El comando puede fallar si no se puede acceder a una instancia, pero puede volver a intentarlo más tarde.
PodDisruptionPresupuesto
Un presupuesto de interrupción de pod (PDB) especifica el número mínimo o porcentaje de pods en una colección que siempre deben estar activos. Es una herramienta valiosa cuando se trata de aplicaciones que requieren alta disponibilidad, como aplicaciones basadas en quórum o interfaces web.
Los presupuestos de interrupción de pod ayudan a garantizar que las operaciones de nodo solo reduzcan su servicio al agotar simultáneamente algunas instancias de pod. Trabajan junto con el escalador automático de pod horizontal para proteger contra tiempos de inactividad de implementación innecesarios.
Para utilizar una PDB, debe crear un archivo YAML que defina la disponibilidad deseada para su aplicación. También puede definir un objeto PodDisruptionBudgetStatus para realizar un seguimiento del estado actual de su PDB. Esto puede resultar útil cuando se trata de situaciones cambiantes, ya que el estado de su PDB puede retrasarse con respecto al estado real.
Los presupuestos de interrupción del pod son útiles para las aplicaciones que necesitan mantener su disponibilidad mientras se realizan las actualizaciones del clúster. Por ejemplo, una empresa de telecomunicaciones puede querer asegurarse de que sus servicios VoIP permanezcan disponibles durante el mantenimiento o la aplicación de parches al sistema.
Esto permite a las empresas de telecomunicaciones implementar funciones que pueden mejorar la experiencia del usuario final sin sacrificar la disponibilidad. PodDisruptionBudget también es útil para proveedores de software como servicio (SaaS) que deben equilibrar la disponibilidad con las actualizaciones y el mantenimiento del sistema. Esto es especialmente cierto cuando un proveedor de SaaS necesita mantener la disponibilidad mientras lanza una nueva función o implementa actualizaciones de su servicio.
Conjuntos de réplicas
Los ReplicationSets son objetos de control de Kubernetes que contienen un número específico de réplicas de pods. Son excelentes para manejar necesidades simples de escalabilidad y pueden ayudar a garantizar una alta disponibilidad y resiliencia.
Los ReplicaSets también pueden manejar cambios en el estado deseado, como la falla de un pod o la eliminación manual de un pod, la creación de nuevos pods para reemplazarlos o la finalización de réplicas sobrantes para que el sistema vuelva al estado deseado.
Los ReplicaSets se configuran en un archivo de manifiesto YAML, incluidas las especificaciones para la cantidad de réplicas y el modelo de pod. También admiten el uso de etiquetas de pods para identificar y seleccionar los pods que administran.
Por ejemplo, un ReplicationSet podría adquirir todos los pods con la capa de etiqueta en (frontend) y el entorno en (prod). Un ReplicationSet también puede realizar un seguimiento de los cambios en el estado deseado consultando el registro de operaciones o el registro de problemas de escritura principal.
Cuando un primario falla en un conjunto de réplicas, el secundario que elige convertirse en el nuevo primario se actualiza aplicando las operaciones registradas a sus conjuntos de datos. Además, un ReplicaSet puede precalentar las cachés de réplicas secundarias elegibles reflejando consultas de lectura.
Esto reduce el impacto de las elecciones primarias después de una interrupción primaria o durante el mantenimiento planificado. Los ReplicaSets también se pueden implementar en múltiples nodos y zonas de disponibilidad para mejorar la redundancia.
Copias de seguridad
Existen muchas soluciones para ejecutar bases de datos con estado en Kubernetes, pero la mayoría necesita funciones del segundo día, como copias de seguridad y actualizaciones.
Los operadores de Kubernetes cierran esta brecha al automatizar y simplificar operaciones complejas específicas del dominio, incluida la implementación, el escalado y la actualización de bases de datos.
Los mejores operadores de MySQL están diseñados para integrarse estrechamente con herramientas de infraestructura como código y canalizaciones de CI/CD existentes para permitir implementaciones de bases de datos escalables, seguras y listas para producción.
MySQL Operador de Oracle es una solución de recuperación automática que admite clústeres MySQL InnoDB en Kubernetes. Utiliza un Kubernetes StatefulSet para administrar instancias del servidor MySQL y les asigna una PersistentVolumeChain para el almacenamiento.
El operador también implementa un módulo de enrutador MySQL para enrutar consultas a través del clúster. Actualmente, el operador está disponible de forma generalizada y se distribuye bajo una licencia universalmente permisiva cercana a la licencia MIT.
Bitpoke MySQL Operador es un operador MySQL de código abierto y fácil de usar para Kubernetes que instala solo Helm y Kubectl. Está diseñado para ser una solución simple, estable y lista para producción para Kubernetes que proporciona monitoreo, replicación, respaldo, actualización y otras características. El operador utiliza un archivo YAML declarativo para implementar y escalar clústeres MySQL en Kubernetes.
A diferencia de un procedimiento almacenado tradicional, la abstracción de Nova-conductor impide el acceso directo a la base de datos. Esto reduce el riesgo de ataques a los datos. Sin embargo, todavía es posible atacar la base de datos mediante desbordamientos de búfer, pérdidas de memoria y programas de software maliciosos.