segunda-feira, 23 de junho de 2014

Apache Web Service + JBoss Mod cluster (Loadbalance) + JBoss AS 7 no CentOS 6.5 - 64 bits


INTRODUÇÃO

explicamos detalhadamente a instalação do Apache Web Service (conhecido como "httpd") com o JBoss Mod Cluster já instalado. Nesse artigo, vamos explicar a configuração para o Apache Web Service "limpo", isto é, o httpd instalado no CentOS sem nenhum módulo adicional, em outras palavras, com a configuração padrão do httpd para o CentOS.



DESENVOLVIMENTO

Instalando e configurando o Apache Web Service (httpd).

Instalar os seguintes pacotes no CentOS 6.5 64 bits.

yum install httpd httpd-devel apr-devel openssl-devel mod_ssl -y

Depois disso, iniciar serviço do httpd com o comando:

service httpd start

Ou na interface gráfica dentro do CentOS, No menu "Sistema" > "Administração" > "Serviços", conforme mostra a figura a seguir:



Depois de iniciar o servidor httpd, o resultado no endereço http://127.0.0.1 (local) ou outro endereço que está configurado na interface de rede do CentOS, deve ser a página inicial do servidor httpd, conforme mostra a figura a seguir:





Depois de testar o servidor httpd, agora baixe (desligue) o httpd que vamos inserir módulos do projeto JBoss ModCluster para poder configurar o loadbalance (Balanceador de carga, isto é, de requisições HTTP).

Para isso, entre nesse site: http://mod-cluster.jboss.org/
faça o download da versão 1.2.6.Final para o sistema operacional linux-x86_64

Observação: Não baixe as versões que venha com o httpd incluído, pois estaremos usando o httpd fornecido dentro dos repositórios de pacotes .rpm do CentOS 6.5. Dá para notar que o tamanho do arquivo com o httpd é da ordem de megabytes, enquanto o arquivo só com os módulos é da ordem de kilobytes.

Ao baixar o arquivo, descompacte o arquivo *.tar.gz com o seguinte comando:

tar xvfz mod_cluster-1.2.6.Final-linux2-x64-so.tar.gz 

Dentro do arquivo compactado, teremos 4 arquivos binários com a extensão *.so que são:

mod_advertise.so
mod_manager.so
mod_proxy_cluster.so
mod_slotmem.so

Esses são os 4 módulos que vão ser inseridos na pasta /etc/httpd/modules, então, deve-se copiar esses arquivos para esse diretório, tomando cuidado para que o dono e grupo dos arquivos sejam sempre root.
Caso contrário, ao iniciar o httpd, o mesmo reportará erros de permissão nos módulos e não conseguirá ser iniciado.

Agora vamos para o diretório  /etc/httpd/conf e edite o arquivo httpd.conf com os seguintes dados:

Comente a linha do módulo proxy_balancer_module para não entrar em conflito com o modulo de proxy do JBoss Cluster (mod_proxy_cluster) que estaremos incluindo:

#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

Insira as seguintes linhas depois das outras linhas com o nome "LoadModule":

LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so


Inserir a seguinte linha depois da linha com o comando "Include conf.d/*.conf"

MemManagerFile /var/cache/mod_cluster

Por último, inserir o comando "IfModule" para o módulo "manager_module" conforme mostra código a seguir:

<IfModule manager_module>
   Listen 0.0.0.0:6666
   ManagerBalancerName mycluster
   <VirtualHost *:6666>
       <Location />
       Order deny,allow
       Deny from all
       Allow from all
  
       KeepAliveTimeout 300
       MaxKeepAliveRequests 0
       ServerAdvertise Off
       EnableMCPMReceiver Off
  
       <Location /mod_cluster_manager>
            SetHandler mod_cluster-manager
            Order deny,allow
            Deny from all
            Allow from all
       </Location>
   </VirtualHost>
</IfModule>


Depois disso, iniciar o servidor com o comando:

service httpd start

