Question

Je réplication MySQL actuellement entre deux se produisant maîtres bidirectionnellement, l'un dans un centre de données localement, un autre sur sur Amazon EC2.

Tout semble fonctionner normalement réplication sage, pas de problème en soi, à l'exception de la requête occasionnelle qui provoque une collision, mais ceux-ci sont peu nombreux. Récemment, je mis en place mysql-proxy pour tenter d'équilibrer la charge des deux serveurs, équilibrage de charge vraiment coups de pied après la machine locale reçoit 40 ou plusieurs connexions à laquelle pointent les connexions de base de données ultérieures se brassés hors de la machine EC2.

Quelque chose que nous avons remarqué récemment que le proxy MySQL nous informe qu'il ya 41 connexions, puis commencer son équilibre. Toutefois, lorsque je me connecte à la machine locale et faire un SHOW PROCESSLIST; il ne peut me fournir 30 connexions.

Quelqu'un a une idée pourquoi cela peut-être?

En plus de cela à la suite de l'émission de la commande SHOW PROCESSLIST; J'ai remarqué qu'il ya un grand nombre de requêtes en cours d'exécution sur les deux machines que l'état qu'ils ont été en cours d'exécution au-delà de 5000 secondes. Je suis sûr que ce sont des questions « zombies », mais personne ne sait pourquoi ils sont créés en premier lieu?

Pour votre information, nous courons version MySQL 5.1.54 sur les dernières versions de ubuntu et debian.

Toutes les idées serait extrêmement utile.

[Addendum]

Il se trouve que nous n'utilisons mysql_pconnect et sont en fait à l'aide des bibliothèques mysqli. Je ne parvenez toujours pas à savoir pourquoi ce qui se passe, et fera rapport une fois je trouve.

Était-ce utile?

La solution

Je suis contre écrit aux deux maîtres dans une configuration à double maître. Il y a trop de choses qui peuvent mal tourner, et ils peuvent être salissant pour fixer -. AUTO_INCREMENTs, d'autres des clés en double, etc

Des centaines de connexions « sommeil » est pratiquement pas d'impact sur un serveur, ce qui limite à 40 n'est pas utile. 10 ou plus actif Connexions (non-sommeil) peut être un problème. Dans ce cas, je regardais les requêtes. En général, l'optimisation des requêtes est la meilleure réponse.

Notez également que chaque écriture (INSERT, UPDATE, etc) qui se fait sur un maître doit se faire sur tous les autres maîtres et esclaves. Donc, vous ne pouvez pas vraiment « spread » écrit autour.

Si vous avez des processus qui ne lit que (Selects), alors ils devraient aller à esclaves et / ou le maître de sauvegarde, pas le live, inscriptible, Maître. Cela vous aidera.

Soyez au courant du problème « d'écriture critique ». Exemple: Un utilisateur d'un commentaire de blog, se penche ensuite sur ses commentaires, mais il manque. Cela peut se produire si l'écriture est allé à une machine, mais la lecture a frappé un autre, et la réplication est « derrière ».

(Mes commentaires sont applicables à toutes les versions et toutes les API, pas seulement 5.1 et mysqli de PHP).

Je reste loin de mysql_pconnect (et d'autres mécanismes de mise en commun de connexion). démarrage de connexion / désassemblage est très rapide dans MySQL. les connexions peuvent avoir des problèmes mis en commun avec @variables, les modes de transaction, sql_modes, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top