Wordpress na replicação do IIS com robocopy

10

Configuramos um ambiente wordpress em 4 servidores IIS. Estamos pensando em usar uma tarefa agendada que dispara um script de robocópia para replicar o diretório wordpress a cada 5 minutos.

Quais são as opiniões sobre essa abordagem? Alguém já usou isso ou algo parecido?

joebegborg07
fonte
Quais são os 4 servidores IIS físicos ou VM? O que você está replicando os dados ou os bancos de dados e configurações? Não sei por que você teria 4 servidores 1 sendo um mestre (suponho) e os outros sendo passivos, se você está tentando obter HA que não funcionará.
Anthony Fornito 8/11
1
segunda pergunta (e provavelmente a mais importante) por que você está executando o wordpress no windows?
Anthony Fornito 8/11
Obrigado @AnthonyFornito pela sua resposta. Executando o wordpress no windows por razões internas. Eu só estou tentando trabalhar com isso. Estou após a replicação dos arquivos do site (a replicação do banco de dados já é tratada através do MYSQL). Os front-ends são VMs no Azure. Estou principalmente atrás de uma solução em que todos os front-ends compartilham os mesmos arquivos de site. Há algo que você sugeriria?
precisa saber é o seguinte

Respostas:

12

Ter 4 servidores front-end que compartilham os mesmos arquivos ao mesmo tempo e cada um é capaz de gravar sem usar algum tipo de DFS ou programa de terceiros dedicado à sincronização de diretórios seria um problema.

Com o azure, você pode pesquisar três coisas.

  1. Armazenamento compartilhado, pode haver algum custo associado à obtenção de seu próprio armazenamento dedicado e não tenho certeza da configuração, no entanto, o Azure oferece isso. Isso garantiria que todos os seus arquivos estivessem disponíveis para cada servidor assim que eles fossem gravados.

  2. O DFS do Azure, DFS é uma ferramenta de sincronização de diretórios baseada em janelas que funciona muito bem, também não tem certeza sobre o custo, mas a configuração pode ser um pouco mais fácil. O DFS funciona de forma assíncrona, por isso há um pequeno atraso, mas não muito.

  3. (Vou explicar como isso seria feito e depois nunca mais falar sobre isso, porque é uma ideia horrível e falhará.) Crie um script que primeiro compare os dados nos quatro servidores e copie os dados diferenciais. Você precisaria compartilhar cada diretório com o servidor que executa o script, com permissão de configuração para que o servidor possa ler e escrever e, em seguida, solucionar problemas, solucionar problemas.

Qualquer uma das opções acima fará o trabalho, se seu trabalho depender desse trabalho, eu recomendaria que você ficasse longe da opção 3.

Dito isto, e você não está tentando gastar dinheiro, siga as etapas abaixo.

  1. veja um programa chamado "sincronização gratuita de arquivos". Existem alguns recursos realmente bons para a versão gratuita. Acredito que haja uma versão paga, mas não tenho certeza dos aprimoramentos que obtém. Eu o usei em muitos dos meus ambientes de desenvolvimento ao tentar obter algo semelhante ao que você está procurando fazer e foi preguiçoso para configurar o DFS.

  2. Torne apenas um servidor gravável, isso pode ser feito facilmente, configurando um URI em cada servidor que diz que, se criar um artigo, vá para ServerA, ou uma URL reescrita em seu web.config, ou seja, o WordPress é o uso de php:

    cabeçalho ('Localização: http://myhost.com/mypage.php ');

Cada um deles exigirá um pouco de conhecimento de codificação e PHP, IIS.

  1. A parte realmente divertida, com o ServerA sendo o servidor de autor (apenas servidor gravável), como direcionamos o tráfego para o ServerB, ServerC e ServerD para leitura sem um balanceador de carga?

Resposta curta, você não pode, bem, isso não é exatamente verdade. Eu tive um cliente uma vez que foi inflexível ao não usar um balanceador de carga, ele conseguiu, através de uma série de scripts do PowerShell, mover uma conexão de um servidor para outro com base na quantidade de processos de trabalho em cada caixa ou algo parecido. De qualquer maneira, é muito difícil de fazer e não vale o tempo e a energia necessários.

