Archive

Archive for the ‘Uncategorized’ Category

Telemetria para nerd

July 25, 2014 1 comment

 

Ola pessoal, venho aqui novamente postar algo que eu considero relativamente importante, iremos aprender como criar ou plotar graficos. O título talvez nao tenha nada haver apesar que eu discordo. O software que iremos estudar é o rrdtool. RRDtool é um banco de dados Round Robin. A tecnologia Round robin funciona com uma quantidade pre-determinada de dados, e um ponteiro para a posicao atual. Imagine um anel ou circulo com posições, onde cada posicao no circulo armazena dados. Quando os dados são lidos posição por posicao os dados podem ser armazandos ou lidos. Depois de um tempo, todas as posiçoes disponíveis serão reutilizados e o processo continua. RRDtool utiliza arquivos rrd. RRDtool foi desenvolvido por Tobias Oetiker. Para o nosso exemplo vamos imaginar o circuito de Monaco, e vamos coletar os km percorridos.

monaco3

Como a formula 1 pra mim ultimamente anda sem emoção e sem graça, vamos ser praticos, digamos que a mclaren percorre o circuito e coletamos os seguintes dados a cada passagem pela linha de chegada:

 

Horário Timestamp Distancia(m)
 11:47  1406303220  4000
 11:51  1406303460  7400
 11:56  1406303760  11200
 12:02  1406304120  15230
 12:07  1406304420  18000
12:12  1406304720  21400
12:17  1406305020  25400
12:22  1406305320  28600
12:27  1406305620  32100
12:32  1406305920  35700
12:37  1406306220  39000
12:42  1406306520  43150
12:47  1406306820  47001
12:52  1406307120  50600
12:57 1406307420  54000

Após a coleta vamos criar nosso arquivo rrd. Criamos com o comando rrdtool,iremos criar um arquivo rrd chamdo monaco.rrd, que inicia no dia 2014/07/25 as 11:47:00 no qual e utilizado timestmap ou epoch unix se voce nao sabe do que eu estou falando leia meu post sobre epoch. Para nosso arquivo rrd iremos criar um datasource ou DS de nome dados e tipo COUNTER o qual é um contador, o qual é lido a cada 5 minutos que é o padrão, na mesma base de dados criamos 1 conjunto de dados RRA. A “amostra” RRA ira conter a média(AVERAGE) e contém 24 amostras( 24 vezes amostras de 5 minutos totalizando 2 horas). Segue comando

rrdtool create monaco.rrd –start 1406303220 DS:dados:COUNTER:600:U:U RRA:AVERAGE:0.5:1:24

Fico muito confuso né, vamos tentar melhorar isso digamos que mude e deixar a parte RRA assim

RRA:AVERAGE:0.5:6:10

O restante do comando definiremos abaixo

  • –start: define o inicio do arquivo rrd quando ele começa
    DS: datasource existe alguns tipo nao vou mencionar isso e um inicio fico para vc olhar no site RRDTool, mas alguns deles que posso citar são COUNTER, ABSOLUTE, etc.
  • O DS tem um formato:
  • DS:nomedoDS:heartbeat:Min:Max
  • NomedoDS: nome quaisquer para o DS
  • Heartbeat: Se em 300 segundos conforme nosso exemplo e o comportamento default, e esperar 300 segundos(5 minutos), para receber uma coleta, caso contrario nao receba nenhum dado ele ira esperar mais heartbeat segundos.
  • Min: Valor minimo da coleta
  • Max: Valor maximo da coleta

Isso diz para armazenar 6 coletas de 5 minutos(que é o período de coleta), tipo depois de 6 coletas vc guarda uma como a média, e guarde 10 valores de média. Acho que agora ficou bom né 🙂

Bom vamos agora colocar dados no nosso banco de dados RRD, novamente com o comando rrdtool

rrdtool update monaco.rrd 1406303220:4000 1406303460:7400 1406303760:11200
rrdtool update monaco.rrd 1406304120:15230 1406304420:18000 1406304720:21400
rrdtool update monaco.rrd 1406305020:25400 1406305320:28600 1406305620:32100
rrdtool update monaco.rrd 1406305920:35700 1406306220:39000 1406306520:43150
rrdtool update monaco.rrd 1406306820:47001 1406307120:50600 1406307420:54000

Vamos visualizar o que foi inserido com o comando “rrdtool fetch”.

 

[ricardobarbosa@shark ~]$ rrdtool fetch monaco.rrd AVERAGE –start 1406303400 –end 1406307900
dados

1406303700: -nan
1406304000: -nan
1406304300: 9.2333333333e+00
1406304600: 1.0493333333e+01
1406304900: 1.2533333333e+01
1406305200: 1.1733333333e+01
1406305500: 1.1266666667e+01
1406305800: 1.1866666667e+01
1406306100: 1.1400000000e+01
1406306400: 1.2700000000e+01
1406306700: 1.3235333333e+01
1406307000: 1.2332666667e+01
1406307300: 1.1598666667e+01
1406307600: -nan
1406307900: -nan
1406308200: -nan
[ricardobarbosa@shark ~]$

O que são esses dados? vamos pegar o primeiro caso para entender. Vamos fazer o delta ou calculo de uma velocidade média

 11:47  1406303220  4000
 11:51  1406303460  7400

Tempo