Observação: Nesse momento, é importante iniciar o servidor dessa maneira para que o mesmo possa imprimir no console os erros que possam ocorrer. Se iniciar pela interface gráfica e se tiver erros no arquivo httpd.conf, o servidor não iniciará e ficar com um alerta dizendo que está morto, ou a interface gráfica ficará travada. Também podemos olhar os logs no diretório /etc/httpd/logs mas o trabalho para chegar até ai e usar os velhos comandos como tail -f error.log seria muito demorado. Quando ocorre erros, o erro já foi reportado no próprio console, depois de executar o comando service httpd start.


Configurando o JBoss AS 7 para funcionar com o httpd + mod_cluster

Próximo passo é configurar o JBoss AS 7 para se conectar no httpd com o mod_cluster instalado. Para isso, altere o arquivo de configuração standalone-full-ha.xml da pasta $JBOSS_HOME/standalone/configuration conforme as configurações abaixo:

<subsystem xmlns="urn:jboss:domain:modcluster:1.1">
    <mod-cluster-config advertise-socket="modcluster" proxy-list="127.0.0.1:6666" connector="ajp">
         <dynamic-load-provider history="10" decay="2">
              <load-metric type="cpu" weight="2" capacity="1" />
              <load-metric type="sessions" capacity="512" />
         </dynamic-load-provider>
    </mod-cluster-config>
</subsystem>

<subsytem xmlns="urn:jboss.domain:web:1.2" default-virtual-server="default-host" instance-id="%{jboss.node.name}" native="false">
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" />
    <connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp" />
    <virtual-server name="default-host" enable-welcome-root="true" >
          <alias name="localhost" />
    </virtual-server>
</subsystem>

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}" >
    <socket-binding name="ajp" port="8009" />
    <socket-binding name="http" port="8080" />

</socket-binding-group>

Depois disso, abrir navegador no endereço http://127.0.0.1, conforme mostra a figura seguir:



Note que a página inicial do httpd "sumiu", isto é, ficou no lugar da página inicial do JBoss AS 7. Isso mostra que o balanceador de carga (mod_cluster) + httpd (servidor web) estão funcionando juntos e corretamente!



CONCLUSÃO

Mostramos nesse artigo como configurar, instalar o JBoss ModCluster dentro do Apache Web Service e assim, funcionando junto com o servidor JBoss AS 7. Lembrando que podemos instanciar N servidores jboss para trabalhar com o mesmo servidor httpd, desta maneira, se um servidor jboss cair (for derrubado), o httpd com o mod_cluster instalado, detectará que uma instância do cluster de JBoss AS 7 caiu e não enviará mais requisições a essa instância.

Para realizar o acesso externo no CentOS, veja mais informações nesse link: http://tidahora.com.br/index.html/doku.php?id=instalando_o_mantis_no_centos_6. Esse artigo cita a instalação de um outro programa web como o Mantis (https://www.mantisbt.org/), mas cita a desativação do serviço SELINUX com a edição do arquivo /etc/selinux/config e pede para mudar a seguinte linha:

SELINUX = disabled

Para desabilitar o SELINUX. Depois, no menu "Sistema" > "Administração" > "Firewall" e configure o par porta/protocolo para o Firewall deixar fazer o acesso. Lembrando de clicar em "Aplicar" para as configurações possam estar valendo no sistema.
Por último, configurar o Iptables no linux para deixar realizar o acesso pelas portas necessárias. A configuração disso está fora do escopo desse artigo, podendo ser realizada pelo link http://www.guiafoca.org/cgs/guia/avancado/ch-fw-iptables.html.
Ou como solução paliativa e para fins de desenvolvimento e testes, pode se desativar o serviço de Iptables no menu "Sistema" > "Administração" > "Serviços".


REFERÊNCIAS

http://jbossdivers.wordpress.com/2014/03/23/configurando-um-ambiente-wildfly-8-profissional/






quinta-feira, 5 de junho de 2014

Overclock de Notebook


INTRODUÇÃO

