Apache em vários serveres com uma configuration

Quero replicair minha máquina virtual e colocá-la atrás de um balanceador de cairga.

Apache1 Apache2 ....ApacheN | | | ------------------------- LoadBalancer 

Gostairia de usair apenas um file de configuration paira hosts virtuais (na viewdade, um diretório de files conf com Incluir em cada httpd.conf), UM file de log e um diretório DocumentRoot comum paira todas as instâncias. Isso é possível, apenas compairtilhando algum diretório entre as máquinas virtuais e configurando cada Apache de acordo?

Ou haviewá algum conflito com a abertura e escrita de files?

Existe talvez uma maneira melhor de manter todas as máquinas com a mesma configuration?

A única coisa que posso pensair, é um script que copia uma configuration mestre e reinicia todas as instâncias do Apache. E também algum script paira merge todos os logs …

Qualquer sugestão é bem-vinda.

UPDATE: Achei que, no meu caso, o performance não era um problema, mas pairei de escreview paira o mesmo file de log de duas instâncias, quando comecei a notair corrupção de log.

 [04/Oct/2014:17:10:34 +0200] "GET /index.html HTTP/1.0" 200 15082 22633 [04/Oct/2014:17:10:36 +0200] "GET /index.html HTTP/1.0" 200 15082 13[04/Oct/2014:17:10:38 +0200] "GET /index.html HTTP/1.0"[04/Oct/[04/Oct/2014:17:10:40 +0200] "GET /index.[04/Oct/2014:17:09:42[04/Oct/2014:17:10:42 +0200][04/Oct/2014:17:09:44 +0200] "GET /index.html HTTP/1.0" 200 15082 

Você pode compairtilhair a configuration apache e a raiz do documento entre muitas máquinas idênticas – não há problema paira usair, por exemplo, um compairtilhamento NFS paira esses propósitos.

Seria sábio não compairtilhair os diretórios de log do apache, porque em cairga pesada você receberá muitas escritas simultâneas. Em uma configuration, usei syslogging remoto paira obter logs de apache comuns. Esta será uma questão sepairada sobre como conseguir isso. Veja http://httpd.apache.org/docs/2.2/mod/core.html como ponto de pairtida paira o lado do remetente.

Você deviewá configurair o seu syslog local (do server) de acordo.

Existe talvez uma maneira melhor de manter todas as máquinas com a mesma configuration?

Sim, um sistema de gerenciamento de configuration (Puppet, Chef, …) é a maneira correta de lidair com isso.
Eles podem implantair files de configuration atualizados automaticamente e reiniciair os services posteriormente.
Os logs devem ser enviados via (r) syslog paira um server de registro central.

Quanto ao conteúdo do DocumentRoot: isso depende do que está lá.
Se for um código static, o empacotamento e a deployment através das ferramentas padrão do operating system (yum, apt-get, …) seria preferível.
Também facilita o lançamento de novas viewsões lentamente.

É clairo que é possível ter um compairtilhamento de files, mas isso pode atuair como um único ponto de crash, então.
E será doloroso viewificair qual máquina já reiniciou o service depois que uma nova configuration foi colocada ali, pois você adiciona mais serveres.

Eu recomendairia usair um sistema de gerenciamento de configuration, como fantoche ou CFEngine, ou pelo less airmazenair centralmente as configurações dentro de um único repository e puxá-los paira todos os serveres da web.

Paira a solução de gerenciamento de configuration, você pode especificair files integers que devem existir e onde obter a cópia canônica no server de gerenciamento de configuration, ou você pode especificair os pairâmetros paira esses files no idioma de gerenciamento de configuration, que fornece uma camada de abstração e simplifica o process de introdução de novas configurações de forma correta.

Paira simplesmente manter e distribuir files centralmente, você provavelmente deseja viewificair os files de configuration em um softwaire de version control, como CVS ou SVN. A pairtir daqui, existem duas forms muito simples de obter essas configurações em todos os seus serveres web.

  • Você poderia então instruir seus serveres da Web a puxair diretamente da ferramenta de gerenciamento de viewsão ( cvs co ou svn checkout )
  • Alternativamente, você poderia fazer um pouco mais de trabalho paira criair uma solução mais robusta, escalável e reutilizável
    • script criando um RPM de todos os files de configuration do apache (ou o equivalente paira o seu operating system)
    • Execute um repo do Yum no server de version control (ou o equivalente paira o seu operating system)
    • em seguida, simplesmente instrua seus serveres web a executair uma atualização yum my-apache-configs (ou o equivalente paira seu operating system).

A solução VCS-only é mais fácil de configurair e funcionairá em sistemas operacionais. A solução do repository de packages é um pouco mais difícil de configurair, mas abrirá o path paira você empacotair e distribuir configurações, códigos e scripts de todos os types e se alinhair mais de perto com a metodologia do fornecedor do operating system.

A outra coisa boa sobre a solução do repository de packages é que você pode definir dependencies e grupos de packages. Isso significa que você pode fazer meu-apache-configs dependente de httpd e mod_ssl . Você poderia então criair um package vazio que você chamasse de algo como company_com-web_serview que depende do meu-apache-configs e my-ssl-certificates e de qualquer outro package específico paira sua empresa. Paira configurair uma nova instância do server web, coloque um server recém-instalado (adicione o seu repo do yum ao kickstairt) por trás do balanceador de cairga, emita um yum -y instale o company_com-web_serview , vá paira um café e volte com um pronto -to-roll instância do server web.

===== EDIT =====

O valor desse mecanismo é que ele cria um sistema livremente acoplado. Se o server de gerenciamento de configuration ou o yum repo estiviewem off-line, você perderá a capacidade de reconfigurair, mas os serveres da Web permanecerão. Mesmo na instância do htat, você pode replicair as mudanças manualmente em todas as máquinas e viewificair as mudanças de mão-a-mão quando o repo voltair. O uso de airmazenamento compairtilhado (NFS, sistema de files em cluster, etc.) criairia uma única crash no ponto.