Concepts
PHP Manual

Clusters supportés

Toute application utilisant n'importe quel cluster MySQL est soumises aux mêmes tâches:

Le plugin est optimisé pour gérer ces tâches dans un contexte de réplication MySQL asynchrone classique, à savoir un seul maitre et plusieurs esclaves (copie primaire). Dans ce cas, toutes les tâches listées plus haut doivent être gérées coté client.

D'autres types de clusters MySQL ont moins d'implication coté client. Par exemple, si tous les noeuds du cluster peuvent répondre aux lectures et aux écritures, aucune séparation ne sera nécessaire (plusieurs maîtres, mise à jour total). Si tous les noeuds sont synchrones, ils sont tous éligibles avec le même poids, ce qui simplifie la tâche de selection. Dans de tels cas, le plugin doit être reconfiguré pour désactiver certaines logiques, comme la séparation des lectures/écritures.

Note: But de la documentation

La documentation décrit l'utilisation du plugin dans un cas classique de réplication asynchrone (copie primaire). C'est le cas de base, qui a inspiré l'écriture du plugin. D'autres types de clusters sont décrits brièvement ci-dessous, nous continuons à travailler dessus actuellement.

Copie primaire (Réplication MySQL)

C'est le but primaire de ce plugin. Suivez les astuces fournies dans les descriptions de chacune des fonctionalités.

Exemple #1 Activation du plugin (php.ini)

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

Exemple #2 Configuration simple du plugin (mysqlnd_ms_plugin.ini) pour une réplication 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"
      }
    }
  }
}

Copie primaire avec plusieurs primaires (MMM - MySQL Multi Master)

La réplication MySQL vous permet de créer des topologies de cluster avec plusieurs maîtres (primaires). Les conflits d'écriture ne sont pas gérées par le système de réplication. Aussi, les données doivent être partitionnées manuellement et les clients doivent être redirigés suivant les règles de partitionnement. La configuration recommandée est identique à la configuration de fragmentation ci-dessous.

Fragmentation manuelle, combinée éventuellement avec une copie primaire et plusieurs primaires

Utilisez les astuces SQL et le filtre de groupe du noeud pour les clusters qui utilisent le partitionnement des données, mais laissez au client la redirection de la requête. L'exemple de configuration montre une configuration de plusieurs maîtres avec deux fragmentations.

Exemple #3 Plusieurs primaires - plusieurs maîtres (php.ini)

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

Exemple #4 Copie primaire avec plusieurs primaires et le partitionnement

{
  "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": []
    }
  }
}

Le plugin peut également être utilisé avec une collection mouvante de morceaux indépendants. Pour un tel cluster, configurez les maîtres uniquement et désactivez la séparation des lectures/écritures. Les noeuds d'un tel cluster sont appelés maîtres dans la configuration du plugin vu qu'ils acceptent à la fois les lectures et les écritures pour leur partition.

Using synchronous update everywhere clusters such as MySQL Cluster

MySQL Cluster est une solution de cluster synchrone. Tous les noeuds acceptent des lectures et des écritures. D'un point de vue du plugin, tous les noeuds devraient alors être considérés comme des maitres.

Utilisez les fonctionnalités d'équilibre de charge et de reprise sur panne seulement.

Désactiver la répartition des lectures/écritures.

Ne configurez que les maitres.

Exemple #5 Plusieurs primaires - plusieurs maîtres (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

Exemple #6 Mise à jour synchrone dans n'importe quel cluster

"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 vous exécutez une mise à jour dans n'importe quel cluster qui ne supporte pas le partitionnement afin d'éviter les points chauds et les collisions, vous devriez considérer l'utilisation du filtre sur les groupes de noeuds pour conserver les mises à jour sur les tables fréquemment utilisées sur un de ces noeuds. Ceci peut aider à réduire les collisions, et donc, améliorer les performances.


Concepts
PHP Manual