Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

quarta-feira, 19 de janeiro de 2011

Definindo a quantidade de conexões simultâneas no Postgres

O objetivo deste artigo é ajudar a definir o número de conexões concorrentes ao SGBD, ou seja, ajustar a quantidade para a real demanda do ambiente. A necessidade de tal definição surgiu devido as inúmeras reclamações de lentidão em uma de nossas aplicações que roda em Postgres. Tínhamos que descobrir a causa e rapidamente implementar uma solução. Analisando a quantidade de processos detectamos que o problema se relacionava a quantidade de conexões concorrentes com banco, sendo assim, de pronto ajustamos a diretiva "max_connections" no arquivo "postgresql.conf" e reiniciamos o serviço. Claro que nesse primeiro ajuste realizado, aumentamos o número de conexões sem nenhum embasamento ou estudo de carga do ambiente. Como dissemos no início desse artigo, o objetivo é ajudar a levantar a real necessidade, ou seja, descobrir qual é o pico de conexões concorrentes.

Então, para detectarmos a quantidade de acessos simultâneos no momento o comando é:

# psql -U postgres -t -c "select count(*) from pg_stat_activity;

O comando acima apenas fornece a quantidade conexões naquele instante, porém para levantarmos dados de um período criamos o script a seguir onde o mesmo é parametrizado para receber o número de segundos em que a consulta será repetida.

