Resumo

Este é um laboratório prático para a instalação e testes de um cluster de servidores de aplicações GlassFish em sua versão 3.1. Apresentado durante o evento JustJava 2011 em São Paulo/SP. Os slides utilizados durante a apresentação estão em JustJava2011.pdf. Você pode baixar este documento, e os arquivos utilizados por ele no evento, através do download do arquivo JustJava2011.zip.

Requisitos

Para compreender melhor este tutorial, você precisará de:

Iniciando e verificando os requisitos

Neste tutorial, eu utilizo a vm-curso-ladoservidor (VM) como uma segunda máquina (Linux Ubuntu 10.10), para a execução de um cluster remoto. O HOST (máquina que executará a VM) é um Mac OS X (10.6.7) e executará a VM através do VirtualBox 4.0.6. Siga os procedimentos de instalação descritos na página da vm-curso-ladoservidor estando atento às seguintes questões:

Após realizar a instalação da vm-curso-ladoservidor, verifique se a rede entre o HOST e a VM funcionam adequadamente. Antes de colocar a VM em execução, é preciso verificar se as configurações de rede no VirtualBox estão adequadas. O Ubuntu (executado na VM) deverá obter um IP na mesma rede do HOST e, para isto, uma configuração de rede rápida que deverá funcionar será colocar a placa da VM em modo "Host-Only". Após iniciar a VM, para verificar o IP obtido pelo Linux é só abrir um shell e digitar:

$ ifconfig eth0

Voltando ao HOST, é interessante "pingar" o IP da VM, verificando a conectividade entre eles (substitua o IP abaixo pelo IP da VM em teu ambiente):

$ ping 192.168.56.101

Os scripts que serão comandados abaixo estão pré-configurados para executar a partir do nome da VM (curso-ladoservidor). Desta forma, é preciso averiguar se este nome está corretamente associado ao IP da VM, editando o arquivo /etc/hosts do HOST:

$ sudo vim /etc/hosts

Da mesma forma, o nome completo do HOST deverá ser reconhecido pelo VM. Para isto, você deverá cadastrar este nome no arquivo /etc/hosts na VM (utilize o mesmo comando mostrado acima).

Estes scripts também executarão tarefas relativas a cópias de arquivos e execuções de programas, de forma remota e segura, através de SSH. O GlassFish suporta a execução de vários comandos através de SSH e, para não ser necessário a entrada de senhas, as autenticações necessárias são realizadas através de arquivos de chaves. Sendo assim, iremos gerar estas chaves (no HOST), através do seguinte comando:

$ ssh-keygen -t rsa

Precisaremos exportar a chave pública do HOST para a VM, inserindo o seu conteúdo no arquivo ~/.ssh/authorized_keys da VM para o usuário aluno. Uma forma fácil de fazer isto é executar o script ssh-copy-id (presente em distros Linux). Entretanto, no Mac OS X este comando não existe e, por isto, ele foi inserido no diretório bin do lab.

Instale o lab através do comando a seguir, que apagará o conteúdo que existir em ~/JustJava2011/lab e recriará este diretório:

$ d=~/JustJava2011/lab; rm -rf $d && mkdir -p $d
$ tar xvfj lab.tar.bz2 -C $d && cd $d

O próximo passo será carregar o arquivo que configura o ambiente para execução do lab. Isto deixará o script ssh-copy-id disponível no $PATH além de outros que utilizaremos. Após subir o arquivo .ambiente para o shell corrente com o comando source, para não ser preciso repetir isto em todo o shell que for aberto, também podemos executar a função instalar_ambiente. Ela alterará o arquivo ~/.bashrc (ou o ~/.profile do Mac OS X) fazendo com que este carregamento seja realizado de forma automática, ao abrirmos um novo shell:

$ source .ambiente && instalar_ambiente

Em seguida, deveremos executar:

$ ssh-copy-id aluno@curso-ladoservidor

Para garantir que tudo funcionará adequadamente, é bom realizar um ssh para a VM e verificar se realmente não está sendo necessária a entrada de alguma senha (o comando deverá apresentar o shell da VM, sem que haja a necessidade de informarmos uma senha):

$ ssh aluno@curso-ladoservidor

Se tudo deu certo até aqui, poderemos finalizar a execução da VM a fim de garantir memória para a continuação deste lab. Isto nos trará de volta ao shell do HOST, dentro do diretório do lab.

Instalando o GlassFish localmentente

Faremos a instalação do GlassFish no HOST através de um script que efetua o seu download e instalação:

