Conceptos
PHP Manual

Clústeres admitidos

Cualquier aplicación que utilice cualquier tipo de clúster MySQL tiene que enfrentarse con las mismas tareas:

El complemento está optimizado para realizar estas tareas en el contexto de un clúster de replicación MySQL asíncrono clásico que consiste en un único maestro y varios esclavos (copiar primaria). Al utilizar la replicación MySQL asíncrona clásica todas las tareas enumeradas arriba deben ser controladas en el lado del cliente.

Otros tipos de clústeres MySQL pueden cluster may have lower requirements on the application side. Po ejemplo, si todos los nodos del clúster pueden responder a peticiones de lectura y de escritura, no es necesario que se realice la división de lectura-escritura (multi-maestro, todos actualizan). Si todos los nodos del clúster son sincrónicos, proporcionarán autmáticamente la mayor calidad de servcio posible, lo que se hace eligiendo un nodo más sencillo. En este caso, el complemento puede servir a la aplicación después de una reconfiguración para deshabilitar ciertas características, como la división de lectura-escritura interna.

Nota: El enfoque de la documentación

El enfoque de la documentación describe el uso del complemento con los clústeres de replicación MySQL asíncronos clásicos (copia primaria). El soporte para este tipo de clústeres ha sido el objetivo de desarrollo original. El uso de otros clústeres se describe brevemente abajo. Por favor, observe que aún está en desarrollo.

Copia primaria (Replicación de MySQL)

Este es el caso de uso primario del complemento. Siga las indicaciones dadas en la descripción de cada característica.

Ejemplo #1 Habilitar el complemento (php.ini)

mysqlnd_ms.enable=1
mysqlnd_ms.config_file=/path/to/mysqlnd_ms_plugin.ini

Ejemplo #2 Configuración básica del complemento (mysqlnd_ms_plugin.ini) para la Replicación de MySQL

{
  "myapp": {
    "master": {
      "master_1": {
        "host": "localhost",
        "socket": "\/tmp\/mysql57.sock"
      }
    },
    "slave": {
      "slave_0": {
        "host": "127.0.0.1",
        "port": 3308
      },
      "slave_1": {
        "host": "192.168.2.28",
        "port": 3306
      }
    },
    "filters": {
      "random": {
        "sticky": "1"
      }
    }
  }
}

Copia primaria con multiprimarios (MMM - MySQL Multi Master)

La Replicación de MySQL permite crear topologías de clústeres con múltiples maestros (primarios). Los conflictos escritura-escritura no los maneja el sistema de replicación. No es una configuración de actualización en cualquier sitio. Por tanto, los datos deben ser particionados manualmente y los clientes deben ser redirigidos de acuerdo a las reglas de particionamiento. La configuración recomendada es igual a la de fragmentación de más abajo.

Fragmentación manual, posiblemente combinada con copia primaria y múltiples primarios

Use sugerencias SQL y el filtro de grupos de nodos para clústeres que usen particionamiento de datos pero que dejen la redirección de consultas al cliente. La configuración del ejemplo muestra una configuración multimaestro con dos fragmentos.

Ejemplo #3 Múltiples primarios - multimaestro (php.ini)

mysqlnd_ms.enable=1
mysqlnd_ms.config_file=/path/to/mysqlnd_ms_plugin.ini
mysqlnd_ms.multi_master=1

Ejemplo #4 Copia primaria con múltiples primarios y particionamiento

{
  "myapp": {
    "master": {
      "master_1": {
        "host": "localhost",
        "socket": "\/tmp\/mysql57.sock"
      }
      "master_2": {
        "host": "192.168.2.27",
        "socket": "3306"
      }
    },
    "slave": {
      "slave_1": {
        "host": "127.0.0.1",
        "port": 3308
      },
      "slave_2": {
        "host": "192.168.2.28",
        "port": 3306
      }
    },
    "filters": {
      "node_groups": {
        "Partition_A" : {
          "master": ["master_1"],
          "slave": ["slave_1"]
        },
        "Partition_B" : {
          "master": ["master_2"],
          "slave": ["slave_2"]
        }
      },
      "roundrobin": []
    }
  }
}

El complemento también se puede usar con una colección suelta de fragmentos no relacionados. Para tal clúster, configure solamente maestros y deshabilite la división de lectura-escritura. Los nodos de tal clúster son llamados maestros en la configuración del complemento ya que aceptan tanto lecturas como escrituras para su particionamiento.

Usar clústeres de actualización en cualquier sitio sincrónicos tales como el Clúster de MySQL

El Clúster de MySQL es una solución de clúster sincrónico. Todos los nodos del clúster aceptan peticiones de lectura y escritura. En el contexto del complemento, todos los nodos son considerados maestros.

Use únicamente el equilibrado de carga y la tolerancia a fallos.

Deshabilitar la división interna de lectura-escritura

Configure únicamente maestros.

Ejemplo #5 Múltiples primarios - multimaestro (php.ini)

mysqlnd_ms.enable=1
mysqlnd_ms.config_file=/path/to/mysqlnd_ms_plugin.ini
mysqlnd_ms.multi_master=1
mysqlnd_ms.disable_rw_split=1

Ejemplo #6 Clúster de actualización en cualquier sitio sincrónico

"myapp": {
    "master": {
      "master_1": {
        "host": "localhost",
        "socket": "\/tmp\/mysql57.sock"
      },
      "master_2": {
        "host": "192.168.2.28",
        "port": 3306
      }
    },
    "slave": {
    },
    "filters": {
      "roundrobin": {
      }
    },
    "failover": {
      "strategy": "loop_before_master",
      "remember_failed": true
    }
  }
}

Si se ejecuta un clúster de actualización en cualquier sitio que no tenga particionamiento interno para evitar hot spots y altas tasas de colisiones, considere usar el filtro de grupos de nodos para seguir las actualizaciones en una tabla de acceso frecuente en uno de los nodos. Esto podría ayudar a reducir las tasas de colisión y proporcionar así una mejora del rendimiento.


Conceptos
PHP Manual