Ejecución de múltiples servidores web y replicación de bases de datos; ¿algunas ideas?

Algunas ideas

1. Optimiza tus consultas SQL
2. Utilice el almacenamiento en caché (Memcached quizás)
3. Agregue algunos índices a sus tablas MySQL
4. Ajuste su configuración para permitir un mayor número de conexiones MySQL por servidor y por usuario de la base de datos.
5. Determine si Keep Alives es una buena opción para su aplicación.

Una vez que sepa que su aplicación es tan eficiente como puede ser, busque escalar vertical u horizontalmente. Si su cuello de botella es MySQL, busque replicación con dos maestros que también actúen como esclavos entre sí o MySQL Cluster.

Para un enfoque más avanzado, busque DRBD y Linux Heartbeat. Juntos, aumentan el rendimiento, proporcionan conmutación por error automatizada y garantizan que siempre tenga una copia de seguridad en vivo.

Más allá de eso, es posible que desee examinar el fragmentación.

MySQL realmente admite la replicación Master-Master (necesita usar las claves primarias auto_increment y usar el parámetro auto_increment_increment [o algo así]]). Pero no lo recomendaría para su situación.

Creo que tiene dos opciones de escala y redundancia. Primero, puede cambiar de MySQL a una solución de base de datos alojada masivamente que tiene mucha redundancia incorporada. Quizás desafortunadamente, las alojadas masivamente son NoSQL, por lo que tendrá que hacer algunos ajustes en su aplicación. SimpleDB es probablemente el mejor para sus propósitos, ya que tiene mucho soporte para SQL y es bastante fácil comenzar con él. Sin embargo, si su base de datos es realmente grande, puede ser costosa. Y con SimpleDB, no lo sabrá hasta que comience a probarlo. El costo de tiempo de la CPU suele ser el costo más costoso con SimpleDB, así que primero pruebe con conjuntos pequeños.

La otra opción es tener servidores de aplicaciones redundantes y servidores de bases de datos redundantes. La forma habitual de hacer esto con MySQL es tener un equilibrador de carga frente a los servidores de aplicaciones, y solo tener un esclavo en línea para la base de datos que esté replicando datos y pueda ser promovido a maestro en un apuro. Creo que la mejor y más barata forma de hacerlo (y la forma en que lo hacemos en BuildFax) es utilizar RightScale + Amazon Web Services EC2 + Elastic Load Balancer de Amazon. Puede escalar fácilmente verticalmente el servidor de la base de datos, y puede usar instancias pequeñas o micro para sus servidores de aplicaciones y su esclavo de replicación de base de datos, si eso es posible.

Al final del día, necesitará servidores de aplicaciones y bases de datos separados, y necesitará al menos dos de cualquier servidor para poder manejar el tiempo de inactividad. La desventaja de la implementación estándar de MySQL es que debe realizar una conmutación por error manual al esclavo. Existe un producto en versión beta de ScaleBase que promete una conmutación por error automática, aunque deberá introducir otro tipo de servidor redundante en la mezcla (un servidor proxy ScaleBase que se encuentra entre el servidor de la aplicación y el servidor de la base de datos).