1406303220-1406303460=240

Distância

7400-4000=3400

Velocidade média = 3400/240 aproximamente 10 por ele faz a média entre os 300 segundos ele normaliza os dados, um detalhe, quando crio o arquivo por default ele usa o intervalo de captura como 300 segundos o que acontece se nesses 300 segundos não for detectado nenhum dado? ele espera mais 300 segundos devido a configuração de heartbeat(DS:dados:COUNTER:600:U:U)

Agora vamos gerar o gráfico.

rrdtool graph monaco.png –start 1406303400  –end 1406307900 DEF:dadosgraph=monaco.rrd:dados:AVERAGE LINE2:dadosgraph#FF0000

 

Temos várias opções de grafico como LINE2, GAUGE, etc assim como DST e tipos de DS

Veja o gráfico

monaco

 

O rrdtool e muito extenso cheio de detalhes que seria dificil falar tudo aqui, caso tenha dúvidas de uma olhada no site rrdtool ou comments 😀

Advertisements
Categories: Uncategorized

Desativar IPV6

Ola um post rápido e que não acho interessante mas já tive que fazer isso por necessidade. Desativar o IPv6. Para desativar o suorte IPv6 no Ubuntu e na maioria das distros, edite o aqruivo /etc/sysctl.conf.

net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1

Estas linha adicionadas desativarão o suporte IPv6 em loopback, no padrão por todas as interfaces eth disponíveis. Um reinicio das interfaces redes é necessária:

/etc/init.d/networking restart

Ele modifica na realidade os seguintes arquivos modificando o conteúdo de 0 à 1 :

/proc/sys/net/ipv6/conf/lo/disable_ipv6
/proc/sys/net/ipv6/conf/all/disable_ipv6

/proc/sys/net/ipv6/conf/default/disable_ipv6

Comandos :

echo ‘1’ > /proc/sys/net/ipv6/conf/lo/disable_ipv6
echo ‘1’ > /proc/sys/net/ipv6/conf/all/disable_ipv6
echo ‘1’ > /proc/sys/net/ipv6/conf/default/disable_ipv6

Att.

Categories: Uncategorized

Medindo o tempo de cada volta :P

June 10, 2014 1 comment

Nesse post e mais uma referência e um pre-requisito para um futuro post sobre RRDTool, Estou criando um sistema de monitoramento para plataforma GEPON(um outro post explico o que é GEPON), e estou fazendo uso do RRDTool, e aprender como o tempo flui num sistema Linux/Unix e primordial. Algumas documentações descrevem que o tempo no UNIX e um contador que iniciou no primeiro minuto do dia 01 de janeiro de 1970, de lá pra cá esse contador somente vem aumentando. Como podemos ver esse contador ? Bom existe várias formas, várias linguagem de programação nos dão essa informação mas para começar vamos pro bash. Para visualizar o epoch(é o nome dado a esse sistema de contagem de tempo no Unix, algumas literaturas utilizam o nome timestamp para representar) pode ser visualizado com o comando “date”.

root@shark ~# date +%s
1402330971
root@shark ~# date +%s
1402330972
root@shark ~# date +%s
1402330973
root@shark ~# date +%s
1402330974
root@shark ~# date +%s
1402330975
root@shark ~# date +%s
1402330977
root@shark ~#

 

É possivel obter o epoch de determinado período:

root@apolo:~# date -d “2014/07/25 12:57” “+%s”
1406307420
root@apolo:~#

Repare que o valor final começou em 971 e foi incrementando até 977 e isso pro resto da vida ate completar todas os 32 bits que é um numero inteiro utilizado para representar o epoch. Existe uma expectativa para o epoch durar até 2038. Mas até lá talvez teremos um novo bug do milênio :P.
Existe um site que permite você converter facilmente entre um formato para humanos lerem e outras para as máquinas, http://www.epochconverter.com/ no site também ele possue como obter o valor em algumas
linguagens de programação, vou colocar aqui para referência:

Para obter o epoch em algumas linguagem:

PHP time()
Python import time first, then time.time()
Ruby Time.now (or Time.new). To display the epoch: Time.now.to_i
Perl time more …
Java long epoch = System.currentTimeMillis()/1000;
C# var epoch = (DateTime.UtcNow – new DateTime(1970, 1, 1)).TotalSeconds;
Objective-C [[NSDate date] timeIntervalSince1970]; (returns double) or NSString *currentTimestamp = [NSString stringWithFormat:@”%f”, [[NSDate date] timeIntervalSince1970]];
C++11 double now = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count();
VBScript/ASP DateDiff(“s”, “01/01/1970 00:00:00”, Now())
AutoIT _DateDiff(‘s’, “1970/01/01 00:00:00”, _NowCalc())
Delphi Epoch := DateTimetoUnix(Now); Tested in Delphi 2010.
R as.numeric(Sys.time())
Erlang calendar:datetime_to_gregorian_seconds(calendar:universal_time())-719528*24*3600.
MySQL SELECT unix_timestamp(now()) more …
PostgreSQL SELECT extract(epoch FROM now());
SQLite SELECT strftime(‘%s’, ‘now’);
Oracle PL/SQL SELECT (SYSDATE – TO_DATE(’01/01/1970 00:00:00′, ‘MM-DD-YYYY HH24:MI:SS’)) *
24 * 60 * 60 FROM DUAL
SQL Server SELECT DATEDIFF(s, ‘1970-01-01 00:00:00’, GETUTCDATE())
JavaScript Math.round(new Date().getTime()/1000.0) getTime() returns time in milliseconds.
Visual FoxPro DATETIME() – {^1970/01/01 00:00:00} Warning: time zones not handled correctly
Adobe ColdFusion
Tcl/Tk clock seconds
Unix/Linux Shell date +%s
PowerShell get-date (get-date).touniversaltime() -uformat “%s”
Other OS’s Command line: perl -e “print time” (If Perl is installed on your system)