$ instalar-glassfish.sh

Ao final da execução deste comando, o zip de instalação do GlassFish estará disponível no diretório instaladores e extraído no diretório ferramentas. As configurações de que zip será baixado, para qual diretório, e onde ele será extraído estão todas realizadas no arquivo .ambiente.

Instalando um cluster GlassFish em uma máquina remota

Nossa primeira atividade será a instalação do GlassFish no servidor remoto (curso-ladoservidor). A variável installdir será criada e utilizada em outros comandos abaixo. Ela contém a localização do GlassFish que será instalado na máquina remota. A comando asadmin install-node utilizará a conta do usuário aluno para realizar esta instalação.

$ installdir=/home/aluno/JustJava2011/lab/ferramentas/glassfish3
$ asadmin install-node --sshuser aluno \
--installdir $installdir curso-ladoservidor

O GlassFish utiliza o conceito de Domain Administration Server (DAS) para a realização das tarefas que serão executadas pelos comandos a seguir. Então, agora precisamos iniciá-lo:

$ asadmin start-domain

Como fizemos a instalação do GlassFish na máquina curso-ladoservidor, agora vamos criar (ou registrar) este nó (node) no DAS. O comando abaixo realiza esta tarefa:

$ asadmin create-node-ssh --nodehost curso-ladoservidor \
--sshuser aluno --installdir $installdir curso-ladoservidor

Todos os nós do GlassFish podem ser visualizados pelo comando a seguir:

$ asadmin list-nodes

Vamos criar um cluster:

$ asadmin create-cluster c1

Neste cluster, vamos criar duas instâncias (i1 e i2):

$ asadmin create-instance --cluster c1 --node curso-ladoservidor i1
$ asadmin create-instance --cluster c1 --node curso-ladoservidor i2

Para sabermos que instâncias temos registradas no DAS e seu estado atual:

$ asadmin list-instances

Agora, vamos subir as instâncias do cluster:

$ asadmin start-cluster c1

Se desejássemos, poderíamos ir até a máquina curso-ladoservidor e verificar que o GlassFish está sendo executado por dois processos (um para cada instância do cluster):

$ ssh aluno@curso-ladoservidor jps -Vvlm

Entretanto, o comando acima é desnecessário! O mais simples seria repetirmos o comando anterior e averiguar o estado das instâncias ;-):

$ asadmin list-instances

Vamos baixar uma aplicação de exemplo para ser implantada no cluster:

$ wget -c \
http://wikis.sun.com/download/attachments/209655304/clusterjsp.ear \
-O exemplos/clusterjsp.ear

Para implantar a aplicação, vamos utilizar o comando a seguir:

$ asadmin deploy --availabilityenabled=true \
--target c1 exemplos/clusterjsp.ear

A opção --availabilityenabled informa ao GlassFish que a aplicação implantada deverá suportar alta disponibilidade. Se não a utilizássemos seria necessário incluirmos a tag <distributable\> no arquivo WEB-INF/web.xml da aplicação para que obtivéssemos esta característica.

Podemos testá-la através das seguintes URLs:

Para testar a replicação de dados da sessão, entre as instâncias, você deverá adicionar um valor a um atributo de sessão a instância i1 e, em seguida, atualizar a tela da segunda instância i2 para verificar se este valor também está inserido nela.

Desfazendo o cluster

Da mesma forma que podemos criar um cluster, instalar o GlassFish em um host remoto e adicioná-lo ao cluster, iniciar instâncias remotamente, etc, o GlassFish também oferece comandos para desfazer estas operações. Vamos a eles...

Para parar as instâncias do cluster:

$ asadmin stop-cluster c1

Para deletar as instâncias:

$ asadmin delete-instance i1
$ asadmin delete-instance i2

Para deletar o cluster:

$ asadmin delete-cluster c1

Para deletar o nó remoto:

$ asadmin delete-node-ssh curso-ladoservidor

Para desinstalar o nó remoto:

$ asadmin uninstall-node --sshuser aluno \
--installdir $installdir curso-ladoservidor

Para parar o DAS:

$ asadmin stop-domain

Conclusão

Esta versão do GlassFish oferece bons mecanismos para facilitar a administração e a montagem de um cluster. Apesar de não termos citado neste tutorial, a interface gráfica para a administração deste servidor também pode ser utilizada como uma boa alternativa para a realização das várias tarefas demonstradas aqui. Explore as referências, especialmente os posts e screencasts publicados por Arun Gupta em seu blog.

Referências

Screencasts


Fonte deste documento (leiame.t2t)