sql >> Base de Datos >  >> NoSQL >> MongoDB

Conmutación por error de base de datos transparente para sus aplicaciones

ClusterControl es una excelente herramienta para implementar y administrar clústeres de bases de datos:si está en MySQL, puede implementar fácilmente clústeres basados ​​en la replicación maestro-esclavo tradicional de MySQL, Galera Cluster o MySQL NDB Cluster. Sin embargo, para lograr una alta disponibilidad, la implementación de un clúster no es suficiente. Los nodos pueden dejar de funcionar (y muy probablemente lo harán), y su sistema debe poder adaptarse a esos cambios.

Esta adaptación puede ocurrir en diferentes niveles. Puede implementar algún tipo de lógica dentro de la aplicación:verificaría el estado de los nodos del clúster y dirigiría el tráfico a los que están accesibles en el momento dado. También puede crear una capa de proxy que implementará alta disponibilidad en su sistema. En esta publicación de blog, nos gustaría compartir algunos consejos sobre cómo puede lograrlo con ClusterControl.

Implementación de HAProxy mediante ClusterControl

HAProxy es el estándar, uno de los proxies más populares utilizados en relación con MySQL (pero no solo, por supuesto). ClusterControl admite la implementación y la supervisión de nodos HAProxy. También ayuda a implementar la alta disponibilidad del propio proxy utilizando keepalived.

La implementación es bastante simple:debe elegir o completar la dirección IP de un host donde se instalará HAProxy, elegir el puerto, la política de equilibrio de carga, decidir si ClusterControl debe usar el repositorio existente o el código fuente más reciente para implementar HAProxy. También puede elegir qué nodos de back-end le gustaría que se incluyeran en la configuración del proxy y si deberían estar activos o como respaldo.

De manera predeterminada, la instancia de HAProxy implementada por ClusterControl funcionará en MySQL Cluster (NDB), Galera Cluster, replicación de transmisión de PostgreSQL y replicación de MySQL. Para la replicación maestro-esclavo, ClusterControl puede configurar dos escuchas, una para solo lectura y otra para lectura y escritura. Luego, las aplicaciones tendrán que enviar lecturas y escrituras a los puertos respectivos. Para la replicación multimaestro, ClusterControl configurará el equilibrio de carga TCP estándar basado en el algoritmo de equilibrio mínimo de conexión (por ejemplo, para Galera Cluster, donde todos los nodos se pueden escribir).

Keepalived se utiliza para agregar alta disponibilidad a la capa de proxy. Cuando tenga al menos dos nodos HAProxy en su sistema, puede instalar Keepalived desde la interfaz de usuario de ClusterControl.

Deberá elegir dos nodos HAProxy y se configurarán como un par activo - en espera. Se asignaría una IP virtual al servidor activo y, si falla, se reasignará al proxy en espera. De esta manera, puede conectarse al VIP y todas sus consultas se enrutarán al nodo HAProxy actualmente activo y en funcionamiento.

Puede encontrar más detalles sobre cómo se configuran los componentes internos leyendo nuestro tutorial HAProxy.

Implementación de ProxySQL mediante ClusterControl

Si bien HAProxy es un proxy sólido como una roca y una opción muy popular, carece de conocimiento de la base de datos, por ejemplo, división de lectura y escritura. La única forma de hacerlo en HAProxy es crear dos backends y escuchar en dos puertos:uno para lectura y otro para escritura. Por lo general, esto está bien, pero requiere que implemente cambios en su aplicación:la aplicación debe comprender qué es una lectura y qué es una escritura, y luego dirigir esas consultas al puerto correcto. Sería mucho más fácil simplemente conectarse a un solo puerto y dejar que el proxy decida qué hacer a continuación; esto es algo que HAProxy no puede hacer, ya que lo que hace es solo enrutar paquetes; no se realiza ninguna inspección de paquetes y, especialmente, no tiene comprensión del protocolo MySQL.

ProxySQL resuelve este problema:habla del protocolo MySQL y puede (entre otras cosas) realizar una división de lectura y escritura a través de sus poderosas reglas de consulta y enrutar el tráfico MySQL entrante de acuerdo con varios criterios. La instalación de ProxySQL desde ClusterControl es simple:debe ir a la sección Administrar -> Equilibrador de carga y completar la pestaña "Implementar ProxySQL" con los datos necesarios.

En resumen, debemos elegir dónde se instalará ProxySQL, qué usuario de administración y contraseña debe tener, qué usuario de monitoreo debe usar para conectarse a los backends de  MySQL y verificar su estado y el estado del monitor. Desde ClusterControl, puede crear un nuevo usuario para que lo use la aplicación:puede decidir su nombre, contraseña, acceso a qué bases de datos se otorgan y qué privilegios de MySQL tendrá ese usuario. Dicho usuario se creará tanto en MySQL como en ProxySQL. La segunda opción, más adecuada para las infraestructuras existentes, es utilizar la base de datos de usuarios existente. Debe pasar el nombre de usuario y la contraseña, y dicho usuario se creará solo en ProxySQL.

Finalmente, debe responder una pregunta:¿está utilizando transacciones implícitas? Por eso entendemos las transacciones iniciadas al ejecutar SET autocommit=0; Si lo usa, ClusterControl configurará ProxySQL para enviar todo el tráfico al maestro. Esto es necesario para garantizar que ProxySQL manejará las transacciones correctamente en ProxySQL 1.3.x y versiones anteriores. Si no usa SET autocommit=0 para crear una nueva transacción, ClusterControl configurará la división de lectura/escritura.

ProxySQL, como todo proxy, puede convertirse en un único punto de falla y debe hacerse redundante para lograr una alta disponibilidad. Hay un par de métodos para hacerlo. Una de ellas es colocar ProxySQL en los nodos web. La idea aquí es que, la mayoría de las veces, el proceso ProxySQL funcionará bien y la razón de su falta de disponibilidad es que todo el nodo se cayó. En tal caso, si se coloca ProxySQL con el nodo web, no se ha hecho mucho daño porque ese nodo web en particular tampoco estará disponible.

Otro método es utilizar Keepalived de forma similar a como lo hicimos en el caso de HAProxy.

Puede encontrar más detalles sobre cómo se configuran los componentes internos leyendo nuestro tutorial de ProxySQL.