Existe também no site a opção para conversão de um formato para outro em python

>>> import time
>>> int(time.mktime(time.strptime(‘2000-01-01 12:34:00’, ‘%Y-%m-%d %H:%M:%S’)))
946740840
>>> time.strftime(“%a, %d %b %Y %H:%M:%S +0000”, time.localtime(946740840))
‘Sat, 01 Jan 2000 12:34:00 +0000’
>>>

Primeiro convertemos o formato humando para epochs e depois de epoch para formato humando 😀
Vou deixar aqui também para referencia as conversões

Converter a partir do formato humano para epoch:

PHP strtotime(“15 November 2012”) (converts most English date texts) or:
date_create(’01/15/2010′)->format(‘U’) (PHP5 DateTime class)
Python import time first, then int(time.mktime(time.strptime(‘2000-01-01 12:34:00’, ‘%Y-%m-%d %H:%M:%S’))) – time.timezone
Ruby Time.local(year, month, day, hour, minute, second, usec ) (or Time.gm for GMT/UTC input). To display add .to_i
Perl Use the Perl Epoch routines
Java long epoch = new java.text.SimpleDateFormat(“MM/dd/yyyy HH:mm:ss”).parse(“01/01/1970 01:00:00”).getTime() / 1000;
VBScript/ASP DateDiff(“s”, “01/01/1970 00:00:00”, time field) More info
AutoIT _DateDiff(‘s’, “1970/01/01 00:00:00”, “YYYY/MM/DD HH:MM:SS”)
Delphi Epoch := DateTimeToUnix(StrToDateTime(myString));
C Use the C Epoch Converter routines
R as.numeric(as.POSIXct(“MM/dd/yyyy HH:mm:ss”, origin=”1970-01-01″))
MySQL SELECT unix_timestamp(time) Time format: YYYY-MM-DD HH:MM:SS or YYMMDD or YYYYMMDD
More on using Epoch timestamps with MySQL
PostgreSQL SELECT extract(epoch FROM date(‘2000-01-01 12:34’));
With timestamp: SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE ‘2001-02-16 20:38:40-08’);
With interval: SELECT EXTRACT(EPOCH FROM INTERVAL ‘5 days 3 hours’);
SQLite SELECT strftime(‘%s’,timestring);
SQL Server SELECT DATEDIFF(s, ‘1970-01-01 00:00:00’, time field)
JavaScript Use the JavaScript Date object
Unix/Linux Shell date +%s -d”Jan 1, 1980 00:00:01″ Replace ‘-d’ with ‘-ud’ to input in GMT/UTC time.

Converter a partir da epoch para formato humano:

