Como evitar tempo de inatividade ao redimensionar máquinas virtuais

2

Muitos provedores de IaaS oferecem upgrade / downgrade dinâmico de RAM e núcleos.

Normalmente, uma VM Linux precisa ser reinicializada para aplicar essas alterações.

Às vezes, coisas como ferramentas VMware ou outros serviços de convidado são bem integrados, então as atualizações para os recursos ficam imediatamente disponíveis, mas os downgrades ainda precisam ser reinicializados.

Como posso resolver esse problema para que, ao fazer downgrade de recursos, eu não precise reiniciar meus convidados?

    
por Ivan Buttinoni 28.10.2013 / 23:06

3 respostas

3

Com o libvirt + KVM no RHEL6 (e presumivelmente outros), você pode fazer isso com os comandos virsh setmem e setvcpus .

O truque é que você tem que definir os valores máximos possíveis na configuração permanente antes de inicializar o convidado. Há um sinalizador para isso em setvcpus ; para memória, você precisa dizer setmaxmem (ótima interface de usuário). Então você pode escalá-los para cima e para baixo on-the-fly dentro do intervalo na configuração.

Para convidados linux, ele liga os recursos de / para o convidado. Para os convidados do windows, para a memória informa ao windows que ele tem o tamanho máximo total sempre. No entanto, ele usará o driver de balão para segurar qualquer memória que você tirar. Não tenho certeza sobre VCPU em convidados do Windows.

    
por 29.10.2013 / 03:55
5

Idealmente, se você estiver lidando com redimensionamento de nós individuais, constante ou sob demanda, em escala reduzida, fora de uma janela de manutenção, uma reinicialização não será importante para você. Sua arquitetura deve ser tolerante a falhas, clusterizada e / ou balanceada de carga para que a perda de um nó durante o redimensionamento não cause impacto em nada. Esse é o tipo de coisa que os provedores de Heroku e outros provedores de PaaS fazem de forma transparente. Se você estiver construindo sua própria PaaS com seus recursos de IaaS, considere strongmente um modelo semelhante.

Além disso, muitas arquiteturas empregam uma estratégia em que os nós em uma determinada camada de um aplicativo são de tamanho fixo e instâncias de convidado inteiras são giradas para cima ou para baixo conforme necessário, em vez de redimensionar hosts individuais.

Acho que você está se aproximando disso da maneira errada, alterando as atribuições de recursos de convidado para dimensionar. O que você deve fazer para tornar o aplicativo escalável de forma que convidados inteiros possam ser provisionados ou destruídos conforme necessário, em vez de mexer em RAM ou CPU em front-ends da Web individuais ou em servidores de banco de dados.

    
por 28.10.2013 / 23:14
2

Se falar em VMware, a RAM on-line e a CPU diminuem não são operações compatíveis. Isso não é possível sem o tempo de inatividade da VM.

    
por 28.10.2013 / 23:57