24 de jun de 2009

Weblogic WLST - Inicializando servidores via Node Manager

O weblogic server possibilita a administração de um domínio mesmo quando o servidor de administração estiver fora do ar através do Node Manager que já deve ter sido devidamente configurado para gerenciar o domínio que será administrado.

O Node Manager é um serviço do weblogic server que possibilita a adminsitração de vários servidores configurados em vários hardwares diferentes através de um único console de administração ou de scripts WLST.

Neste post vou mostrar um script que pode ser utilizado para conectar no nodemanager de uma máquina e enviar comandos para inicializar servidores previamente configurados em um determinado domínio administrado por este nodemanager. O script assim como o arquivo de propriedades está comentado e seu código segue abaixo com comentários em seguida:

from java.util  import Properties
from java.io  import FileInputStream
from java.io  import File

#import thread
from string import split

#============DEFINICAO DE FUNCOES============
#funcao que carrega dados de arquivo de propriedades
def carregaArquivoPropriedades(nomeArquivo) :
    print 'carregando propriedades do arquivo: ' + nomeArquivo
    #arquivo de propriedades a ser carregado 
    myProps = Properties()
    #carrega arquivo de propriedades
    myProps.load(FileInputStream(File(nomeArquivo)))
    return myProps

#função que recupera servidores especificados no arquivo de propriedades.
def listaServidores(arquivoPropriedades):
    print 'selecionando servidores da lista de propriedades'
    servidores = []
    propriedades = arquivoPropriedades.propertyNames()
    while propriedades.hasMoreElements():
        #carrega os nomes de todas as chaves carregadas do arquivo de propriedades
        chave = propriedades.nextElement()
        #recupera tipo da chave para verificar se é um servidor se for adiciona no array de servidores.
        elemento = split(chave, '_')
        #checa se elemento carregado do arquivo de properties é um servidor e adiciona na lista de servidores
        if elemento[0] == 'SERVIDOR':
            servidores.append(chave)
    #while que imprime lista de servidores recuperada
    print '=======================AVISO================================================================'
    print'LISTA DOS SERVIDORES A SEREM INICIALIZADOS'
    for servidor in servidores:
        print 'Servidor ==>> ' + arquivoPropriedades.get(servidor)
    print '=======================AVISO================================================================'
    return servidores
            
    
def inicializaInstancias():
    usuario = arquivoPropriedades.get('USUARIO_ADM')
    senha = arquivoPropriedades.get('USUARIO_ADM_SENHA')
    ipNodeManager = arquivoPropriedades.get('NODEMANAGER_IP')
    portaNodeManager = arquivoPropriedades.get('NODEMANAGER_PORT')
    nomeDominio = arquivoPropriedades.get('DOMINIO_NOME')
    diretorioDominio = arquivoPropriedades.get('DOMINIO_DIRETORIO')
    print '\n================================================================================================'
    print 'tentando conexao com o nodemanager...'
    print 'usuario: ' + usuario
    print 'ip Node Manager: ' + ipNodeManager
    print 'porta Node Manager: ' + portaNodeManager
    print 'Nome do dominio: ' + nomeDominio
    print 'Diretorio do dominio no servidor: ' + diretorioDominio
    print '================================================================================================'
    nmConnect(usuario,senha, ipNodeManager, portaNodeManager, nomeDominio, diretorioDominio, 'plain', 'true')
    for servidor in servidores:
        print 'solicitando inicializacao do servidor ' + arquivoPropriedades.get(servidor)
        nmStart(arquivoPropriedades.get(servidor), diretorioDominio)
        
#==========execucao (Main)========

arquivoPropriedades = carregaArquivoPropriedades('servidores.properties')

servidores = listaServidores(arquivoPropriedades)

inicializaInstancias()


O script carrega a lista de servidores de um arquivo de propriedades e inicializa cada um dos servidores declarados no arquivo. Abaixo um arquivo de propriedades de exmplo que pode ser utilizado com este script.

#colocar o IP e porta do nodemanger onde os servidores estão configurados. Caso houver
#necessidade de inicializar ou parar serviores em mais de um hardware o script deverá ser
#executado 1 vez para cada configuração de nodemanager e após feitos os devidos ajustes de ip e
#porta onde o nodemanager se encontra em execução.
NODEMANAGER_IP=localhost
NODEMANAGER_PORT=5559

#colocar o nome do diretório do domínio que será gerenciado pelo script.
DOMINIO_NOME=testescripts
#colocar o caminho completo do domínio que será gerenciado pelo script.
DOMINIO_DIRETORIO=/home/mmaia/weblogic10/domains/testescripts

#usuário e senha de administração deste domínio. Devem ser iguais aos do nodemanager configurados 
#para gerenciamento deste domínio e armazenados no arquivo nm_password.properties do domínio.
USUARIO_ADM=weblogic
USUARIO_ADM_SENHA=weblogic


#lista de nomes das instancias a serem inicializadas ou paradas, deve seguir o padrao SERVIDOR_X=
#pode-se registrar quantas instânciasforem necessárias. As instâncias listadas devem estar
#configuradas no ambiente onde o nodemanager configurado está.
SERVIDOR_1=teste-1
SERVIDOR_2=teste-2
SERVIDOR_ADMIN=AdminServer


[]s

3 comentários:

Charan disse...

Oi,
Seu tutorial me ajudou muito. E se eu tiver vários domínios e vários servidores?

Espero "Traduz Google" fará boa tradução do Inglês para o Português

mmaia disse...

Se você quiser fazer tudo com um único script o que eu faria é separar os domínios e grupos de servidores e para cada domínio faria nova conexão no nodemanager com os dados daquele domínio e no loop a chamada de start dos servidores daquele domínio. Esta lógica ficaria um pouco mais complicada mas se você criar um padrão de nomenclatura no properties ao definir os domínios e respectivos servidores pode então utilizar o comando split para separar os servidores de cada grupo então a lógia seria:


1) Carregar a lista de domínios do properties

2)Para cada domínio:

2.1-Conectar no nodemanager (nmConnect)

2.2 - Fazer um loop similar ao desse exemplo para todos os servidores deste domíno.

2.3 - Desconectar do nodemanager(nmDisconnect)
2.4 - Ir para o próximo domínio definido na lista...


Já fiz código jython para tratar grupos de servidores e utilizei o split do pyton para definir um padrão onde eu pudesse agrupar estes servidores. Seria a mesma idéia neste caso que você colocou.

[]s

Charan disse...

Mmaia Hey,

Sua dica me ajudou a melhorar de script para incluir os servidores de partida para
qualquer não. de domínios e servidores.

Obrigado,
Charan