PHP date(output format, epoch); Output format example: ‘r’ = RFC 2822 date
Python import time first, then time.strftime(“%a, %d %b %Y %H:%M:%S +0000”, time.localtime(epoch)) Replace time.localtime with time.gmtime for GMT time.
Ruby Time.at(epoch)
Java String date = new java.text.SimpleDateFormat(“MM/dd/yyyy HH:mm:ss”).format(new java.util.Date (epoch*1000));
VBScript/ASP DateAdd(“s”, epoch, “01/01/1970 00:00:00”)
AutoIT _DateAdd(“s”, $EpochSeconds , “1970/01/01 00:00:00”)
Delphi myString := DateTimeToStr(UnixToDateTime(Epoch)); Where Epoch is a signed integer.
C Use the C Epoch Converter routines
Objective-C NSDate * myDate = [NSDate dateWithTimeIntervalSince1970:epoch]; NSLog(@”%@”, date);
R as.POSIXct(epoch, origin=”1970-01-01″, tz=”GMT”)
MySQL FROM_UNIXTIME(epoch, optional output format) Default output format is YYY-MM-DD HH:MM:SS. If you need support for negative timestamps: DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0), interval -315619200 second),”%Y-%m-%d”) (replace -315619200 with epoch)
PostgreSQL PostgreSQL version 8.1 and higher: SELECT to_timestamp(epoch); More info Older versions: SELECT TIMESTAMP WITH TIME ZONE ‘epoch’ + epoch * INTERVAL ‘1 second’;
SQLite SELECT datetime(epoch_to_convert, ‘unixepoch’); or local timezone: SELECT datetime(epoch_to_convert, ‘unixepoch’, ‘localtime’);
Oracle PL/SQL SELECT to_date(’01-JAN-1970′,’dd-mon-yyyy’)+(1326357743/60/60/24) from dual
Replace 1326357743 with epoch.
SQL Server DATEADD(s, epoch, ‘1970-01-01 00:00:00’)
Microsoft Excel =(A1 / 86400) + 25569 Format the result cell for date/time, the result will be in GMT time (A1 is the cell with the epoch number). For other time zones: =((A1 +/- time zone adjustment) / 86400) + 25569.
Crystal Reports DateAdd(“s”, {EpochTimeStampField}-14400, #1/1/1970 00:00:00#) -14400 used for Eastern Standard Time.
JavaScript Use the JavaScript Date object
Tcl/Tk clock format 1325376000
Unix/Linux Shell date -d @1190000000 Replace 1190000000 with your epoch, needs recent version of ‘date’. Replace ‘-d’ with ‘-ud’ for GMT/UTC time.
PowerShell Function get-epochDate ($epochDate) { [timezone]::CurrentTimeZone.ToLocalTime(([datetime]’1/1/1970′).AddSeconds($epochDate)) }, then use: get-epochDate 1279152364. Works for Windows PowerShell v1 and v2
Other OS’s Command line: perl -e “print scalar(localtime(epoch))” (If Perl is installed) Replace ‘localtime’ with ‘gmtime’ for GMT/UTC time.

E para finalizar o post programadores e desenvolvedores quando vale 1 ano em segungos, 1 mês, etc

 

Formato humano Seconds
1 hora 3600 segundos
1 dia 86400 segundos
1 semana 604800 segundos
1 mês (30.44 dias) 2629743 segundos
1 ano (365.24 dias)  31556926 segundos

Att.

Categories: Uncategorized

Contruindo pontes com teclado e mouse :P

April 11, 2014 1 comment

Ola pessoal vocês já sabem, a mesma ladainha de sempre. Após longo período sem postar aqui venho novamente depois de um LONGOO, mas bem LOONNGGOO tempo sem postar vamos a um micro, flash tutorial, how-to porque quebrei a cabeça e se não fosse um amigo “garga” do canal #freebsd-br, rede freenode não tinha colocado meu FreeBSD em bridge para funcionar. Obrigado “garga”.

Primeiramente vamos a topologia bem rápido e sem delongas. Segue abaixo.

bridge_freebsd

Iremos colocar um freeBSD para funcionar em bridge por enquanto esse server não tem uma finalidade especifica mas posteriormente ele sera um servidor proxy com tproxy, seja lá como vou fazer isso 🙂

 

Para montar a bridge são utilizados alguns comandos bem simples. Rápido e fácil

Criando a ponte

# ifconfig bridge0 create

Definindo as interfaces membros da ponte

# ifconfig bridge0 addm lr0 addm lr1

Visualizando

root@proxy:/root # ifconfig bridge0
bridge0: flags=8843 metric 0 mtu 1500
ether 02:41:a8:eb:20:00
nd6 options=29
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
member: rl0 flags=143
ifmaxaddr 0 port 3 priority 128 path cost 200000
member: rl1 flags=143
ifmaxaddr 0 port 4 priority 128 path cost 200000
root@proxy:/root #

Para remover as interfaces membros

# ifconfig bridge0 deletem lr0 deletem lr1

Vamos configurar para toda inicialização do FreeBSD ele já montar minha ponte. Para quem não sabe toda a configuração de inicializacção e feita no arquivo rc.conf. Uma observação somente vou colocar a parte que diz respeito a bridge.

ifconfig_rl0=”up”
ifconfig_rl1=”up”
cloned_interfaces=”bridge0″
ifconfig_bridge0=”addm rl1 addm rl0 up”

Uma configuração de brinde a configuração de um endereço IP na interface bridge aqui tem um pulo do gato, que graças ao Garga funcionou. Inicialmente tentei a configuração assim:

ifconfig_rl0=”up”
ifconfig_rl1=”up”
cloned_interfaces=”bridge0″
ifconfig_bridge0=”addm rl1 addm rl0 up”
ifconfig_bridge0=”inet 192.168.1.11 netmask 255.255.255.0 up”
defaultrouter=”192.168.1.1″

Mas não funciona, como o rc.conf é um script a variavel “ifconfig_bridge0” era sobrescrita porque ele esta descriminada duas vezes então o pulo do gato esta aqui. Preciso criar um alias

ifconfig_rl0=”up”
ifconfig_rl1=”up”
cloned_interfaces=”bridge0″
ifconfig_bridge0=”addm rl1 addm rl0 up”
ifconfig_bridge0_alias0=”inet 192.168.1.11 netmask 255.255.255.0 up”
defaultrouter=”192.168.1.1″

Assim rolou, abaixo coloquei o bate-papo com o “garga” 🙂

 

<garga> ricardobarbosams: ahhhh cara lembrei
<garga> pqp
<garga> ja passei por isso
<garga> maldita bridge
<garga> como o ifconfig nao aceita tudo ao mesmo tempo agora
<garga> vc tem que fazer um cambalacho
<garga> nao sei se isso é o certo
<garga> mas sei que funciona
<garga> faz assim
<garga> ifconfig_bridge0=”addm rl0 addm rl1″
<garga> ifconfig_bridge0_alias0=”inet 192.168.11.1 netmask 255.255.255.0″
<garga> 🙂
<porks> aeouahe
<porks> ORA PORRA. QUE QUE ? ISTO PORRRAAAAAAAAAAAAAA ?!?!?!?!
<garga> no fim das contas o ifconfig vai fazer o que eh pra fazer
<porks> tem que dividir a pica
<porks> senao ele nao aguenta
<garga> eu sei la se isso eh o jeito correto de fazer,mas ja fiz e deu certo
<garga> LOL
<ricardobarbosams> hum
<ricardobarbosams> kkkk
<ricardobarbosams> dexa eu tentar
* Agent_Smith_BR has quit (Read error: No route to host)
<ricardobarbosams> garga, aeee
<ricardobarbosams> funfo
<ricardobarbosams> vou documentar isso
<ricardobarbosams> vlw garga
<ricardobarbosams> 🙂

Vlw pessoal, espero que se algum dia alguém precisar criar um bridge lembre desse pulo do gato.

Categories: Uncategorized

Na velocidade da luz

November 13, 2013 1 comment

Bom, agora estou com mais tempo venho postar assuntos que eu considero interessante, um deles é para falar sobre internet de alta velocidade, ninguém como eu sabe o que é sofrer com uma conexão lenta(Diga eu e meu xbox), quem nunca esteve num jogo online e ser morto porque sua conexão não foi rapida o bastante ou travamento e lags( quem nunca jogou online, deveria experimentar e uma atividade desestressante :P). Enfim pretendo falar da tecnologia que faz uso da fibra óptica, tecnologia essa que nem eu conhecia, FTTX(Fiber-To-The-X) o x pode ser home, desktop, building, etc. E uma tecnologia que faz uso da fibra óptica acabando com o gargalo da última milha, ou seja, ao invês de termos cabos metálicos até sua residência por exemplo, teremos uma fibra óptica até sua casa. Confesso que não acreditei muito nessa tecnologia devido aos altos custos, mas creio que essa reviravolta esta se dando pela falta de recursos que a nossa infra-estrutura de rede atual nós dá, e os gargalos nos grandes backbones, alem do fato competitivo e evolução. Tudo tem que evoluir a evolução gera concorrência forçando as empresas atuais a evoluir. Quando fui chamado para trabalhar num provedor de fibra óptica, não acreditei, meu chefe falando que estava passando fibra em toda a cidade nos postes, etc. Eu pensei comigo esse cara e maluco, piro na batatinha 😛 mas eu vi que o negócio era sério. Descobri que existe uma luz no fim do tunel. 😛 Vou as poucos expondo a tecnologia, colocando as expectativas que ela traz e benefício e funcionamento. Com o crescimento exponencial da necessidade de velocidade cada vez maiores de internet, devido a quase tudo hoje estar conectado, celular, computador, tablets, etc. A demanda por conexões de alta velocidade traz uma nova tendência e a tecnologia FTTX/GEPON vem para atender essa demanda. O último relatório do akamai revelou que a média de internet no mundo fica entre 2M sendo a coreia do sul é o top do mundo, sendo que eles possuem uma rede toda FTTX.

http://www.akamai.com/stateoftheinternet/

speed_internet_world

O sistema com fibra óptica consiste de um equipamento que recebe os sinais opticos chamado OLT(Optical Line Terminator) na ponta ou na casa do assinante temos outro equipamento chamado ONU ou ONT(Optical Network Unit / Optical Network Terminator). Através de um dispositivo SPLITTER e possível dividir um fio de fibra em x clientes. O objetivo da rede FTTX e reduzir a quantidade de fibras, Um exemplo uma única porta da OLT pode atender 64 clientes com uma única fibra óptica capaz de atender até 2G de velocidade, e esta vindo no mercado OLT de 10G não homologado pelo Anatel(ainda). Sendo assim o futuro dos jogos online e promissor  🙂 .

A tecnologia FTTX também recebe o nome de PON ( Passive Optical Network ) uma rede multiponto usando fibra óptica. Existem tipos de PON(Segundo a maioria das documentações).

  • EPON
  • GPON
  • GEPON

EPON

É um padrão IEEE(802.3ah) que usa Ethernet para o envio de pacotes de dados.Transporta os dados encapsulados em quadros ethernet. velocidades de até 1G/s.

GPON

GPON (Gigabit PON) é a evolução da banda larga EPON padrão. Consegue taxas de 1G/s full duplex, Alcance de 20Km, multiplexação ate 64 usuários.

GEPON

GEPON (Gigabit Ethernet PON) é um padrão IEEE que usa Ethernet para o envio de pacotes de dados, o GEPON e equivalente ao EPON uma evolução assim como ethernet e fastethernet, gigabitethernet. GEPON usa 2,5 G/s taxas de upstream e downstream.

Diferenças entre GEPON and GPON:

A principal diferença que faz o GEPON ser a melhor escolha, é a velocidade de simetria. A velocidade GPON é em torno de 1.25 Gbps de upload e 2.25 Gbps de download, já o padrão GEPON opera com taxa de 2.5 Gbps simétricos.

             GPON é baseado na tecnologia ATM, GPON utiliza tecnologia Ethernet e GEPON suporta ATM, Ethernet and WDM.

GEPON ainda está evoluindo, é amplamente utilizado na Ásia e usa Ethernet como meio, o qual simplifica tempo e reduz os custos, A complexidade e o custo são mais baixo é inferior a GPON. GEPON tem uma vantagem de custo de instalação (acho que por isso a tecnologia DOCSIS, utilizada por operadoras como a NET não se adotam em larga escala, o custo é um fator impactante, e o FTTX e custo é menor, sendo por isso a adoção nos países da ásia e europa).

            GEPON Suporta Class of Service (CoS) para transferencia de video e voz.

Quando comparado ao GPON, o GEPON e altamente escalavel e flexivel, existe relato de serviços operando com GEPON com mais de 2.300 clientes.

tabela_xponssite telecom.com.br

VANTAGENS DO GEPON:

  • Atenuação baixa;
  • Altas taxas de transmissão;
  • Imunidade contra interferência eletromagnética;
  • Acoplamento óptico, eliminando a necessidade de aterramento entre o transmissor e receptor;
  • Bom nível de segurança e privacidade da informação transmitida;
  • Boa relação custo por unidade de informação transmitida.

Topologia de uma rede FTTX. Um detalhe a OLT é uma placa que acoplaca ao chassis.

rede_fttx

Att.

Categories: Uncategorized

VMWare arrumando o guarda roupa

Ola como ultimamente estou com um pouco de tempo vou colocar aqui as tecnologias que sempre preciso relembrar 🙂

Nesse post vamos verficiar como o vmware faz o armazendo dos seus dados, os tipos de discos. Aprendi muito graças ao post do blog do Igor Seiji(Valeu Seiji) http://igorseiji.info/2012/02/15/qual-tipo-de-disco-escolher-para-criar-uma-maquina-virtual-no-vmware-vsphere-5/

Bom eu sou bem direto, vamos ao que interessa, o vmware trabalha com 2 tipos de discos(não diria bem tipos :P):

  • Thin – Aloca espaço do disco somente o que precisa, se criarmos um disco virtual de 200G para uma maquina virtual onde vou instalar um linux e a instalação do linux ocupar 10G, meu disco virtual irá ocupar somente 10G no meu HD ou storage.
  • Thick – Aloca tudo mesmo não precisando, ou seja se criar um disco virtual de 200G para uma máquina virtual o tamanho no HD ou storage do disco virtual será de 200G, mesmo a instalação utilizando apenas 10G.

O tipo Thick ainda possue 2 tipos subtipos:

  • Thich Lazy Zeroed – É o modo padrão utilizado pelo vmware, ele ocupa somente o espaço utilizado. Vamos a um exemplo: Se criarmos um disco virtual de 200G para uma maquina virtual qualquer, e a instalação ocupar 10G, temos disponivel para o sistema operacional da máquina virtual ainda 190G, conforme for sendo utilizado os 190G ele vai fazendo o zeroing(Ato de escrever o disco virtual com zeros para garantir que não dados escritos no disco).
  • Thick Eager Zeroed – Este metodo e parecido com o lazy zeroed com a diferença que ele faz o zeroing na criação na máquina virtual, isso consequentemente deixa a criação da máquina virtual mais demorada, em contrapartida terei mais performance, visto que não terei que fazer o zeroing na escrita de dados.

Att.

Categories: Uncategorized

Linux sempre disponivel para atende-lo, senhor :)

