El complemento de equilibrado de carga y replicación de mysqlnd (mysqlnd_ms) añade soporte de uso sencillo para la replicación MySQL a todas las extensiones de MySQL para PHP que utilizan mysqlnd.
A partir de la versión 5.3.3 de PHP, el controlador nativo de MySQL para PHP (mysqlnd) ofrece una API en C de complementos internos. Los complementos en C, como el complemento de replicación y equilibrado de carga, pueden extender la funcionalidad de mysqlnd.
El controlador nativo de MySQL para PHP es una biblioteca en C que acompaña a PHP a partir de PHP 5.3.0. Sirve como un sustituto a corto plazo de la Biblioteca Cliente de MySQL (libmysqlclient). El uso de mysqlnd tiene varias ventajas: no son necesarias descargas extra debido a que está incluido con PHP, está bajo la licencia de PHP, hay menor consumo de memoria en ciertos casos, y contiene nueva funcionalidad, como consultas asíncronas.
Los complementos de mysqlnd como mysqlnd_ms operan, en mayor parte, de forma transparente desde la perspectiva del usuario. El complemento de replicación y equilibrado de carga admite todas las aplicaciones de PHP y todas las extensiones de MySQL para PHP. No cambia las APIs existentes. Por lo tanto, se puede usar fácilmente con las aplicaciones de PHP existentes.
Las características principales de PECL/mysqlnd_ms son las siguientes:
Es transparente y, por lo tanto, fácil de usar.
Admite todas las extensiones de MySQL para PHP.
Admite SSL.
Es una API consistente.
Se requieren pocos cambios o ningún cambio en la aplicación, dependiendo del escenario de uso requerido.
Conexiones retardadas: las conexiones a servidores maestros y esclavos no se abren antes de que se ejecute una sentencia SQL.
Opcional: uso automático del maestro después de la primera escritura en una petición web, para disminuir el posible impacto de la demora de la replicación.
Se puede usar con cualquier solución de clúster MySQL.
Replicación MySQL: La división de lectura-escritura la realiza el complemento. Es el foco primario del complemento.
Clúster MySQL: La división de lectura-escritura se puede deshabilitar. Es posible la configuración de múltiples maestros.
Soluciones de terceros: el complemento está optimizado para la Replicación MySQL, pero se puede usar con cualquier otro tipo de solución de clúster MySQL.
Estrategias destacadas de la división de lectura-escritura.
Detección automática de SELECT.
Admite sugerencias SQL para invalidar el automatismo.
Definido por el usuario.
Se puede deshabilitar, por ejemplo, al usar un clúster sincrónico, como el Clúster MySQL.
Estrategias destacadas del equilibrado de carga.
Rotación: elegir un esclavo diferente, de un modo 'round bobin', en cada petición a los esclavos.
Aleatorio: elegir un esclavo aleatorio en cada petición a los esclavos.
Aleatoiro una vez (adhesión): elegir un esclavo aleatorio una vez para ejecutar todas las peticiones a los esclavos durante toda una petición web.
Definido por el usuario. La aplicación puede registrar llamadas de retorno con mysqlnd_ms.
PHP 5.4.0 o superior: consideración de transacciones al usar solamente llamadas a la API para controlar transacciones.
Equilibrado de carga ponderado: a los servidores se les pueden asignar diferentes propiedades, por ejemplo, para dirigir más peticiones a una máquina potente que a otra menos potente. O para elegir máquinas cercanas para reducir la latencia.
ID de transacciones global.
Emulación en el lado del cliente. Hace más sencilla la tolerancia a fallos manual del servidor maestro y la promoción de esclavos con clústeres asíncronos, como la Repliación MySQL.
Soporte para la característica del identificador de transacciones global interno de MySQL 5.6.5 o superior.
Soporte del uso de IDs de transacciones para identificar esclavos asíncronos actualizados para lectura cuando se necesite consistencia de sesión.
Estrangulamiento: opcionalmente, el complemento puede esperar a que un esclavo se convierta en "sincrónico" antes de continuar.
Niveles de servicio y de consistencia.
Las aplicaciones puede solicitar para las conexiones niveles de servicios de consistencia final, de sesión y fuerte. Los nodos adecuados de clústeres se buscarán automáticamente.
Los accesos a un esclavo de Replicación MySQL de consistencia final pueden ser reemplazados por accesos rápidos a la caché local de forma transparente para reducir la carga del servidor.
Particionamiento y fragmentación
Los servidores de un clúster de réplica pueden estar organizados en grupos. Se pueden usar las sugerencias SQL para dirigir manualmente consultas a un grupo específico. La agrupación se puede usar para particionar (fragmentar) los datos, o para paliar problemas de hotspots con actualizaciones.
Los filtros de Replicación de MySQL están soportados a través del filtro de tabla.
El mecanismo interno de división de lectura-escritura es muy básico. Cada consulta que comience con SELECT es considerada una petición de lectura para enviarla a un servidor esclavo de MySQL. Todas las demás consultas (como las sentencias SHOW) son consideradas como peticiones de escritura que son enviadas al servidor maestro de MySQL. El comportamiento interno se puede invalidar usando las sugerencias SQL, o una función de llamada de retorno definida por el usuario.
El divisor de lectura-escritura no considera las sentencias múltiples. Éstas son consideradas como una única sentencia. La decisión de dónde ejecutar la sentencia se basará en el comienzo de la dicha sentencia. Por ejemplo, si se usa mysqli_multi_query() para ejecutar la sentencia múltiple SELECT id FROM test ; INSERT INTO test(id) VALUES (1), ésta será redirigida a un servidor esclavo debido a que comienza con SELECT. La sentencia INSERT, la cual es también parte de la sentencia múltiple, no será redirigida a un servidor maestro.
Nota:
Las aplicaciones deben considerar las consecuencias de los intercambios de conexión que se realizan para el equilibrado de carga. Revise la documentación sobre intercambio y agrupación de conexiones, manejo de transacciones, tolerancia a fallos equilibrado de carga y división de lectura-escritura.
La abreviatura mysqlnd_ms significa complemento maestro esclavo de mysqlnd. El nombre fue elegido por una rápida y desordenada prueba de conceptos. Al principio, los desarrolladores no esperaban que se continuase usando el código base.