Balanceadores de carga e backups de SQL

5

Nossos ambientes de produção normalmente consistem em 4 a 8 servidores da web Apache e 2 (Meus) servidores SQL:

Cada servidor da Web é afiliado a um servidor SQL Servidores SQL têm uma configuração de replicação circular Todos os servidores da web são balanceados por carga, por libra, por exemplo. Todas as noites, um trabalho faz o backup de um dos servidores SQL, bloqueando os servidores da web afiliados por cerca de 10 a 15 minutos.

Existe uma maneira de configurar o balanceamento para evitar alcançar os servidores bloqueados por um curto período de tempo?

Existe outra maneira de lidar com esse bloqueio, além de fazer backup de um terceiro servidor que não seja de produção?

PS: Pretendemos recarregar a configuração Pound, logo antes e depois do backup, com um arquivo de configuração apropriado, mas parece um pouco estranho ...

A pergunta já foi feita no StackOverflow , mas fechada como ' não centrado no desenvolvimento 'proposto. De fato, é mais uma discussão de produção e execução.

    
por Tom Desp 30.03.2013 / 14:45

3 respostas

4

Retirar a carga de um servidor para fazer um backup não é inédito. Como você faz isso depende inteiramente do seu balanceador de carga. Por exemplo, os balanceadores de carga Kemp possuem uma API da web que você pode chamar para desativar um servidor específico e o haproxy tem uma interface de gerenciamento baseada em pipe que você pode criar scripts a partir de um shell linux. Tenho certeza de que a libra tem uma maneira equivalente de desativar um servidor, mas não sei o que é isso.

Outra maneira popular de desativar um servidor com haproxy é fazer com que a ação de verificação procure por um arquivo específico. Quando você quiser desativar o servidor, basta excluir ou renomear esse arquivo. Você deve ser capaz de fazer isso com facilidade e satisfaz sua exigência de manter o script em nossa camada da Web e não chamar o balanceador de carga.

    
por 30.03.2013 / 20:51
0

Se você parar o apache no host em que está fazendo backups, o libre deve detectar em 30 segundos que o back-end está off-line e direcionar os visitantes para outros hosts.

    
por 30.03.2013 / 21:20
0

Se um escravo estiver executando o mestre, você poderá fazer os backups no escravo sem as complicações da replicação mestre-mestre com mais de dois nós. Essa seria a minha escolha preferida.

Mas você pode igualmente marcar um dos dois mestres atuais como "cercado", forçando todo o tráfego da Web para o servidor ainda ativo. Como você faz isso depende do que está falando com o banco de dados. Se for simplesmente PHP (sem conexões persistentes - o que seria bobagem nessa configuração), basta trocar um arquivo de inclusão diferente, aguardar alguns segundos (minutos?) Para que as conexões atuais sejam concluídas e executar o backup. Quando o backup for concluído, alterne os arquivos de inclusão novamente.

Alternativamente, se você tem a capacidade de webserving, divida seus servidores em 2 pools - um para cada DBMS e diga pound para cercar um banco enquanto faz backup / executa 2 instâncias de pound com RRDNS e adiciona uma tabela iptables para rejeitar novas conexões no banco de backup quando você deseja fazer backup.

Se você tem conexões persistentes, a troca de banco é provavelmente a única solução prática.

    
por 02.04.2013 / 23:57