December 6, 2012 1 comment

O título do post tenta ser bem objetivo, iremos configurar alta disponibilidade em um ambiente Linux, utilizando duas máquinas com iguais configurações em que se uma cair a outra assume, no caso o serviço que iremos deixar disponivel será o firewall netfilter/iptables e squid. Usaremos sincronização das configurações utilizando o DRBD. O nosso ambiente será como abaixo já com os respectivos endereços IP’s. Uma observação na interface eth0 o qual foi designada para ser a interface externa não teremos IP, somente o endereço ip virtual na interface alias eth1:0, o heartbeat será na interface interna, no nosso exemplo a interface eth0, com o endereço ip virtual na interface eth0:0.

heartbeat

Para construir nosso ambiente precisamos do DRBD e Heartbeat, o DRBD é uma tecnologia para o sincronismo das configurações e o heartbeat para fazer a checagem do master e slave e ativar os serviços no slave quando o master ficar indisponível. O primeiro passo e instalar o heartbeat, não vou explicar aqui como faz isso, porque existe várias maneiras de se fazer isso. Eu por exemplo utilizei o ubuntu e ele ja tem o pacote no repositorios de pacotes, no CentOS, fedora também tem o pacote no repositorio, ou ainda se preferir você tem a opção de compilar a partir do código fonte. Fica a gosto do frequês.