Nesse artigo vamos falar um pouco sobre overclock de notebook, de maneira a melhorar o desempenho e consequentemente, esticar a vida útil do produto. Caso contrário, teríamos que comprar outro notebook em um curso prazo de tempo. Para isso, vamos falar de algumas técnicas e modificações no notebook para melhorar o desempenho. E por último, é importante destacar que o overclock aplicado no notebook não visa necessariamente aumentar a frequência do processador para além da fabricada (1,8 GHz) e sim, aplicar técnicas que visam dissipar calor, melhorar throughput (fluxo, vazão, por unidade de tempo, usando qualquer medida, como por exemplo, bytes por segundo, etc) entre os dados que trafegam entre a CPU-Memória e outros.


DESENVOLVIMENTO

Todo semicondutor como CI, transistores, diodos e outros ao entrarem em funcionamento, gastam energia por unidade de tempo (Joules / segundo) que é chamada de potência. Quanto maior a potência dissipada, maior o calor dissipado pelo semicondutor.
O aquecimento em semicondutores como CI, transistores, diodos e outros, faz com que os elétrons ganhem energia extra para mudar de níveis de tensão, sem precisar do chaveamento lógico que ocorre durante o funcionamento da CPU. Com isso, o estado interno da CPU (Registradores, memória, etc) tem funcionamento instável o que pode levar a erros de cálculos e constantes travamentos. Por isso, precisamos dissipar esse calor, pois evitarmos seria impossível, pois se o semicondutor não dissipa calor, ele não está dissipando potência e consequentemente, não realiza trabalho e por último, não funciona.

Conforme a figura a seguir, vemos o notebook a sofrer overclock. Esse notebook tem 2 GB de ram (o máximo suportado), roda Ubuntu Linux 14.10 (se usar outro sistema operacional como Windows, o notebook não suportaria e ficaria extremamente lento), frequência de CPU de 1,8 GHz.



Como vemos na figura a seguir, mostramos as principais regiões que dissipam mais calor, como CPU, placa de vídeo (NVIDIA) e memória.




Na figura a seguir, destacamos as áreas que mais dissipam calor com a cor VERMELHA.
Essas regiões foram identificadas pelo aquecimento excessivo no notebook.



