2009-04-24 13 views
24

Tengo una aplicación web que ejecuta LAMP. Recientemente hemos aumentado la carga y ahora estamos buscando soluciones a escala. Escalar el apache es bastante fácil, solo vamos a tener varias máquinas múltiples que lo alojarán y seguiremos el tráfico entrante.¿Cómo escalar MySQL con múltiples máquinas?

Sin embargo, cada instancia de apache se comunicará con MySQL y eventualmente MySQL estará sobrecargado. ¿Cómo escalar MySQL en varias máquinas en esta configuración? Ya he consultado this, pero específicamente, necesitamos las actualizaciones del DB disponibles inmediatamente, así que no creo que la replicación sea una buena estrategia aquí. También espero que esto se pueda hacer con un mínimo cambio de código.

PS. Tenemos una relación de lectura-escritura de alrededor de 1: 1.

Respuesta

21

Existen solo dos estrategias: replicación y fragmentación. La replicación aparece con frecuencia cuando tiene menos tráfico de escritura y mucho más leído, por lo que puede redireccionar las lecturas a muchos esclavos, con la trampa de mucho tráfico de replicación con el tiempo y una probabilidad de inconsistencia.

Con la fragmentación fragmenta las tablas de su base de datos en varias máquinas (llamada fragmentación funcional), lo que hace que las uniones especialmente mucho más difíciles. Si este doenst se ajusta más, también necesita fragmentar filas en varias máquinas, pero esto no es divertido y depende de una capa de fragmentación implementada entre su aplicación y la base de datos.

Las bases de datos orientadas a documentos o las tiendas de columnas lo hacen por usted, pero actualmente están optimizadas para OLAP, no para OLTP.

5

Puede que no piense que la replicación no es la estrategia óptima, pero eche un vistazo a esta link que proporciona una sugerencia bastante simple y directa para usar la replicación para ayudar a equilibrar la carga en varias máquinas.

+0

El enlace está roto. – sunnyrjuneja

+0

Actualiza el enlace –

+1

enlace roto bro .. – tesmojones

0

Depende del back-end de la aplicación (es decir, cómo se manejan los PK, las transacciones y los ID de inserción), puede considerar la replicación MASTER-MASTER con diferentes configuraciones auto_increment. Esto puede ser complicado y debe ser probado exhaustivamente, pero puede funcionar.

Además, en el nuevo MySQL 5.6 hay un GTID (Global Transaction Identifier) ​​que generalmente ayuda mucho a mantener la replicación sincronizada, especialmente en este escenario.

0

Bueno ... buena suerte escalar todas esas escrituras a gran escala. El motor de base de datos se convierte en el cuello de botella, demasiados bloqueos y almacenamientos intermedios mgmt y cosas ...

La única forma que encontré que realmente funciona es la escala, la fragmentación, desafortunadamente la fragmentación no se proporciona para MySQL "fuera de la caja" (como en algunos NoSQL como Mongo). ScaleBase (descargo de responsabilidad: yo trabajo allí) es un creador de una solución de escalamiento completo, una "máquina de fragmentación automática" si lo desea. ScaleBae analiza sus datos y secuencias SQL, divide los datos en nodos DB, enruta comandos y agrega resultados en tiempo de ejecución, por lo que no tendrá que hacerlo.

Cuestiones relacionadas