O diretório de trabalho do heartbeat fica em /etc/ha.d, existe 3 arquivos que precisaremos configurar, são eles:

  • haresources: define quais recursos estarão em alta disponibilidade, tais como o nosso squid e iptables, além de montagem de partições sincronizadas com drbd, etc.
  • authkeys: arquivo contendo a autenticação dos nós do nosso cluster de alta disponibilidade
  • ha.cf: Configurações globais do heartbeat como tempo de dead, warning, arquivos de logs, etc.

Antes de prosseguirmos, precisamos definir quais os nomes dos nossos master e slave.

  • master: srvfw01
  • slave: srvfw02

Depois configurar a resolução de nomes no arquivo /etc/hosts

192.168.0.1       srvfw01

192.168.0.2      srvfw02

Depois de instalado o heartbeat vamos configurar o a interface eth1 mesma interface da rede interna para o heartbeat segue abaixo arquivo de configuração.

ha.cf

#Arquivo de debug
debugfile /var/log/ha-debug
# Arquivo de log
logfile /var/log/ha-log
logfacility     local0
# frequência em segundos de checagem do master
keepalive 2
# Tempo mínimo em segundos para declarar o master morto ou inativo
deadtime 30
# quanto tempo o heartbeat deve esperar por bits atrasados
warntime 10
# tempo maximo para declarar o master morto ou inativo
initdead 120
# porta de comunicação para o heartbeat
udpport 694
# interface que será utilizada para comunicação do heartbeat utilizando endereço multicast
mcast eth0 239.0.0.43 694 1 0
# qual interface ou interfaces serão utilizadas para a comunicação do heartbeat
bcast eth0
# definindo se o servico deve voltar para o master caso ele volte a responder o heartbeat
auto_failback on
# nós ou hosts que irão compor o cluster
node srvfw01
node srvfw02