Para resolver o problema do aquecimento, precisaríamos abrir mais espaço de ventilação, pois os furos originais na memória são praticamente insuficientes! E também, é difícil para um projetista de produtos como notebook, pensa em desenhar (projetar) um notebook que possa resistir por longos tempos de uso e sobre uso severo (sistema operacional que usa toda a memória, frequência baixa da CPU, baixo throughput (fluxo, por unidade de tempo, bytes por segundos ou outras grandezas, de qualquer área) entre a CPU – Memória – Placa de Vídeo.
Esses furos foram realizados em sua maioria por uma furadeira de maneira a permitir maior passagem de ar entre os módulos de memória e placa de vídeo. Sem esses furos, foi constatado que a CPU ficava esperando a memória, pois ficava sempre em 99 % de uso, depois disso, houve melhor vazão (throughput) de dados entre CPU-Memória e consequentemente, a CPU dá uns picos de 100% e caí rapidamente para 5%, nisso eliminamos o gargalo (ponto de maior estrangulamento num fluxo de dados ou em qualquer outra área, como logística, química e outras.) de comunicação CPU-Memória.





Na próxima figura, vemos que a base (rodapé) que segura o notebook apoiado em uma mesa precisou ser serrado, pois o mesmo, atrapalhava a circulação de ar da CPU do notebook. É como se o ar quente ficasse “parado” e deixando a CPU mais quente ainda. Ou de forma análoga, é como um carro sem sistema de arrefecimento, aonde o motor vai esquentando, o ar quente em volta não “saí”, isto é, não se dissipa, e deixa o motor mais quente, até queimar o motor. No caso da CPU, isso leva ao travamento da mesma.





Na próxima figura, usamos uma mesa que possui ventoinhas para deixar o notebook mais frio. Esse acessório, também chamado de “cooler de notebook” é encontrado em praticamente todas as lojas de informática. Nisso, estamos ajudando o notebook a dissipar o calor, pois não adianta nada, ter boa circulação de ar (com os furos na parte da memória e placa de vídeo) e o ar não “circula”. Ai entra o papel da mesa para forçar a circulação de ar, de modo a eliminar o ar quente que foi dissipado do notebook.




Na próxima figura, mostramos o gráfico de uso da CPU que se mantém em 5 % com alguns picos de quase 80 %, mas depois “volta” aos 5% e baixo calor nas memórias, placa de vídeo e CPU.
Quando a CPU e memória ficavam quentes, isto é, temperaturas próximas a 60 graus celsius, a CPU ficava mais lenta e depois de um tempo e usando programas pesados como a IDE Eclipse Kepler para desenvolvimento em linguagem Java, a CPU travava.




CONCLUSÕES

Mostramos de maneira simples como melhorar o desempenho do computador enquanto não se tem “grana” para comprar o outro notebook. Além disso, fica claro que intervenções são necessárias para melhorar a circulação de ar no notebook. Para notebooks novos, isso violaria a garantia, mas para notebooks antigos (como esse do artigo), ganharia mais tempo de uso.


REFERÊNCIAS




quarta-feira, 19 de março de 2014

Primeiros Passos com o Raspberry PI



INTRODUÇÃO

Nesse artigo vamos explicar como configurar o Raspberry PI de modo a deixá-lo operacional ao usuário. Para quem não conhece, o Raspberry PI é um mini computador portátil e de baixo custo. A proposta do Raspberry PI é custar aproximadamente US$ 35,00. No Brasil, o seu preço somando os impostos como taxas de importações, etc, o preço é de aproximadamente R$ 199,00. Mesmo assim, comparando com outros computadores que chegam a custar milhares de reais, o Raspberry PI mostrou-se um computador de baixo custo e útil. Na próxima seção, vamos descrever as suas características e configurações.


DESENVOLVIMENTO

Na figura a seguir, vemos como o Raspberry PI foi configurado e conectado para poder funcionar como um computador com vídeo em HD (saída HDMI), conexão a internet (saída cabo de rede ethernet), mouse, teclado (2 saídas USB), dispositivo de armazenamento, que vai fazer o “papel” do disco rígido que é um cartão portátil SD. E por último, a fonte de alimentação que geralmente é uma fonte de algum smartphone que forneça no mínimo 700 mA de corrente e 5 volts de tensão. Nessa figura, está sendo usado uma fonte de smartphone da marca “samsung” de 1A e 5 volts.

Custos:

1 Raspberry PI modelo B de 512 MB – R$ 199,00
1 Caixa de proteção transparente* – R$ 35,00
1 Fonte de 1 A – 5 volts – carregador de smartphone – R$ 99,00
1 Cartão SD de 16 GB – R$ 65,00
1 Mouse – R$ 30,00
1 Teclado – R$ 30,00

Total: R$ 458,00

OBS: Nessa lista não foram inclusos os cabos de rede, hdmi, roteador, monitor ou televisão.


* A caixa de proteção foi comprada depois de ser tirada essa foto, mas a caixa ajuda a proteger o aparelho, apesar que o ideal mesmo é deixar o Raspberry PI aberto para ter mais ventilação e menos problemas com aquecimento. Bom, esses testes de stress não foram feitos e não foram notados problemas com aquecimento nele.







Nas próximas figuras, serão mostrados os passos necessários para instalar/configurar o sistema operacional Raspbian. Esse sistema operacional é derivado do debian (http://www.debian.org) e foi ajustado para ser instalado no hardware do Raspberry PI. Nessas figuras, estamos supondo que o leitor já tenha o cartão SD formatado e com o NOOBS (New Out Of Box Software) instalado. Caso não tenha o cartão SD instalado com NOOBS, acesse a página (http://www.raspberrypi.org/quick-start-guide) para poder seguir os passos para a instalação do NOOBS. Esse software permitirá escolher o sistema operacional da melhor maneira possível, pois se o sistema operacional escolhido der “pau” ou não funcionar, tem uma opção que é clicar em “shift” na inicialização do sistema para entrar no modo resgate e reinstalar o mesmo.



Instalação do sistema operacional pelo NOOBS.








Configurando o Raspbian

Nessa próxima etapa vamos configurar o Raspbian com a localização do usuário, teclado, habilitar um servidor SSH para comunicação remota e outros. Lembrando que um servidor SSH habilitado permite acesso remoto de outro micro ao raspberry em console e conexão segura. Esse tipo de servidor já vem junto com o Raspbian no momento da instalação. O acesso a servidores SSH pode ser feito por clientes SSH como o WinSCP (http://winscp.net para windows). Outra opção é usar o programa SAMBA (http://www.samba.org) para compartilhar arquivos entre windows e linux. Nesse caso, precisaria instalar pacotes “.deb” relacionados ao SAMBA para instalar o servidor SAMBA de arquivos.



















CONCLUSÃO

Nesse artigo mostramos um pouco do minicomputador portátil Raspberry PI e algumas configurações para poder usá-lo. Lembrando que o Raspberry PI pode ser conectado com outras placas controladoras como Arduíno (http://www.arduino.cc) através das portas GPIO (http://elinux.org/Rpi_Low-level_peripherals). E também, podemos instalar servidores web como o Apache WebService (chamado de httpd no linux, http://httpd.apache.org) para rodar no Raspberry PI. Mas usar servidor web + banco de dados (PostgreSQL, http://www.postgresql.org) + servidor de aplicações JBoss (http://www.wildfly.org)
no mesmo Raspberry PI não é possível, digo isso em questões de performance, pois esse minicomputador não “aguenta” e fica lento. O ideal é montar um cluster de Raspberry PI e colocá-los interconectados por um roteador de alta velocidade e baixa latência, nesse caso, cada Raspberry PI teria apenas um servidor. Por exemplo, o Raspberry PI nome “A” rodaria só o banco de dados Postgresql, o Raspberry PI nome “B” rodaria o servidor Apache (httpd) e por último, o Raspberry PI nome “C” rodaria o servidor de aplicações JBoss.
Além disso, existe outro projeto no site http://arkos.io que visa fornecer um sistema operacional linux modificado para subir alguns servidores como web, banco de dados e outros. O mais interessante no projeto é o painel de gerenciamento desse sistema operacional (dashboard), que mostram as informações de maneira organizada e fácil de administrar. Pois para quem administra servidores, precisa sempre ter uma lista de comandos para verificar logs (o famoso comando “tail -f -n 50 arquivo.log”), iniciar, parar httpd, verificar banco de dados, etc. Quase sempre essa lista existe explicitamente num papel ou implicitamente na memória do administrador. Mas esse projeto tem o problema de estar no estado “Beta” e ainda precisa amadurecer mais para ter um uso mais confiável no Raspberry PI.



REFERÊNCIAS

Site oficial do projeto

Artigos técnicos

Faqs

Techtudo


Sites para compra de Raspberry PI:

Laboratório da garagem

Robocore

Farnell

segunda-feira, 3 de fevereiro de 2014

Comandos básicos para manipular o servidor de banco de dados MySQL



INTRODUÇÃO

Esse artigo visa mostrar alguns comandos uteis e essenciais para a administração de um servidor de banco de dados MySQL.



DESENVOLVIMENTO

Logar no servidor de banco de dados MySQL
Serve para conectarmos ao servidor via programa cliente como a interface em linha de comando que vem na instalação do servidor MySQL, driver JDBC (linguagem Java), módulo MySQL dentro do PHP para poder fazer a conexão com o servidor e outros clientes de diversas linguagens e plataformas. Nesse caso, estamos supondo que o usuário tem o nome “root” e senha “123456”. Observação: Esse comando fará o usuário entrar no ambiente em console do MySQL.

mysql -–user=root --password=123456;


Mostrar todos os databases
Serve para mostrar todos os databases (banco de dados em si) do servidor de banco de dados MySQL. Útil para verificar se um determinado database está contido no servidor ou será necessário criá-lo.

show databases;


Criar um database
Serve para criar um database no caso de não existir dentro do servidor MySQL. Dentro desse database, estará contido todas as tabelas e informações necessárias para configurar os relacionamentos e administrar esse database. Cada database é isolado do outro, de modo que cada database tem o seu próprio conjunto de tabelas e outras informações pertinentes.

create database novo_database;


Selecionar um database para uso.
Serve para selecionar um database para a partir desse podermos manipular o nosso banco de dados com comandos SQL como select, insert, update, etc.

use nome_database;


Exportando banco de dados
Serve para fazer backup de um banco que está dentro do servidor de banco de dados e que será inutilizado. O arquivo gerado, contém todos os dados e as estruturas (tabelas, relacionamentos, etc) para poder ser importando em outro servidor. Observação: Rodar esse comando fora do ambiente MySQL.

mysqldump -uroot -psenha seu_database > Arquivo.sql;


Importando banco de dados
Serve para carregar o novo servidor de banco de dados com os dados e as estruturas vindos de um banco de dados em um servidor antigo ou que será descontinuado. Importante, o database informado no comando deve existir no servidor destino (que receberá os dados). Nesse comando, temos o uso do servidor de ip “127.0.0.1” que é o servidor local, caso o servidor esteja localizado em outra máquina (host), fornecer o ip apropriado. Além disso, temos o usuário “root” e senha “123456”, com o database “meu_database” e o arquivo SQL “Arquivo.sql” com todos os comandos necessários para refazer todas as estruturas (tabelas, relacionamentos) e dados (registros, linhas) do banco que foi exportado nesse arquivo. Observação: Rodar esse comando fora do ambiente MySQL.

mysql -h127.0.0.1 -uroot -p123456 meu_database < Arquivo.sql;


Verificando todos os usuários cadastros no servidor
Serve para verificar os usuários cadastrados no servidor. Lembrando que o servidor MySQL usa a sua própria estrutura (servidor de banco de dados) para se auto-administrar. Isso significa que existem tabelas para administrar o próprio servidor. Da mesma maneira, outros fornecedores como a Oracle, também usa o seu próprio banco de dados para se auto-administrar também.
O MySQL possui um database chamado “mysql” que contém todas as tabelas de administração do servidor. E uma dessas tabelas, como a tabela “user”, armazena todos os usuários que podem acessar o servidor, pois toda a comunicação com servidor, envolve o uso de uma conta de usuário/senha/roles. O termo “roles” está mais relacionado a funcionalidades do servidor de banco de dados que o usuário tem acesso ou não tem acesso.

use mysql;

select User from user;


Criando usuário para acessar o servidor
Serve para termos um usuário com senha para qualquer cliente poder-se conectar no servidor de banco de dados. Cria o usuário 'meu_usuario' com senha '1' no servidor MySQL. Lembrando de usar usuário root com privilégios suficientes para essa tarefa, caso contrário, não podemos criar outros usuários. Geralmente, esse usuário “root” é configurado na instalação do servidor.

use mysql;

CREATE USER 'meu_usuario'@'%'
IDENTIFIED BY '1';


Dando privilégios para o usuário acessar o servidor
Sem privilégios, o usuário não poderá fazer nada no servidor, depois da conexão (login).
No MySQL, podemos segmentar os privilégios de acesso, de maneira que um usuário pode executar determinados comandos como select, insert e update e outros usuários pode criar tabelas e apagá-las, por exemplo. Mas nesse artigo, vamos dar privilégios totais para fins educativos e para testes de acesso. Depois disso, quando for criar algum usuário, ai sim pode fazer a segmentação de privilégios, dependendo de cada usuário em questão.

GRANT ALL PRIVILEGES ON*.* TO 'meu_usuario'@'%' WITH GRANT OPTION;



CONCLUSÕES

Esse artigo mostrou alguns comandos essenciais e que são muito usados na manipulação de dados no MySQL. Frequentemente, teremos que fazer backup, migrar servidor MySQL de uma máquina (host) para outra, etc.



REFERÊNCIAS