Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Mosix - Instalação e configuração de um cluster de balanceamento de carga

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Artigo Mosix - Instalação e configuração de um cluster de balanceamento de carga

    Artigo que demonstra alguns conceitos sobre clusters, os procedimentos e resultados obtidos na instalação, configuração e testes de um cluster do tipo balanceamento de carga utilizando o Mosix. Também relaciona com este cluster os conceitos de sistemas distribuídos (feito para meu TCC em 2008).
    Por: Rodrigo Mendes Pasini

    Introdução
    Um cluster é um sistema onde dois ou mais computadores trabalham de maneira conjunta para realizar processamento pesado. Em outras palavras, os computadores dividem as tarefas de processamento e trabalham como se fossem um único grande computador.

    Existem vários tipos de clusters, onde podemos citar alguns mais conhecidos:

    * Cluster de alto desempenho: seu funcionamento permite que ocorra uma grande carga de processamento com um volume alto de gigaflops em computadores comuns;
    * Cluster de alta disponibilidade: seus sistemas conseguem permanecer disponíveis por um longo período de tempo e em plena condição de uso, conseguem detectar erros se protegendo de possíveis falhas;
    * Cluster para balanceamento de carga: controla a distribuição equilibrada do processamento. Requer um monitoramento constante na sua comunicação e em seus mecanismos de redundância, caso ocorra alguma falha haverá uma interrupção no seu funcionamento.


    Este artigo trata sobre a instalação e configuração do Mosix (Multicomputer Operating System for Unix), que é um cluster de balanceamento de carga com finalidade de testes de funcionamento de um cluster deste tipo.

    Um pouco sobre Mosix
    Mosix é uma extensão para os sistemas operacionais baseados em Unix para implementação de um cluster de computadores, que faz balanceamento de carga através da utilização de Migração Preemptiva de Processos e Balanceamento dinâmico de carga.

    A migração Preemptiva de processos consiste em transportar um processo de um nodo escasso de recursos para um que tenha maior disponibilidade.

    A migração de processos, que o MOSIX suporta para balançar carga, cria novas potencialidades de escalabilidade de processos paralelos de I/O (entrada e saída) que sejam apropriadas para as aplicações que necessitam processar grandes volumes de dados. O processamento paralelo de MOSIX utiliza biblioteca de I/O "MOPI", que fornece meios para dividir os processos (transparentemente) para diferentes nodos e permite acesso paralelo aos diferentes segmentos de um arquivo. (BARAK, 2002)

    Quando um processo é iniciado, o Mosix escolhe qual o melhor nodo que poderá executá-lo, o envia para tal e monitora sua execução. Assim, o usuário não vê nada, o cluster faz tudo transparentemente.

    O Mosix pode ser implementado em maquinas ao qual serão usadas em outras tarefas (desktops, por exemplo), pois ele é totalmente imperceptível ao usuário, e em redes heterogêneas, com todo tipo de computadores inclusive com os que possuem processadores de 64bits, ou mesmo os novos processadores multi-core (Vários núcleos de processamento).

    Entre as características do Mosix destacam-se as principais:

    * Usuários podem fazer login em qualquer nodo do cluster sem a necessidade de saberem da existência do Mosix;
    * Não existe nodo controlador;
    * Não é necessário modificar ou apontar os aplicativos a bibliotecas especiais;
    * Pode-se incluir ou remover algum nodo a qualquer momento sem afetar o funcionamento do sistema;
    * Não é necessário copiar arquivos para nodos remotos do cluster;
    * Balanceamento de carga usando migração de processos;
    * Migração de processos dos nodos escassos de recursos para os mais rápidos;
    * Possui algoritmo de monitoramento que identificam, entre outras coisas, a velocidade de cada nó, a carga da CPU, e a memória livre disponível;
    * Tem suporte para trabalhos em batch;
    * Possui ferramentas de instalação e configuração automáticas.


    Aplicações que se beneficiam do Mosix

    * Processos CPU-bound: processos com longos tempos de execução e baixo volume de comunicação entre processos, ex: aplicações científicas, engenharia e outras aplicações que demandam alto desempenho de computação;
    * Grandes compilações;
    * Para processos que misturam longos e rápidos tempos de execução ou com moderadas quantias de comunicação interprocessos, somado ao uso das bibliotecas MPI/PVM;
    * Processos I/O bound misturados com processos da CPU quando executados através do servidor de arquivos, usando o sistema de arquivos distribuídos;
    * Banco de dados que não usem memória compartilhada;
    * Processos que podem ser migrados manualmente.


    Algumas desvantagens do Mosix


    * Processos com baixa performance, quando aplicativos com alta comunicação interprocessos são executados;
    * Aplicações dependentes do hardware que necessitam de acesso a um periférico de um nó em especial não podem ser distribuídas;
    * Aplicações com muitas threads não ganham desempenho;
    * Não se ganha desempenho quando se roda um único processo, tal como o browser.


    Sistema Operacional
    O sistema operacional usado foi o GNU/Linux Debian Etch, onde ele foi instalado com todas as opções padrões do assistente de instalação em modo gráfico.

    A escolha do uso desta distribuição foi por sua robustez e estabilidade, e também pela facilidade de trabalhar com pacotes pré-compilados nativos ".deb".

    O Mosix pode ser usado em quase todos os sistemas operacionais baseados em UNIX, inclusive heterogeneamente com hardwares diferentes.

    Obtendo o Mosix
    O Mosix pode ser obtido no site oficial do desenvolvedor (Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...), onde existe disponível uma versão para estudos com suporte para até seis nodos. Foi escolhida a versão MOSIX-2.24.2.3 para kernel 2.6.27, ao qual foi trabalhado.

    Os nodos e rede (modelo de ensaio)
    Para a montagem deste cluster foram utilizados três nodos, cada um com memória RAM de 512MB, Hard Disk de 80GB, processador Pentium IV de 3.40GHz e placa ethernet 10/100Mbps.

    A rede entre os três nodos foi interligada através de cabeamento UTP (cabo de par trançado) a um 10/100 ethernet switch, da Hard Cam e o protocolo Ipv4 onde foi definida a rede 10.0.0.0/8 em seqüência partindo do primeiro endereço.

    Toda a rede foi configurada através do script rc.local (/etc/rc.local - script que é executado em toda inicialização do sistema, muito utilizado para configurações e inicialização de serviços) conforme mostra a Figura 1, alterando apenas o endereço IP de cada nodo:



    Instalação do Mosix
    O Mosix pode ser instalado de duas maneiras, através de um script de instalação automática com o nome de "mosix.install", que faz todas as modificações necessárias para o uso do mesmo simplesmente executando o comando:

    # ./mosix.install


    Ou em caso de falha na instalação automática, manualmente, primeiramente copiando os arquivos do Mosix para seus respectivos diretórios.

    Arquivos e diretórios para instalação. Arquivo seguido de seu diretório:

    bestnode /bin
    features /etc/mosix/features
    tunes /etc/mosix/tunes
    migrate /bin
    mon /bin
    mosconf /sbin
    mos_checkconf /sbin
    mosctl /bin
    mosd /sbin
    mosenv /bin
    mosixd /sbin
    moskillall /bin
    mosps /bin
    mosq /bin
    mosqueue /bin
    mosrun /bin
    native /bin
    prep_tune /sbin
    qmd /sbin
    remoted /sbin
    setcl /sbin
    setpe /sbin
    tune /bin
    tune_mosix /bin

    Após a cópia dos arquivos é necessário aplicar o patch do Mosix no kernel e fazer sua recompilação. O kernel escolhido foi o linux-2.6.27.1.tar.bz2, ao qual foi obtido diretamente do site:

    * Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...


    Após obtê-lo, o novo kernel foi descompactado para o diretório /usr/src e feito um link simbólico para a pasta linux-2.6.27.1 com o nome de "linux" através do comando:

    # ln -s linux-2.6.27.1 linux

    O próximo passo foi aplicar o patch do Mosix no kernel. Para isso foi copiado o patch referente a versão do kernel para o diretório /usr/src/linux/ e dado o comando:

    # patch -p1 < patch-2.6.27.1

    Como o objetivo da compilação de um novo kernel foi apenas a aplicação do patch do Mosix, a configuração do kernel antigo foi copiada para ser usada no novo kernel:

    # cp /boot/config-`uname -r` /usr/src/linux/.config


    E aberto o menu de configuração do kernel:

    # make menuconfig

    Foi selecionada a opção "Alternate Configuration File" e escolhido o arquivo ".config" previamente copiado para o diretório.

    Para concluir a configuração do novo kernel foi selecionado o "Exit" e confirmado as novas configurações.

    Com o patch aplicado e o kernel configurado foi feita a compilação e criação do pacote de instalação. Tendo em vista que foi utilizado o sistema operacional Debian, ao qual utiliza sistema de pacotes .deb, o kernel foi compilado e empacotado nesse sistema, para facilitar a instalação do mesmo, com os comandos:

    # make-kpkg clean

    Que elimina os arquivos que foram criados durante a montagem do novo kernel, ou arquivos de compilações anteriores.

    # fakeroot make-kpkg --initrd --append-to-version=-MOSIX kernel_image kernel_headers

    Que faz a compilação do novo kernel.

    Passados uns quarenta minutos a compilação do kernel foi concluída, gerando dois pacotes no diretório /usr/src com os nomes:

    * linux-image-2.6.18.1-MOSIX_2.6.18.1-MOSIX-10.00.MOSIX_i386.deb
    * linux-headers-2.6.18.1-MOSIX_2.6.18.1-MOSIX-10.00.MOSIX_i386.deb


    que são os pacotes de instalação do novo kernel.

    Para efetuar a instalação foi executado o seguinte comando dentro do diretório /usr/src:

    # dpkg -i *MOSIX*deb

    Onde instala os dois pacotes e já configura o sistema para utilizar o novo kernel, concluindo a instalação do Mosix neste nodo. Esse processo se repete em cada um dos nodos participantes do cluster.

    Configuração do Mosix
    O Mosix pode ser configurado por um utilitário de configuração em modo texto.

    O utilitário foi acessado com o comando mosconf no terminal. Ele exibe as várias opções de configuração do Mosix, conforme figura abaixo:


    * Na primeira opção configura-se quais nodos estão no cluster, adicionando novos nodos ou removendo.
    * A segunda faz referência à segurança, onde é fornecida uma senha de acesso aos nodos, para evitar o acesso indevido por outros meios que não sejam o Mosix.
    * A opção três é responsável pela numeração lógica do cluster ou mapeamento, onde é criada uma regra de numeração para a identificação de cada nodo na rede.
    * No item de número quatro existe a opção de indicar um nodo do cluster para gerenciar as tarefas, e mais configurações a respeito de gerenciamento de processos.
    * O quinto são as políticas de congelamento, caso algum processo tenha que ser interrompido antes do seu termino essas políticas serão responsáveis para a retomada do processo de onde ele parou.
    * A sexta opção é onde são configuradas várias opções, como a velocidade do processador, IP associado ao nodo, logs para chamadas de processos do cluster e reserva de espaço em disco para uso dos processos privados do cluster.
    * A sétima opção é a configuração do nodo para participar de uma grade organizacional de clusters, onde ele pode fazer parte de outros clusters em outras localidades.


    Todas as configurações feitas pelo utilitário são automaticamente aplicadas ao nodo.

    Pode-se também configurar ou alterar a configuração do Mosix diretamente em seus arquivos de configuração, onde os mais importantes são:

    * mosix.map - onde se trata da lista dos nodos do cluster;
    * mosip - o endereço IP usado pelo Mosix;
    * features - indica as características do nodo;
    * secret - arquivo que guarda a senha de acesso ao cluster;
    * ecsecret - senha para autenticação de clientes de serviço batch;
    * essecret - senha para autenticação se servidor de serviços batch;
    * freeze.conf - configuração de políticas de congelamento de processos;
    * queue.conf - indica o gerenciador de fila de processos padrão;
    * userview.map - indicação lógica dos nodos para serem exibidos no aplicativo monitor.


    Após qualquer modificação em algum dos arquivos de configuração deve ser executado o comando "setpe" para aplicar as modificações ao nodo.

    Conteúdo dos principais arquivos de configuração do Mosix
    mosix.map:
    Código:
    10.0.0.1 6 p
    mosip:
    Código:
    10.0.0.1
    features:
    Código:
    rat
    cow
    tiger
    rabbit
    dragon
    snake
    horse
    sheep
    monkey
    chicken
    dog
    pig
    earth
    water
    fire
    air
    spade
    heart
    diamond
    club
    green
    blue
    yellow
    red
    metal
    wood
    plastic
    glass
    ball
    star
    arrow
    square
    secret:
    Código:
    senha criptografada
    ecsecret:
    Código:
    senha criptografada
    essecret:
    Código:
    senha criptografada
    freeze.conf:
    Código:
    1 0 6.0 4.0 0.0 0.0 1
    queue.conf:
    Código:
    C 10.0.0.1
    userview.map:
    Código:
    1 10.0.0.1 6
    Testes computacionais
    Assim que toda configuração foi concluída, foram aplicados vários testes para a comprovação do funcionamento do cluster. Os principais foram:

    * Módulo de teste "testload";
    * Teste com o MatLab;
    * Teste com processos simultâneos;
    * Teste com processos locais e remotos.


    Um dos principais aplicativos do Mosix é o monitor dos nodos, que fornece muitas informações importantes sobre os nodos, como a carga de cada CPU:


    E também a memória em uso para cada nodo:


    O próprio Mosix fornece um aplicativo chamado testload que promove uma grande quantidade de carga no CPU para testes, podendo monitorar a distribuição de carga entre os nodos do cluster comprovando seu funcionamento. Esse teste não permite fazer comparação de tempo quanto a execução local ou distribuída, pois ele é orientado a tempo de execução e não a volume de dados.

    Para fazer o teste com o MatLab foi utilizado um algoritmo da rede neural Adaline e um script de teste que realiza vários cálculos numéricos. Em cada um houve diferença no tempo de termino quando executado localmente e quando utilizado o processamento distribuído.

    O arquivo Adaline eu não colocarei devido ao seu tamanho.

    Arquivo teste.m:
    Código:
    a = randn(3000);
    b = svd(a);
    fim=1
    Tempo para execução do algoritmo localmente e distribuído (em minutos):

    Algoritmo Localmente Distribuído
    Adaline.m 3.55 3.46
    Teste.m 1.40 1.36


    Como os testes feitos são relativamente algoritmos pequenos, a diferença de tempo entre processamento local e distribuído é pequena, porem notável. Em algoritmos menores se notou que o tempo de execução distribuída era maior que localmente, a ocorrência desse fato deve-se ao grande uso da rede para comunicação entre os nodos, tornando inviável o uso do processamento distribuído para processos pequenos, causando queda de performance.

    O teste com processos simultâneos se deu com um shell script (linguagem de programação de alto nível interpretada pelo Shell do Linux) ilustrado na figura a seguir, que gerou vários processos simultâneos. A execução local desse shell script teve um tempo bem elevado, e distribuidamente esse tempo foi bem reduzido, foi o teste que melhor demonstrou a eficiência do cluster Mosix.


    Tempo para execução do shell script de teste (em minutos):

    Execução Tempo
    Local 89,35
    Distribuída 60,22


    O teste de processos locais e remotos consistiu e executar programas locais, tais como openoffice etc, juntamente com as rotinas de testes citadas anteriormente. O teste principal foi feito com o editor de texto do openoffice, e o browser Firefox. Todos os testes anteriores foram executados novamente (somente distribuidamente), porem com os processos locais rodando em cada um dos nodos. Notou-se uma leve diferença nos tempos de termino dos processos. O teste feito através do testload não pode ser avaliado por ser orientado a tempo de execução e não a volume de dados.

    Teste de processos locais e remotos:

    Teste Sem processos locais Com processos locais
    Adaline.m 3,46 3,49
    Teste.m 1,36 1,38
    Shell Script 60,22 61,35

    Conclusão
    O Mosix é composto por várias ferramentas de gerência de clusters de fácil utilização, possui algoritmos para alocação dinâmica de recursos, permite muitas alternativas de implementação, promovendo uma maior flexibilidade do sistema de maneira simples.

    A facilidade de instalação e configuração do Mosix é um fator essencial para sua utilização. Os sistemas eficientes de monitoração e gerência são itens importantíssimos para o gerenciamento de um cluster, o Mosix oferece ferramentas para tal muito eficientes, e de fácil uso.

    A transparência perante os usuários foi total, onde o usuário pode executar tarefas simultâneas sem saber da existência do Mosix.

    O desempenho deste cluster se mostrou muito bom, em relação aos testes feitos o cluster funcionou perfeitamente com resultados satisfatórios.

    Ainda existem muitos recursos desde cluster que não fora explorados neste artigo, aumentando a gama de recursos desse sistema de computação paralela.

    Com esse projeto foi comprovado o poder da computação paralela, as possibilidades criadas pela mesma, as aplicações possíveis, e ainda as vantagens e desvantagens de seu uso.

    O ganho computacional foi maior em grandes processos de cálculos, onde a comunicação interprocessos é menor, causando menos tráfego na rede. Para a implantação de um cluster deste tipo, é importante fazer a análise das aplicações que serão utilizadas, para garantir um real ganho computacional.

    Referências
    BARAK, Amnon, MOSIX 2 Cluster and Multi-Cluster Grid Management. 2008.

    MOSIX-wiki. Disponível em <http://www.mosix.org/wiki/index.php/MOSIX-wiki> Acesso em 19 de Novembro de 2008 às 16h.56min.

    Fonte: vivaoLinux
    Postado Por: RedDeviL




X
Working...
X