Veja se você não pode configurar o balanceamento de carga de rede nos servidores. Isso exigirá um IP adicional, mas sua única alteração de DNS e o tráfego podem ser distribuídos para leitura nos 3 servidores.

Boa sorte!

Anthony Fornito
fonte
Muito obrigado por suas sugestões. O armazenamento central único era um gargalo para nós, pois tínhamos essa configuração antes, mas não lidava com tráfego intenso. Precisávamos de uma solução rápida devido a um prazo. No final, usamos o resilio, que é uma solução de sincronização ponto a ponto em tempo real, que detecta alterações em qualquer um dos servidores e se replica no outro servidor. Espero que alguém que tenha os mesmos problemas ou problemas semelhantes possa resolver os problemas da mesma maneira que solucionou para nós. Estou testando sua sugestão de reescrita de URL para o back-end do WP e enviando alterações para outras máquinas. Obrigado novamente.
joebegborg07
O NLB não funciona no Azure (não há camada 2, se você quiser alguns pesadelos realmente horríveis, tente examinar a tabela ARP em uma VM do Azure).
Massimo
12

Obrigado por todas as sugestões pessoas.

Nossa solução foi usar uma abordagem de sincronização ponto a ponto usando uma ferramenta chamada resilio.

O Resilio nos permitiu configurar vários computadores (nesse caso, os front-ends do IIS) em um cluster de sincronização ponto a ponto. Uma pasta é selecionada em cada computador no cluster para ser usada no processo de sincronização.

O serviço resilio (serviço windows em execução em segundo plano) monitora essas pastas quanto a alterações e, se uma alteração for feita em qualquer uma das pastas especificadas nos front-ends em questão, o resilio enviará essa alteração para os outros servidores.

Espero que isso possa ajudar outras pessoas que enfrentam um problema semelhante no futuro.

joebegborg07
fonte
11

Não acho que as tarefas agendadas e o Robocopy sejam uma ótima abordagem. Por causa da janela de 5 minutos, haverá momentos em que um recurso é solicitado, mas o servidor selecionado pelo balanceador de carga não o disponibilizará. Para sites amplamente estáticos, isso acontece com muito menos frequência do que com sites ocupados alterados com frequência. Uma frequência mais alta ou o uso de uma tecnologia de sincronização diferente como o Bittorrent Sync (agora chamada Resilio Sync ) melhoraria bastante isso, mas não eliminaria o problema.

Colocar o seu conteúdo wp ou talvez apenas a pasta wp-content / uploads em uma unidade compartilhada seria uma solução melhor. Outra maneira de analisar isso seria fazer com que um dos servidores hospede essa pasta e os outros a compartilhem. Com o armazenamento em cache do disco, a carga no servidor não deve ser muito maior do que os outros servidores.

Atualizar

Dê uma olhada neste artigo para obter idéias sobre o cache de páginas e este para CDN. É sobre o Nginx, então você precisará trabalhar com o IIS, mas a teoria por trás disso é válida para qualquer servidor da web.

Tim
fonte
Obrigado pela sua sugestão @ Tim. Como você disse, o site é dinâmico, com pequenas atualizações regulares de arquivos devido a plugins do wordpress; Isso significa que todo front end pode ter arquivos diferentes às vezes. Você já testou esse ambiente de produção (aproximadamente 500 - 1.000 usuários simultâneos); ou seja, armazenar os arquivos do site em um repositório central e mapeados através de uma unidade compartilhada? Se sim, como foi a experiência.
precisa saber é o seguinte
Não, não testei esse cenário - não preciso, porque faço cache e uso uma CDN. Você precisaria carregar o teste dos servidores front-end, incluindo o servidor de arquivos back-end. No entanto, se suas páginas não forem personalizadas para o armazenamento em cache de cada usuário, você poderá reduzir enormemente sua carga, como faria com uma distribuição de conteúdo - o CloudFlare possui um nível gratuito. Isso é verdade mesmo se você atualizar a cada 5 minutos. Google "Nginx Microcaching" para a teoria por trás disso, mas obviamente você precisará implementá-lo de maneira diferente no IIS. Os cabeçalhos de cache são bastante críticos se você seguir esse caminho. Veja a atualização acima também.
Tim