authkeys

auth 1
1 crc

Esse arquivo é o arquivo que faz a autenticação dos nós ou hosts que compõem o cluster. Existem outros métodos além do crc, tais como sha1, md5, o qual você pode-se utilizar uma senha.

Vou deixar para explicar o arquivo haresources depois que mexermos no drbd para o melhor entendimento.

A tecnologia DRBD trabalha com dispositivo em rede tipo uma partição de um disco, etc. Vejamos a figura abaixo retirado do site drbd mostra bem esse conceito.

Então a idéia e criar um dispositivo tal como o dispositivo /dev/drbd0 em comum entre os dois hosts que fazem parte do cluster de alta disponibilidade e associar ele a um disco fisico em cada host, tipo /dev/sdb como no nosso laboratorio que iremos fazer. Precisamos associar o dispositivo /dev/drbd0 com o /dev/sdb1 por exemplo, teremos que fazer isso em ambos os hosts.Obs: Precisamos ter uma partição EXCLUSIVA para isso.

Então para a instalação do drbd, proceda como na instalação do heartbeat, procure no repositorio de pacotes da tua distro ou compile 🙂

Depois de instalado o drbd normalmente já carrega o módulo do kernel drbd, mas se precisar utilize o comando modprobe(modprobe drbd). O arquivo de configuração do drbd é /etc/drbd.conf. Segue abaixo o arquivo que utilizei.
Não vou comentar todos os parametros do arquivo de configuração, por ser extenso e caso precise de algo mais especifico as páginas man são suas confidentes 🙂 Alguns paramêtros que o drbd utiliza para subir são obrigatorios, tais como:

  • global:
  • common:
  • resource:

Iremos configurar apenas o recurso ou resource:

drbd.conf

resource srvfw {
     protocol C;
     disk {
          on-io-error detach;
     }
     net {
          timeout 60;
          connect-int 10;
          ping-int 10;
     }
    syncer {
          rate 100M;
    }
    on srvfw01 {
          device /dev/drbd0;
          disk /dev/sdb1;
          address 192.168.0.1:7788;
          meta-disk internal;
    }
    on srvfw02 {
          device /dev/drbd0;
          disk /dev/sdb1;
          address 192.168.0.2:7788;
          meta-disk internal;
    }
}

 

Explicando alguns paramêtros mais importantes.

  • device: Dispositivo virtual o que será utilizado nos dois hosts.
  • disk: disco físico que será mapeado pelo dispositivo virtual.
  • address: Endereço IP e porta do host.
  • meta-disk: onde será colocado o meta-disk do drbd, meta-data são informações de replicação.

Não coloquei as configurações de global e common utilizei o padrão do ubuntu que veio auto-configurado no pacote.

include “drbd.d/global_common.conf”;

Vamos colocar o drbd para funcionar, primeiro vamos definir um diretório em comum em ambos hosts, escolhi o diretório /srvfw

host srvfw01 e srvfw02

mkdir /srvfw

Particione o disco /dev/sdb para /dev/sdb1.

zerar a partição com o comando:

dd if=/dev/zero of=/dev/sdb1 bs=1M count=128

Depois iremos criar o dispositivo drbd

drbdadm create-md recurso

ou seja, para nosso exemplo rodar o comando nos dois hosts

drbdadm create-md srvfw

Atachar o disco nos dois hosts

drbdadm attach srvfw

sincronizar

drbdadm syncer srvfw

Iniciar a replicação apenas no master, ou srvfw01

drbdadm — –overwrite-data-of-peer primary srvfw

Reinicie o serviço drbd nos dois hosts

/etc/init.d/drbd restart

Verifique se a sincronização ocorreu

root@srvfw01:~# cat /proc/drbd
version: 8.3.11 (api:88/proto:86-96)
srcversion: 71955441799F513ACA6DA60
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r—–
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
root@srvfw01:~# 15:48:26

Definindo quem é primario e secundario

srvfw01

drbdadm primary all

srvfw02

drbdadm secondary all

Agora vamos formatar o dispositivo /dev/drbd0 com o sistema de arquivo de sua preferência. Primeiro execute no master como ele sendo o drbd primario, depois promova o master como secundario no drbd e formate o dispositivo /dev/drbd0 no slave.

mkfs.reiserfs /dev/drbd0

Depois de formatado o dispositivo nos dois hosts podemos monta-ló e testa-ló. Neste ponto reinicie o serviço drbd0. obs: Estou montando depois de formatar o dispositivo /dev/drbd0 nos dois hosts e estou no master(srvfw01)