#!/bin/bash
if [ $# -eq 1 ]; then
   while true
   do
      echo $(psql -U postgres -t -c "select count(*) from pg_stat_activity;")
      sleep $1s
   done
else
   echo
   echo Uso: $0 [num de segundos]
   echo
fi

Para podermos analisar com maior exatidão qual era o número máximo de conexões, ou seja, o pico de acessos, realizamos o levantamento das informações pelo período de 1(uma) semana usando o comando a seguir:

# ./userOn.sh 1 | tee /tmp/conexoesBanco.txt

Com o comando acima foi possível ver a quantidade de conexões simultâneas a cada segundo impresso na console do servidor e ao mesmo tempo tudo que era visualizado era salvo no arquivo "/tmp/conexoesBanco.txt" para posterior análise, que através da execução do comando a seguir foi possível visualizar qual era o número máximo de conexões concorrentes no Postgres no período analisado.

# cat /tmp/conexoesBanco.txt | sort -n | uniq

Após o levantamento e estudos do ambiente, ajustarmos a diretiva de conexões do Postgres, com um incremento em 20% no número encontrado pois sempre é possível ter alguma demanda repentina.

Qualquer crítica, sugestão ou dúvida mande uma mensagem.

Atenciosamente,
Joaquim Ferraz

sábado, 30 de outubro de 2010

Carregando o mapa correto do teclado na console do Linux

Hoje mostrarei como carregar o mapa correto de seu teclado no modo console do Linux.

No Brasil existem comumente em uso 3 tipos de "layout" de teclado que são o ABNT, ABNT2 e O Inglês Internacional, abaixo segue resumidamente a diferenciação entre eles.

ABNT - Possui a tecla "ç" e não possui a tecla "Alt Gr".
ABNT2 - Possui a tecla "ç" e possui também a tecla "Alt Gr".
Inglês Internacional - Não possui a tecla "ç", onde é necessário usar o acento e depois o "c" para gerar o "ç".

Todos esses teclados são do padrão "qwerty", esse nome vem do conjunto das 6 primeiras letras do teclado.

Configurando na Console

Carregando um dos mapas a seguir:
# loadkeys br-abnt
# loadkeys br-abnt2
# loadkeys us-acentos

Localização dos arquivos de mapas

No Debian

/usr/share/keymaps/

No CentOs

/lib/kbd/keymaps/

Qualquer crítica, sugestão ou dúvida mande uma mensagem.
 
Atenciosamente,
 
Joaquim Ferraz

segunda-feira, 20 de setembro de 2010

Instalando a JRE da SUN no Ubuntu

Pessoal hoje a dica é como instalar a JRE da SUN em seu Ubuntu. Devido a questões de licenciamento a JRE da SUN não vem instalado por padrão, sendo assim a que vem é a OpenJDK.

Bom ela funciona porém percebi que em algumas aplicações java rodando no Firefox estava ocasionando problemas de travamento no navegador, resolvi o problema instalando a JRE da SUN.

O Ubuntu por padrão não deixa ativado o repositório de terceiros no "/etc/apt/sources.list", para ativarmos iremos utilizar a aplicação "Software Sources" que você encontra no menu "Sistema -> Administração".

Após aberto a aplicação vá na aba "Outros Softwares" e ative o repositório "partner", após a ativação execute os comandos abaixo numa console:

# sudo apt-get update
# sudo apt-get install sun-java6-bin sun-java6-jre sun-java6-plugin

Para certificar que o seu Firefox está reconhecendo o plugin java acesse o endereço "about:plugins".

Maiores informações sobre repositórios Ubuntu, visite o sítio.

Qualquer crítica, sugestão ou dúvida mande uma mensagem.

Atenciosamente,

Joaquim Ferraz

terça-feira, 14 de setembro de 2010

Recuperando a senha do root de seu mysql

Olá pessoal, hoje irei mostrar como recuperar ou melhor alterar a senha do usuário "root" de seu banco mysql. Abaixo segue um passo a passo e logo após explicações sobre os comandos.

I - Passo a passo

1 - # /etc/init.d/mysql stop
2 - # mysqld --skip-grant-tables &
3 - # mysql -u root
4 - mysql> use mysql;
5 - mysql> update user set password=PASSWORD("SENHA") where User='root';
6 - mysql> quit
7 - # /etc/init.d/mysql stop
8 - /etc/init.d/mysql start

II - Explicações

1 - Parando o servidor do mysql;
2 - Iniciando o servidor e pulandoo carregamento de permissões de acesso aos bancos;
3 - Logando no mysql com o usuário "root";
4 - Selecionando o banco "mysql";
5 - Alterando a senha do usuário "root";
6 - Sai da console do mysql;
7 - Para o servidor do mysql;
8 - Inicia o serviço

III - Testando

Para testar execute o comando:

# mysql -u root -p

Qualquer crítica, sugestão ou dúvida mande uma mensagem.

Atenciosamente,

Joaquim Ferraz

sábado, 7 de agosto de 2010

Migrando a base Openldap de BDB para HDB

1 - Introdução

Hoje irei mostrar um passo a passo de como realizar a conversão da base Openldap usando o bdb (Berkeley Database) para o HDB que também é uma base Berkeley porém usando uma estrutura hierárquica, sendo assim é possível renomear um "RDN" de um objeto. Então vamos ao passo a passo.

2 - Passo a passo

2.1 - No Debian
1   - Ajuste no /etc/ldap/slapd.conf os parâmetros relativos a "database" de bdb para hdb.
2   - # /etc/init.d/slapd stop
3   - # slapcat > /tmp/backup.ldif
4   - # cp -vap /var/lib/ldap/DB_CONFIG /tmp/DB_CONFIG
5   - # rm -frv /var/lib/ldap/*
6   - # /etc/init.d/slapd start
7   - # /etc/init.d/slapd stop
8   - # cp -vap /tmp/DB_CONFIG /var/lib/ldap/DB_CONFIG
9   - # slapadd -v -l /tmp/backup.ldif
10 - # slapindex -v
11 - # chown -Rv openldap:openldap /var/lib/ldap/*
12 - # /etc/init.d/slapd start

2.2 - No CentOS
1   - Ajuste no /etc/ldap/slapd.conf os parâmetros relativos a "database" de bdb para hdb.
2   - # /etc/init.d/ldap stop
3   - # slapcat > /tmp/backup.ldif
4   - # cp -vap /var/lib/ldap/DB_CONFIG /tmp/DB_CONFIG
5   - # rm -frv /var/lib/ldap/*
6   - # /etc/init.d/ldap start
7   - # /etc/init.d/ldap stop
8   - # cp -vap /tmp/DB_CONFIG /var/lib/ldap/DB_CONFIG
9   - # slapadd -v -l /tmp/backup.ldif
10 - # slapindex -v
11 - # chown -Rv ldap:ldap /var/lib/ldap/*
12 - # /etc/init.d/ldap start

3 - Explicação do passo a passo

1 - Ajustar variáveis como:

De:
moduleload    back_bdb
backend        bdb
database       bdb

Para:
moduleload    back_hdb
backend         hdb
database        hdb

2 - Parando o serviço para que não exista mais nenhuma alteração antes da exportação dos dados.

3 - Exportando os dados das bases para o formato LDIF.

4 - Realizando o backup do DB_CONFIG do Openldap que é os parâmetros do banco de dados Berkeley, caso seu slapd.conf possua as configuração do Berkeley nele esse passo não é necessário pois ao iniciar o Openldap esse arquivo será criado.

5 - Removendo a base antiga do Openldap.

6 - Iniciando o serviço para criar as bases com o formato HDB.

7 - Parando o serviço para poder restaurar os dados.

8 - Copiando o DB_CONFIG, caso o seu slapd.conf possua as configuração do Berkeley nele esse passo não é necessário pois ao iniciar o Openldap esse arquivo será criado.

10 - Criando os indexes.

11 - Dando permissão na base para que o Openldap possa manipular.

12 - Iniciando o serviço.

Qualquer crítica, sugestão ou dúvida mande uma mensagem.

Atenciosamente,

Joaquim Ferraz

domingo, 1 de agosto de 2010

Problema ao renomear um objeto no Openldap

Hoje irei falar sobre a dificuldade que tive em renomear o "RDN" de um objeto no serviço de diretório do "Openldap".

Eu tinha feito um "script" em "php" e testado com sucesso em uma de minhas máquinas virtuais, após o teste executei o "script" no servidor de produção e para minha surpresa não funcionou.

No "script" estava usando a função "ldap_rename" para renomear o "RDN" de um objeto. Para capturar o erro usei a função "ldap_error" após a execução do "ldap_rename" o que me fez exibir o aviso a seguir.

Warning: ldap_error(): supplied argument is not a valid ldap link resource

Como não conseguia renomear a OU via "php" resolvi usar o "ldapmodrdn" ferramenta do pacote "Openldap" que serve para renomear o "RDN" dos objetos numa base LDAP, após a tentativa também não consegui renomear o objeto e o comando me retornou a saída abaixo:

Rename Result: Operation not allowed on non-leaf(66)
Additional info: subtree rename not supported

Depois de quebrar bastante a cabeça descobri que o motivo de não está conseguindo renomear o objeto era por está usando como banco de dados o "BDB" no "Openldap". Diante disso tive que migrar minha base atual de "BDB" para "HDB" pois com ele é possível alterar o "RND" dos objetos.

No próximo "post" irei mostrar como realizar essa conversão, então até lá.

Maiores informações consulte a documentação oficial do Openldap.

Qualquer crítica, sugestão ou dúvida mande uma mensagem.

Atenciosamente,

Joaquim Ferraz

sexta-feira, 16 de julho de 2010

Resolvendo o erro - ethX: ERROR while gettting interface flags: No such device

Problema:
SIOCSIFADDR: No such device
ethX: ERROR while gettting interface flags: No such device
ethX: ERROR while gettting interface flags: No such device
Bind socket to interface: No such device
Failed to bring up ethX.

Existem diversas formas de resolver esse problema. Irei mostrar a mais simples de todas que é remover o arquivo "70-persistent-net.rules" e reiniciar o sistema.

Solução:
# rm /etc/udev/rules.d/70-persistent-net.rules
# reboot

Esse problema normalmente ocorre devido ao MAC ou módulo da placa de rede não está corretamente especificado no arquivo "70-persistent-net.rules".

Esse erro acontece muito comigo quando copio uma máquina virtual de um computador para outro pois normalmente o MAC e a placa de rede são distintos.

Essa dica é para a distribuição Debian mas acredito que funcione em outras distribuições com os devidos ajustes caso necessário.

Qualquer crítica, sugestão ou dúvida mande uma mensagem.

Atenciosamente,

Joaquim Ferraz