1) How do you set up multiple web servers while maintaining the same content (would I have to upload the files to all the servers everytime they were updated or is there another way?)
As situações ficam mais complicadas com a escala. Começando, você simplesmente implantaria todo o conteúdo em todos os servidores ao mesmo tempo manualmente. Você poderia escrever um script para fazer isso.
Como você pode fazer maiores, software de gerenciamento de configurações pode ajudar. Além disso, o OpenEFS seria uma solução adequada.
Com conteúdo estático e determinados tipos de conteúdo, há mais opções disponíveis. Estas decisões porque mais gritante quando você tenta modificar ou enviar conteúdo através do próprio aplicativo de carga balanceada, como se você não lidar com isso bem, você irá resultar em partição de dados. Por exemplo, um arquivo enviado só estará em um dos servidores com carga balanceada.
Em nenhuma ordem específica:
- Use uma rede de distribuição de conteúdo .
- Proxy seu conteúdo estático com cache você mesmo.
- Resumo do armazenamento de dados para um sistema de arquivos altamente disponível.
- Muitas vezes, idealmente, a solução preferida é armazenar o conteúdo em um banco de dados.
2) Similarly, if I had to scale out the DB into more than one server, is there any other way apart from replication or is mysql replication the best way to go about it.
Depende do seu objetivo final: consistência, disponibilidade ou tolerância à partição. Compromissos provavelmente serão necessários. Este é um assunto amplo, em que você se beneficiaria lendo um livro como High Performance MySQL . Opções comuns:
- Replicação master dual usando uma tecnologia como Linux-HA , VRRP , ou multi-mestre do MySQL . Isso teria um IP flutuante. Você precisaria implementar o deslocamento de ID automático e estar ciente do desempenho do aplicativo.
- Usando uma solução como DRBD para replicação de armazenamento em nível de bloco e, em seguida, novamente usando uma tecnologia como o Linux-HA para fazer failover dos recursos, caso de falha.
O MySQL também tem vários white papers publicados.
3) I have read that separating the database from the web server is a good idea, why is that? If I had 2 servers, can't I have both the DB and the files on both servers.
É melhor dedicar papel à finalidade, pois reduz a complexidade e o risco de segurança. Você provavelmente se beneficiaria de um mínimo de dois balanceadores de carga, dois servidores de banco de dados e dois servidores da Web. Esteja ciente dos pontos adicionais de falha, pois a alta disponibilidade não será interrompida. Sua rede provavelmente será o próximo ponto óbvio de falha.
Ele também permite construir, dimensionar e transferir funções padrão com menos complicações. No entanto, esses recursos não são exclusivos para separar as funções do servidor.
4) Is something known as a load balancer needed and would it help balance mysql queries as well if replication were set up?
Para consultas de gravação e MySQL, muitas vezes é mais fácil aumentar verticalmente. Para expandir horizontalmente, o que seria preferido em muitas soluções modernas, você precisa empregar uma arquitetura como sharding . Idealmente, seu aplicativo teria que ser projetado para suportar isso. Há também várias soluções de middleware das quais geralmente sou cauteloso.
Você poderia balancear a carga facilmente para servidores escravos de replicação MySQL, o que permitiria usar um VIP com carga balanceada para consultas somente leitura.