mount -t reiserfs /dev/drbd0 /srvfw

Crie um arquivo para teste

touch /srvfw/arquivo.txt

Agora desmonte o /srvfw e promova o master(srvfw01) à secundario no drbd e o slave(srvfw02) à primario.

srvfw01

drbdadm secondary all

srvfw02

drbdadm primary all

Monte novamente o /dev/drbd0 mas agora no slave(srvfw02)

mount -t reiserfs /dev/drbd0 /srvfw

Liste o conteudo do ponto de montagem e veja que o arquivo criado “arquivo.txt” estará lá. Estamos com o drbd funcionando e replicando. A idéia aqui e colocar as configurações do iptables e squid dentro do diretório ou ponto de montagem /srvfw.

Editar o arquivo /etc/fstab para montagem automática.

/dev/drbd0 /srvfw reiserfs noauto 0 0

Agora vamos configurar o ultimo item o arquivo haresources.

haresources

srvfw01 IPaddr::192.168.0.10/24/eth0/192.168.0.255 drbddisk::srvfw Filesystem::/dev/drbd0::/srvfw::reiserfs
srvfw01 IPaddr::172.31.1.151/24/eth1/172.31.1.255 gateway::172.31.1.150 iptables squid

Vamos lá este útimo item e minucioso e cheio de detalhes e esses detalhes são essenciais para o entendimento. Para o start do serviço no slave ou no master é necessário existir um script que inicie o serviço em questão o heartbeat já vem com um conjunto default de script de inicialização de serviços que ficam em /etc/ha.d/resource.d. Cada script dentro deste diretório inicializa e interrompe serviços. Não temos script para inicialização do iptables e nem para o squid então vamos criar um shellscript simples para fazer isso. Vamos entendendo linha a linha.

  • srvfw01: Nome do host que é definido como master
  • IPaddr::192.168.0.10/24/eth0/192.168.0.255: Aqui ele vai chamar o script que inicializa um serviço. O script IPaddr vai configurar um endereço IP 192.168.1.10 com mascara de rede /24 na interface eth0 com endereço de broadcast 192.168.0.255.
  • drbddisk::srvfw: Este script vai iniciar o recurso drbd(aquele mesmo recurso configurado no /etc/drbd.conf) host em questão como primario do drbd
  • Filesystem::/dev/drbd0::/srvfw::reiserfs: Script para fazer a montagem do dispositivo /dev/drbd0 no ponto de montagem /srvfw utilizando sistema de arquivo reiserfs. Simples não

Repare que eu passo paramêtros para o script atráves da sintaxe “::”, ou seja, por exemplo o comando ou shellscript “Filesystem” se fosse executar na linha de comando seria o mesmo que

./Filesystem /dev/drdb0 /srvfw reiserfs start

Simples não. Um detalhe que se você procurar no diretório /etc/ha.d/resource.d você encontra-rá o script Filesystem la dentro.

Próxima linha, na linha acima configuramos o endereço IP virtual da interface LAN e montamos a partição drbd e agora iremos explicar a linha que inicializa o endereço ip virtual da interface WAN

  • srvfw01: Nome do host que é definido como master
  • IPaddr::172.31.1.151/24/eth1/172.31.1.255: Aqui ele vai chamar o script que inicializa um serviço. O script IPaddr vai configurar um endereço IP 172.31.1.151 com mascara de rede /24 na interface eth1 com endereço de broadcast 172.31.1.255.
  • gateway::172.31.1.150:  Script que configura o gateway default.
  • iptables: script que carrega as regras de firewall
  • squid: script que inicializa o squid

O script “iptables” e “squid”, foram criado pela minha pessoa os scripts que eu criei ficaram um pouco complexo. Então nesse post vou diminuir a complexidade deixado eles bem simples para ficar didático

script iptables

#!/bin/bash

IPT=$(which iptables)

usage() {
echo “Uso: $0 {start|stop}”
exit 1
}

case $1 in
start)
/srvfw/config/iptables/firewall
;;
stop)
$IPT -t filter -F
$IPT -t nat -F
$IPT -t mangle -F

$IPT -t filter -X
$IPT -t nat -X
$IPT -t mangle -X

$IPT -t filter -P INPUT ACCEPT
$IPT -t filter -P FORWARD ACCEPT
$IPT -t filter -P OUTPUT ACCEPT
;;
*)    usage
;;
esac

Este script inicializa ou interrompe um firewall a sintaxe para iniciar e interromper seguem abaixo respectivamente.

./iptables start
./iptables stop

No script do squid como estamos utilizando o ubuntu, sendo assim resolvi somente alterar a varíavel que indica o arquivo de configuração do script que inicia e interrompe o squid nativo no caso do ubuntu ele utiliza o sistema de inicialização upstart. Então somente alterar a variavel “CONFIG” no arquivo /etc/init/squid3.conf, para /srvfw/config/squid/squid.conf, depois podemos utilizar o script de inicialização nativo do ubuntu.

#!/bin/bash
#
#
case $1 in
start)
/etc/init.d/squid3 start
;;
stop)
/etc/init.d/squid3 stop
;;
*)    usage
;;
esac

Facil né. Bom depois e somente testar, simular quedas no master e ver o slave assumindo qualquer dúvida mailme.

Att.

Categories: Uncategorized