É possível copiar um processo em execução entre máquinas?

6

No melhor de meu entendimento, todo o processo do Linux é realmente um arquivo, é possível copiar um processo em execução de uma máquina para outra?

por exemplo - copie um servidor tomcat em execução de uma máquina para outra sem precisar reiniciar o servidor

    
por aviad m 09.01.2017 / 11:56

3 respostas

5

To the best of my understanding, all linux process are actually files

Você não deve levar a metáfora muito literalmente. Os processos do Linux podem ser acessados através de um pseudo sistema de arquivos para fins de depuração, monitoramento e análise, mas os processos são mais do que apenas esses arquivos e "copiá-los" de um sistema de arquivos /proc para um sistema de arquivos /proc estão condenados .

Um dos sérios problemas que move um processo em execução entre hosts é como lidar com os descritores de arquivos abertos que esse processo está usando. Se um processo estiver lendo ou gravando um arquivo, esse mesmo arquivo (ou um clone exato) deve estar disponível no host de destino. Os descritores de arquivo relacionados a soquetes seriam difíceis de serem processados, pois o endereço IP a que estão vinculados provavelmente mudará de um host para outro. Processos que compartilham segmentos de memória com outros deixariam de fazê-lo após uma migração. Conflitos de PID também podem acontecer, se um processo em execução tiver o mesmo pid que o de entrada, um deles precisará ser alterado. O relacionamento entre pais e filhos será perdido e acabei de arranhar os possíveis problemas.

Apesar desses problemas, existem soluções técnicas que fornecem essa funcionalidade chamada " Checkpointing de aplicativos " como DMTCP e CRIU . Isso é semelhante ao que é usado com hipervisores como o VMWare, o VirtualBox, o Oracle VM e outros, quando eles fazem máquinas virtuais migração ao vivo / teletransporte . Com máquinas virtuais, o trabalho é realmente "mais simples" à medida que todo o sistema operacional é movido, incluindo os descritores de arquivos, os sistemas de arquivos, a memória, a rede e outros dispositivos, etc.

    
por 10.01.2017 / 01:31
2

Não, não é possível mover um processo (ou seja, um programa em execução) de uma máquina Unix para outra.

Alguns serviços , como serviços da Web, serviços de banco de dados ou roteadores, fornecem opções de redundância, como failover e / ou balanceamento de carga. Isso significa que você tem várias cópias do serviço em execução em várias máquinas e, se uma delas cai, outra assume o controle ou compartilha a carga de fornecer o serviço, possivelmente replicando bancos de dados / estado entre si para manter-se atualizado.

Esses tipos de serviços "mudam" de uma máquina para outra, enquanto os processos que fornecem o serviço não estão em movimento.

Este é um recurso do serviço específico, no entanto, e não do Unix.

Você pode encontrar mais informações no fórum ServerFault .

    
por 09.01.2017 / 12:11
0

Não, a partir de agora não é possível. quando o processo vem sob um serviço. Então, o serviço para transferência do processo de serviço pode ser possível. Mas isso exigia alterações no nível do sistema operacional.

    
por 29.09.2017 / 08:20