<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>the brain is a machine</title>
	
	<link>http://core.eti.br</link>
	<description>geekness, music power and opensource</description>
	<lastBuildDate>Fri, 10 Feb 2012 23:30:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/thebrainisamachine" /><feedburner:info uri="thebrainisamachine" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Anunciando o HoardD, ferramenta para envio de métricas para o Graphite</title>
		<link>http://feedproxy.google.com/~r/thebrainisamachine/~3/gSQHSQBStA4/</link>
		<comments>http://core.eti.br/2012/02/10/anunciando-o-hoardd-ferramenta-para-envio-de-metricas-para-o-graphite/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 23:30:56 +0000</pubDate>
		<dc:creator>coredump</dc:creator>
				<category><![CDATA[Linux e Open Source]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://core.eti.br/?p=660</guid>
		<description><![CDATA[HoardD é um projeto usando Node.js para enviar métricas de servidores para o Graphite. Você pode ler o anúncio no meu blog em inglês: http://coredump.io/blog/2012/02/10/announcing-hoardd/ intel! Nenhum post relacionado.


Nenhum post relacionado.]]></description>
			<content:encoded><![CDATA[<p>HoardD é um projeto usando Node.js para enviar métricas de servidores para o <a href="graphite.wikidot.com">Graphite</a>. Você pode ler o anúncio no meu blog em inglês: <a href="http://coredump.io/blog/2012/02/10/announcing-hoardd/">http://coredump.io/blog/2012/02/10/announcing-hoardd/</a></p>
<p>intel!</p>


<p>Nenhum post relacionado.</p><img src="http://feeds.feedburner.com/~r/thebrainisamachine/~4/gSQHSQBStA4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://core.eti.br/2012/02/10/anunciando-o-hoardd-ferramenta-para-envio-de-metricas-para-o-graphite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://core.eti.br/2012/02/10/anunciando-o-hoardd-ferramenta-para-envio-de-metricas-para-o-graphite/</feedburner:origLink></item>
		<item>
		<title>FLISOL-DF 2011: Escalabilidade e Alta Disponibilidade</title>
		<link>http://feedproxy.google.com/~r/thebrainisamachine/~3/rroXLaFfwQk/</link>
		<comments>http://core.eti.br/2011/04/13/flisol-df-2011-escalabilidade-e-alta-disponibilidade/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 21:27:10 +0000</pubDate>
		<dc:creator>coredump</dc:creator>
				<category><![CDATA[Linux e Open Source]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://core.eti.br/?p=657</guid>
		<description><![CDATA[Essa é a palestra sobre Escalabilidade e Disponibilidade que apresentei no FLISOL-DF 2011. Teve até um número de pessoas legal para o horário, agradecimentos à coordenação que conseguiu me encaixar com tamanha rapidez na grade! Eu vou ter de mexer em algumas coisas para diminuir tamanho e alguns assuntos, mas no mais, foi bem legal. [...]


Nenhum post relacionado.]]></description>
			<content:encoded><![CDATA[<p><a title="Link para a apresentação ODP da palestra" href="http://core.eti.br/palestras/escalabilidade/Palestra%20Escalabilidade.odp">Essa é a palestra</a> sobre Escalabilidade e Disponibilidade que apresentei no <a title="Site do Flisol-DF" href="http://flisoldf.blog.br/2011/">FLISOL-DF 2011</a>.</p>
<p>Teve até um número de pessoas legal para o horário, agradecimentos à coordenação que conseguiu me encaixar com tamanha rapidez na grade!</p>
<p>Eu vou ter de mexer em algumas coisas para diminuir tamanho e alguns assuntos, mas no mais, foi bem legal.</p>
<p>intel</p>


<p>Nenhum post relacionado.</p><img src="http://feeds.feedburner.com/~r/thebrainisamachine/~4/rroXLaFfwQk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://core.eti.br/2011/04/13/flisol-df-2011-escalabilidade-e-alta-disponibilidade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://core.eti.br/2011/04/13/flisol-df-2011-escalabilidade-e-alta-disponibilidade/</feedburner:origLink></item>
		<item>
		<title>Aprendendo a amar o histograma do varnish (varnishhist)</title>
		<link>http://feedproxy.google.com/~r/thebrainisamachine/~3/XfkB1QSu61M/</link>
		<comments>http://core.eti.br/2011/03/13/aprendendo-a-amar-o-histograma-do-varnish-varnishhist/#comments</comments>
		<pubDate>Sun, 13 Mar 2011 20:27:59 +0000</pubDate>
		<dc:creator>coredump</dc:creator>
				<category><![CDATA[Linux e Open Source]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[varnish]]></category>

		<guid isPermaLink="false">http://core.eti.br/?p=647</guid>
		<description><![CDATA[Post rápido sobre uma ferramenta com má fama O comando varnishhist mostra um histograma dos requests sendo servidos pelo cache, desde o momento do varnish pegar o request do kernel até entregar a resposta ao kernel novamente. É uma ferramenta interessante para ver como está a saúde de seu cache, mas meio chatinha de se [...]


Posts relacionados:<ol><li><a href='http://core.eti.br/2005/03/05/guia-sobre-o-exim/' rel='bookmark' title='Permanent Link: Guia sobre o Exim'>Guia sobre o Exim</a> <small>Coloquei hoje no ar o guia sobre o Exim. Está...</small></li>
<li><a href='http://core.eti.br/2010/12/23/cluster-corosyncpacemaker-para-balanceamento-web-nginx-varnish-ou-apache-or-how-to-replace-wackamole-with-heartbeat/' rel='bookmark' title='Permanent Link: Cluster corosync/pacemaker para balanceamento web (nginx, varnish ou apache) (or how to replace wackamole with heartbeat!)'>Cluster corosync/pacemaker para balanceamento web (nginx, varnish ou apache) (or how to replace wackamole with heartbeat!)</a> <small>Objetivo: Construir um cluster com N máquinas rodando nginx e varnish para...</small></li>
<li><a href='http://core.eti.br/2007/09/15/meus-projetos-parados/' rel='bookmark' title='Permanent Link: Meus Projetos Parados'>Meus Projetos Parados</a> <small>Costumo plagiar meu amigo Bruno lá de Divinópolis: &#8220;Eu tenho...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Post rápido sobre uma ferramenta com má fama <img src='http://core.eti.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://core.eti.br/wp-content/uploads/2011/03/histograma.png"><br />
</a><a href="http://core.eti.br/wp-content/uploads/2011/03/histograma.png"><img class="alignleft size-medium wp-image-650" title="histograma" src="http://core.eti.br/wp-content/uploads/2011/03/histograma-300x187.png" alt="Screenshot do varnishhist" width="300" height="187" /></a>O comando varnishhist mostra um histograma dos <em>requests</em> sendo servidos pelo cache, desde o momento do varnish pegar o request do kernel até entregar a resposta ao kernel novamente.</p>
<p>É uma ferramenta interessante para ver como está a saúde de seu cache, mas meio chatinha de se entender de cara. Além disso existem opções na linha de comando para adicionar e remover informações. Por exemplo, pode-se usar o -b para checar apenas o status dos <em>requests</em> aos <em>backends</em>, e -c para checar apenas os <em>requests</em> dos clientes.</p>
<p>A grande questão que normalmente faz os iniciantes coçarem a cabeça é exatamente como interpretar o histograma. Não tema, é bem simples depois que se entende:</p>
<ul>
<li>No topo esquerdo são mostradas a escala do gráfico e o número de <em>requests</em> sendo tratados no histograma. No caso do exemplo acima a escala é de 1:15, ou seja, cada símbolo | ou # representa 15 requests, e um total de 2000 <em>requests</em> já passaram desde que o programa iniciou.</li>
<li>Os símbolos | e # querem dizer respectivamente um cache <em>hit</em> e um cache <em>miss</em>. Trocando em miúdos: o request foi servido a partir do cache do varnish ou teve de ser buscado em algum backend.</li>
<li>A escala do eixo X é logarítmica, e da esquerda para a direita mostra o tempo que cada request demorou do início ao fim, em segundos. Então 1e0 quer dizer 1 segundo de demora, enquanto 1e-3 quer dizer 0.001 segundos (1 milisegundo).</li>
</ul>
<p>Então, quanto mais para a esquerda estiverem os <em>requests</em>, mais rápido eles estão sendo servidos. Um grande número de # significa que seu cache não está fazendo o que devia (cachear!). O histograma bom é aquele parecido com o do exemplo: a maioria dos requests está no canto esquerdo do gráfico (rápidos) e são <em>hits</em>. É normal que <em>hits</em> sejam rápidos e <em>misses</em> sejam lentos, mas dependendo da velocidade dos backends você pode acabar com muitos <em>misses</em> no lado esquerdo do histograma.</p>
<p>intel!</p>


<p>Posts relacionados:<ol><li><a href='http://core.eti.br/2005/03/05/guia-sobre-o-exim/' rel='bookmark' title='Permanent Link: Guia sobre o Exim'>Guia sobre o Exim</a> <small>Coloquei hoje no ar o guia sobre o Exim. Está...</small></li>
<li><a href='http://core.eti.br/2010/12/23/cluster-corosyncpacemaker-para-balanceamento-web-nginx-varnish-ou-apache-or-how-to-replace-wackamole-with-heartbeat/' rel='bookmark' title='Permanent Link: Cluster corosync/pacemaker para balanceamento web (nginx, varnish ou apache) (or how to replace wackamole with heartbeat!)'>Cluster corosync/pacemaker para balanceamento web (nginx, varnish ou apache) (or how to replace wackamole with heartbeat!)</a> <small>Objetivo: Construir um cluster com N máquinas rodando nginx e varnish para...</small></li>
<li><a href='http://core.eti.br/2007/09/15/meus-projetos-parados/' rel='bookmark' title='Permanent Link: Meus Projetos Parados'>Meus Projetos Parados</a> <small>Costumo plagiar meu amigo Bruno lá de Divinópolis: &#8220;Eu tenho...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/thebrainisamachine/~4/XfkB1QSu61M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://core.eti.br/2011/03/13/aprendendo-a-amar-o-histograma-do-varnish-varnishhist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://core.eti.br/2011/03/13/aprendendo-a-amar-o-histograma-do-varnish-varnishhist/</feedburner:origLink></item>
		<item>
		<title>Cluster corosync/pacemaker para balanceamento web (nginx, varnish ou apache) (or how to replace wackamole with heartbeat!)</title>
		<link>http://feedproxy.google.com/~r/thebrainisamachine/~3/4wpsFvp2Wo4/</link>
		<comments>http://core.eti.br/2010/12/23/cluster-corosyncpacemaker-para-balanceamento-web-nginx-varnish-ou-apache-or-how-to-replace-wackamole-with-heartbeat/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 17:23:08 +0000</pubDate>
		<dc:creator>coredump</dc:creator>
				<category><![CDATA[Linux e Open Source]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[corosync]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[pacemaker]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[varnish]]></category>
		<category><![CDATA[wackamole]]></category>

		<guid isPermaLink="false">http://core.eti.br/?p=638</guid>
		<description><![CDATA[Objetivo: Construir um cluster com N máquinas rodando nginx e varnish para fornecer balanceamento de carga e cacheamento de aplicações e sites web, de forma a garantir disponibilidade e escalabilidade. O cluster será formado por N máquinas, todas ativas ao mesmo tempo em um pool de IPs que será utilizado num DNS round-robin ou balanceador via hardware para [...]


Posts relacionados:<ol><li><a href='http://core.eti.br/2011/03/13/aprendendo-a-amar-o-histograma-do-varnish-varnishhist/' rel='bookmark' title='Permanent Link: Aprendendo a amar o histograma do varnish (varnishhist)'>Aprendendo a amar o histograma do varnish (varnishhist)</a> <small>Post rápido sobre uma ferramenta com má fama O comando...</small></li>
<li><a href='http://core.eti.br/2010/10/05/vuload-para-observar-load-average-em-terminais/' rel='bookmark' title='Permanent Link: VULoad, para observar load average em terminais'>VULoad, para observar load average em terminais</a> <small>Update: dei uma mexida nele e já coloquei a versão...</small></li>
<li><a href='http://core.eti.br/2007/01/30/turbogears-ou-zope-ou-ruby-behind-apache-diminuindo-o-load/' rel='bookmark' title='Permanent Link: Turbogears (ou zope, ou ruby) Behind Apache: Diminuindo o load.'>Turbogears (ou zope, ou ruby) Behind Apache: Diminuindo o load.</a> <small>E então, muita gente usa frameworks como o Turbogears ou...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h2><strong>Objetivo:</strong></h2>
<p>Construir um cluster com N máquinas rodando <a title="http://nginx.org" rel="nofollow" href="http://nginx.org/">nginx</a> e <a title="http://varnish-cache.net" rel="nofollow" href="http://varnish-cache.net/">varnish</a> para fornecer balanceamento de carga e cacheamento de aplicações e sites web, de forma a garantir disponibilidade e escalabilidade. O cluster será formado por N máquinas, todas ativas ao mesmo tempo em um pool de IPs que será utilizado num <acronym title="Domain Name System">DNS</acronym> round-robin ou balanceador via hardware para os endereços das aplicações internas. Caso um número N-1 de máquinas do cluster se torne indisponível, os IPs das máquinas indisponíveis devem ser realocados para evitar a perda de serviços.</p>
<p>Qual é o objetivo real aqui: servir conteúdo estático ou aplicações dinâmicas que possam ser cacheadas e balanceadas (ou seja, partes que não sejam dinâmicas ou que sejam geradas dinâmicamente mas não personalizadas o bastante para serem individuais para um determinado usuário). Usando o DNS round-robin se garante que cada IP vai receber mais ou  menos o mesmo número de requisição, não é exato mas é razoável o bastante. O problema de DNS RR é que caso um dos servidores caia aquele IP fica inacessível, e é aí que entra o cluster como esse que estou descrevendo. Caso um dos nós fique indisponível o IP dele é associado a outro nó, configurado de forma idêntica, que vai cuidar das requisições dele. Essa configuração pode ser aplicada inclusive para outros serviços que seguem uma mesma teoria.</p>
<p>Do ponto de vista de escalabilidade, você pode se precaver contra picos de acesso mantendo uma grande pool de IPs associados com um determinado nome, vamos supor, 12 IPs, e apenas 2 máquinas no cluster. Esses 12 endereços estarão distribuidos entre os nós de forma uniforme. No caso de um pico, basta adicionar máquinas no cluster e os<em> </em>endereços serão redistribuidos, sem necessidade de mudanças externas. As possibilidades são muitas.</p>
<p>Para isso funcionar direito, todas as máquinas do cluster tem de ter a mesma configuração e acessar os mesmos recursos. Isso pode ser feito via NFS, <em>shared storage </em>via NAS ou SAN, algum gerenciador de configuração como Chef ou Puppet, não importa. O que importa é que as configurações não saiam de sincronia.</p>
<p>Lembre-se também que conteúdo personalizado para usuários (carrinhos de compras, sites de administração de aplicações, áreas de postagens de comentários) tem de passar por servidores fora dessa estrutura ou ter alguma forma de persistência de sessão, mas isso é um problema comum a qualquer tipo de balanceamento de carga.</p>
<h2><strong>Arquitetura de cluster: </strong></h2>
<p><strong> </strong>O <a title="http://www.corosync.org" rel="nofollow" href="http://www.corosync.org/">corosync</a> faz parte da nova geração de ferramentas da alta disponibilidade para Linux. Podemos chamar isso tudo de <code>heartbeat</code> 3, mas na verdade é mais complexo que isso:  São vários projetos funcionando em uníssono para prover as funcionalidades antes disponibilizadas pelo <code>heartbeat</code>, e o <code>heartbeat</code> é agora uma das opções disponíveis para desempenhar o mesmo serviço que o <code>corosync</code> desempenha (comunicação entre os nós). O <a title="http://www.clusterlabs.org/" rel="nofollow" href="http://www.clusterlabs.org/">pacemaker</a> por outro lado já é outra parte do sistema que cuida de gerenciar os serviços rodando, monitoramento e catalogação dos mesmos. Como eu disse, complexo. A complexidade aumentou mas as possibilidades também: os clusters não estão limitados mais a dois nós e podem ser configurados como ativos-passivos, ativos-ativos, ativos+n-ativos e quase todas as outras configurações imaginável.</p>
<h2><strong>Nginx + Varnish: </strong></h2>
<p><strong></strong>Faz um tempo que escolhi usar nginx+varnish na minha estrutura de balanceamento. O <code>nginx</code> é colocado na frente do <code>varnish</code> para prover algumas funcionalidades não presentes ou que seriam complexas ou custosas de se fazer no <code>varnish</code>, como reescrita de algumas URLS, compressão de conteúdo em gzip, adição de alguns headers de expiração (Expires:). Além disso, o <code>nginx</code> é utilizado para servir conteúdo multimídia como imagens, áudio e vídeo diretamente do disco sem passar pelo cache, aumentando o <em>throughput</em> e liberando o <code>varnish</code> para servir apenas conteúdo de menor tamanho. O <code>nginx</code> também possui um módulo especializado para servir arquivos de vídeo <em>flv</em> diretamente do disco que ajuda na nossa infraestrutura.</p>
<h2><strong>Execução:</strong></h2>
<p>Inicialmente eu tinha pensado em usar o <a href="http://www.backhand.org/wackamole/">wackamole</a>, que faz redistribuição de IPs como eu queria, mas o projeto está parado a 2 anos e meio e aparentemente anda meio brigado com as interfaces no Linux 2.6. Depois de tentar resolver durante alguns dias um bug bizarro resolvi partir para a solução corosync. A instalação e configuração do Nginx e do Varnish fogem um pouco do objetivo desse post, existem vários outros na internet mostrando como montar um balanceador de carga com o nginx na frente do varnish (que eu prefiro) ou o varnish na frente do nginx (que eu acho uma solução menos escalável). A configuração inicial foi feita baseada no guia “Cluster from scratch on Fedora 11” disponível no site do <a href="http://www.clusterlabs.org/">pacemaker</a>.</p>
<p>A primeira coisa a se fazer é garantir que os nós do cluster se encontrem corretamente na rede. É importante que os nomes estejam resolvendo corretamente no<acronym title="Domain Name System">DNS</acronym> e também que o arquivo <code>/etc/hosts</code> aponte corretamente para os ips. Certifique-se que o <code>/etc/hosts</code> inclua os <code>shortnames</code> dos servidores, o comando <code>ping nomedoservidor</code> (sem sufixo dns) tem de responder pelo ip correto. Além disso, <code>uname -n</code> deve retornar o nome do servidor também sem sufixo dns (ou seja, sem .algo), caso isso não seja o caso edite o arquivo <code>/etc/hostname</code> e execute:</p>
<blockquote>
<pre># hostname $(cat /etc/hostname)</pre>
</blockquote>
<p>Os seguintes pacotes foram instalados (usando o repositório <code>lenny-backports</code>):</p>
<blockquote>
<pre># aptitude install corosync pacemaker</pre>
</blockquote>
<p>E o <code>aptitude</code> vai se encarregar de instalar o resto das dependências, incluindo <code>cluster-glue</code> e <code>cluster-agents</code>. Com os nós do cluster se falando e o software instalado, é hora de configurar o <code>corosync</code>. O <code>corosync</code> usa um endereço multicast para se comunicar entre os nós, favor prestar atenção com possíveis conflitos de porta/ips já existentes na rede. As únicas configurações alteradas do arquivo <code>/etc/corosync/corosync.conf</code> padrão do Debian foram: <code>bindnetaddr</code>, <code>use_logd</code>,<code>use_mgmtd</code> e <code>consensus</code>.</p>
<p>Esta configuração tem de ser copiada para todos os nós do cluster. Depois de feito isso, inicie o <code>corosync</code> no primeiro nó, cheque o syslog por algum erro mais gritante e depois inicie os outros nós do cluster caso esteja tudo bem. Existem duas <code>properties</code> chatas que tem de ser mudadas de cara. Toda a configuração do cluster pode ser feita através de um imenso <acronym title="Extensible Markup Language">XML</acronym> (ugh) ou através do comando <code>crm</code> que manipula o <acronym title="Extensible Markup Language">XML</acronym> (legal):</p>
<blockquote>
<pre># crm configure property stonith-enabled=false
# crm configure property no-quorum-policy=ignore</pre>
</blockquote>
<p>STONITH é o acrônimo para Shoot The Other Node In The Head, um serviço que não vamos usar nessa configuração mas é usado para serviços que tem de garantir que uma segunda cópia não rode ao mesmo tempo e para isso usam técnicas para desligar, bloquear ou &#8216;atirar na cabeça do outro nó&#8217;. O Debian tem essa<code>property</code> habilitada por padrão e o cluster não sobe sem o STONITH estar configurado corretamente ou a <code>property</code> estar desligada. O quórum já é uma propriedade interessante: ela garante que o cluster só seja considerado &#8216;consistente&#8217; se tiver mais da metade dos nós ativos (isso é obviamente impossível em um cluster com 2 máquinas em que uma falha&#8230;), neste caso desabilitamos o quórum porque não importa o número de máquinas inativas, o cluster sempre vai estar ativo.</p>
<p>Para checar o funcionamento, use o comando <code>crm_mon</code> ou <code>crm status</code> (os dois são a mesma coisa, mas o <code>crm_mon</code> tem um loop que fica mostrando as informações em tempo real enquanto o <code>crm status</code> é <em>one shot</em>). A saída tem de ser algo assim:</p>
<blockquote>
<pre># crm status
============
Last updated: Thu Dec 23 11:20:23 2010
Stack: openais
Current DC: node01 - partition with quorum
Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
3 Nodes configured, 3 expected votes
0 Resources configured.
============

Online: [ node01 node02 node03 ]</pre>
</blockquote>
<p>Depois das máquinas adicionadas e online no cluster, basta adicionar os <code>resources</code> que serão compartilhados, neste caso os 3 endereços IP. Usando o <code>crm </code>novamente (linhas quebradas para caber aqui, mas pode digitar tudo em uma linha só):</p>
<pre>
<blockquote>
<pre># primitive vip-1 ocf:heartbeat:IPaddr2 params ip="X.X.X.X" \ 
cidr_netmask="XX" op monitor interval="30s"</pre>
</blockquote>
</pre>
<p>Repita isso mais duas vezes mudando <code>vip-1</code> para <code>vip-2</code> e <code>vip-3</code> respectivamente para cada IP. Lembre-se que o que está sendo adicionado aqui são os IPs virtuais, não os IPs dos nós. Os parâmetros são auto-explicativos: <code>cidr_netmask</code> é a máscara de rede em formato CIDR do endereço, <code>op monitor interval=“30s”</code>vai monitorar o serviço para checar se ele está funcionando a cada 30 segundos (no caso, monitorar o IP). <code>ocf:heartbeat:IPaddr2</code> é uma definição de <em>Resource Agent</em>, existem vários outros para vários outros serviços.</p>
<p>Com isso os IPs vão cada um para um nó do cluster. Isso acontece com outros serviços também. Nas palavras do <em>project manager</em> do <code>corosync</code>/<code>pacemaker</code>:</p>
<pre>&lt;beekhof&gt; it tries to spread them out
&lt;beekhof&gt; regardless of what type they are
&lt;beekhof&gt; unless you use location constraints to tell pacemaker which ones they prefer</pre>
<p>Isso também garante que caso mais VIPs sejam adicionados eles sejam balanceados o melhor possível entre os nós do cluster.</p>
<p>Checando com o <code>crm status</code>:</p>
<blockquote>
<pre># crm status
============
Last updated: Thu Dec 23 11:43:39 2010
Stack: openais
Current DC: node01 - partition with quorum
Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
3 Nodes configured, 3 expected votes
3 Resources configured.
============

Online: [ node01 node02 node03 ]

 vip-1  (ocf::heartbeat:IPaddr2):       Started node01
 vip-2  (ocf::heartbeat:IPaddr2):       Started node02
 vip-3  (ocf::heartbeat:IPaddr2):       Started node03</pre>
</blockquote>
<p>A partir de agora caso um dos nós do cluster se torne indisponível o VIP rodando nele vai automaticamente ser movido para algum outro nó do cluster.</p>
<p>Os comandos <code>crm configure show</code> e <code>crm configure show xml</code> são interessantes para ver como as coisas são feitas.</p>
<p>intel.</p>


<p>Posts relacionados:<ol><li><a href='http://core.eti.br/2011/03/13/aprendendo-a-amar-o-histograma-do-varnish-varnishhist/' rel='bookmark' title='Permanent Link: Aprendendo a amar o histograma do varnish (varnishhist)'>Aprendendo a amar o histograma do varnish (varnishhist)</a> <small>Post rápido sobre uma ferramenta com má fama O comando...</small></li>
<li><a href='http://core.eti.br/2010/10/05/vuload-para-observar-load-average-em-terminais/' rel='bookmark' title='Permanent Link: VULoad, para observar load average em terminais'>VULoad, para observar load average em terminais</a> <small>Update: dei uma mexida nele e já coloquei a versão...</small></li>
<li><a href='http://core.eti.br/2007/01/30/turbogears-ou-zope-ou-ruby-behind-apache-diminuindo-o-load/' rel='bookmark' title='Permanent Link: Turbogears (ou zope, ou ruby) Behind Apache: Diminuindo o load.'>Turbogears (ou zope, ou ruby) Behind Apache: Diminuindo o load.</a> <small>E então, muita gente usa frameworks como o Turbogears ou...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/thebrainisamachine/~4/4wpsFvp2Wo4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://core.eti.br/2010/12/23/cluster-corosyncpacemaker-para-balanceamento-web-nginx-varnish-ou-apache-or-how-to-replace-wackamole-with-heartbeat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://core.eti.br/2010/12/23/cluster-corosyncpacemaker-para-balanceamento-web-nginx-varnish-ou-apache-or-how-to-replace-wackamole-with-heartbeat/</feedburner:origLink></item>
		<item>
		<title>MongoDB: sharding e mapReduce()</title>
		<link>http://feedproxy.google.com/~r/thebrainisamachine/~3/Xa9MINvv1h8/</link>
		<comments>http://core.eti.br/2010/11/14/mongodb-sharding-e-mapreduce/#comments</comments>
		<pubDate>Sun, 14 Nov 2010 14:56:54 +0000</pubDate>
		<dc:creator>coredump</dc:creator>
				<category><![CDATA[Linux e Open Source]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://core.eti.br/?p=618</guid>
		<description><![CDATA[Uma das coisas interessantes que me atraiu a testar o MongoDB foram as capacidades de sharding e replicação do mesmo. Sharding é uma técnica muito usada atualmente para lidar com escalabilidade de massas de dados, consiste basicamente em dividir os dados de uma aplicação entre vários bancos: por exemplo, numa aplicação com 1000 usuários o [...]


Posts relacionados:<ol><li><a href='http://core.eti.br/2010/11/10/ftrace-tracing-de-funcoes-do-kernel-linux/' rel='bookmark' title='Permanent Link: Ftrace &#8211; tracing de funções do kernel Linux'>Ftrace &#8211; tracing de funções do kernel Linux</a> <small>Saiu um artigo sobre o assunto na LWN a alguns...</small></li>
<li><a href='http://core.eti.br/2010/03/07/para-ser-um-sysadmin/' rel='bookmark' title='Permanent Link: Para ser um Sysadmin'>Para ser um Sysadmin</a> <small>Vendo o formspring do fike eu tentei me lembrar do...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Uma das coisas interessantes que me atraiu a testar o MongoDB foram as capacidades de <em>sharding</em> e replicação do mesmo. <em>Sharding</em> é uma técnica muito usada atualmente para lidar com escalabilidade de massas de dados, consiste basicamente em dividir os dados de uma aplicação entre vários bancos: por exemplo, numa aplicação com 1000 usuários o <em>sharding</em> faria que os usuários com nomes de A a J ficassem em um servidor, e de K a Z em outro servidor. Claro que tem mais coisas envolvida, recomendo a leitura do excelente artigo <a href="http://www.startuplessonslearned.com/2009/01/sharding-for-startups.html">Sharding for startups</a> que discute como particionar os dados e como fazer aplicações que suportam sharding.</p>
<p>O MongoDB é um banco de dados não SQL que tem ganhado espaço. Foursquare por exemplo usa o Mongo com uma massa de dados razoável (3 shards de 60Gb, de acordo com uma informação já um pouco desatualizada). Nas versões mais recentes, o MongoDB também ganhou suporte nativo a <em>sharding</em> e uma replicação mais robusta.</p>
<p>Bancos NoSQL como  Mongo tem grandes diferenças com os RDB existentes. A mais importante, SQL não existe, então algumas coisas como SELECT SUM() ou SELECT &#8230; GROUP BY que se está acostumado a usar tem de ser implementados de outra forma. As vezes é melhor implementar todo esse tratamento na aplicação, mas no caso do MongoDB ele possui uma implementação de <a href="http://en.wikipedia.org/wiki/MapReduce">Map/Reduce</a> nativa, exatamente para se fazer esse tipo de tratamento de dados. Um detalhe interessante na performance deste sistema é que no caso de bancos com shards o trabalho é dividido entre os mesmos.</p>
<p>Para testar o ganho de performance e se a divisão era feita corretamente, fiz o seguinte teste: habilitei <em>sharding</em> em uma <em>collection</em> com dados de logs com 19 milhões de registros, cada registro com tamanho entre 150 e 220 bytes. Usei as seguintes funções para o Map/Reduce:</p>
<p>Função de mapeamento (map):</p>
<pre class="brush: jscript; light: true; title: ;">
function m() {
	emit(this.c, {duration: this.d,
			size: this.s,
			conn: 1});
}
</pre>
<p>Função de redução (reduce):</p>
<pre class="brush: jscript; light: true; title: ;">
function r(key, val) {
	var total_duration = 0;
	var total_size = 0;
	var total_conn = 0;
	for (var i = 0; i &lt; val.length; i++) {
		total_duration += val[i].duration;
		total_size += val[i].size;
		total_conn += 1;
	}
	return {duration: total_duration,
			size: total_size,
			total_conn : total_conn };
}
</pre>
<p>O balanceamento dos dados entre os dois <em>shards</em> que eu criei demorou quase três horas, nesse tempo o banco continua disponível exceto por updates em dados que estão no processo de serem movidos para outro <em>shard</em>. Depois de terminado esse processo eu tinha dez milhões de registros no servidor original e os outros nove milhões e qualquer coisa no segundo <em>shard</em>.</p>
<p>O processo de Map/Reduce com apenas um banco demorou 15 minutos para completar, agindo sobre todos os registros. Depois do <em>sharding</em>, esse tempo caiu pela metade indo para 7 minutos. Se a melhora for sempre nesta proporção a adição de <em>shards</em> implica diretamente na divisão do tempo do processamento pelo número de <em>shards</em> envolvidos. De acordo com a equipe de desenvolvimento do MongoDB eles estão trabalhando agora para melhorar o paralelismo da operação de Map/Reduce mas aparentemente isso depende da <em>engine</em> que eles usam para interpretar o javascript das funções.</p>
<p>O <em>sharding</em> do MongoDB é bem implementado, mas tem de se ter cuidado na hora de escolher a chave pela qual ele vai fazer a divisão dos dados. Uma chave mal escolhida pode fazer com que os <em>shards</em> fiquem mal balanceados e acabe com todo o ganho de performance que teria sido conseguido. Um exemplo seria se no meu teste eu tivesse acabado com um milhão de <em>records</em> em um dos <em>shards</em>, e os outros dezoito no outro: os resultados estariam disponíveis no <em>shard</em> com menos data muito antes do outro terminar.</p>
<p>intel</p>


<p>Posts relacionados:<ol><li><a href='http://core.eti.br/2010/11/10/ftrace-tracing-de-funcoes-do-kernel-linux/' rel='bookmark' title='Permanent Link: Ftrace &#8211; tracing de funções do kernel Linux'>Ftrace &#8211; tracing de funções do kernel Linux</a> <small>Saiu um artigo sobre o assunto na LWN a alguns...</small></li>
<li><a href='http://core.eti.br/2010/03/07/para-ser-um-sysadmin/' rel='bookmark' title='Permanent Link: Para ser um Sysadmin'>Para ser um Sysadmin</a> <small>Vendo o formspring do fike eu tentei me lembrar do...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/thebrainisamachine/~4/Xa9MINvv1h8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://core.eti.br/2010/11/14/mongodb-sharding-e-mapreduce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://core.eti.br/2010/11/14/mongodb-sharding-e-mapreduce/</feedburner:origLink></item>
		<item>
		<title>Ftrace – tracing de funções do kernel Linux</title>
		<link>http://feedproxy.google.com/~r/thebrainisamachine/~3/MTvYokAPOXo/</link>
		<comments>http://core.eti.br/2010/11/10/ftrace-tracing-de-funcoes-do-kernel-linux/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 18:46:01 +0000</pubDate>
		<dc:creator>coredump</dc:creator>
				<category><![CDATA[Linux e Open Source]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://core.eti.br/?p=597</guid>
		<description><![CDATA[Saiu um artigo sobre o assunto na LWN a alguns meses atrás, o function tracer do Kernel tá uma coisa linda. Basicamente a ferramenta é colocada diretamente no kernel para fazer tracing do que está acontecendo no kernel. Eu tenho por exatamente usado para estudar internals. Por exemplo: [tracing]# cat trace &#60;idle&#62;-0 [000] 1726568.996435: hrtimer_get_next_event [...]


Posts relacionados:<ol><li><a href='http://core.eti.br/2010/09/09/linuxcon-brasil-2010-%e2%80%93-dia-2/' rel='bookmark' title='Permanent Link: LinuxCon Brasil 2010 – Dia 2'>LinuxCon Brasil 2010 – Dia 2</a> <small>Continuando, o segundo dia da LinuxCon prometia ser tão interessante...</small></li>
<li><a href='http://core.eti.br/2007/01/30/turbogears-ou-zope-ou-ruby-behind-apache-diminuindo-o-load/' rel='bookmark' title='Permanent Link: Turbogears (ou zope, ou ruby) Behind Apache: Diminuindo o load.'>Turbogears (ou zope, ou ruby) Behind Apache: Diminuindo o load.</a> <small>E então, muita gente usa frameworks como o Turbogears ou...</small></li>
<li><a href='http://core.eti.br/2006/04/28/resumo-semanal-de-coisas-nerds/' rel='bookmark' title='Permanent Link: Resumo semanal de coisas nerds&#8230;.'>Resumo semanal de coisas nerds&#8230;.</a> <small>Apache na liderança também em sites SSL. Com o apache2...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Saiu um artigo sobre o <a href="http://lwn.net/Articles/370423/">assunto na LWN</a> a alguns meses atrás, o function tracer do Kernel tá uma coisa linda. Basicamente a ferramenta é colocada diretamente no kernel para fazer tracing do que está acontecendo no kernel.</p>
<p>Eu tenho por exatamente usado para estudar internals. Por exemplo:</p>
<pre>[tracing]# cat trace
          &lt;idle&gt;-0     [000] 1726568.996435: hrtimer_get_next_event &lt;-get_next_timer_interrupt
          &lt;idle&gt;-0     [000] 1726568.996436: _spin_lock_irqsave &lt;-hrtimer_get_next_event</pre>
<p>Essa saída aí em cima mostra a thread idle (swapper), PID 0, rodando na CPU 0, timestamp de quando a função foi executada e as funções que estão rodando. Existem várias configurações que podem ser feitas, como por exemplo adicionar informações de latência no tracing. Isso faz com que além dos timestamps sejam colocadas as informações de quanto tempo cada função demorou para executar.</p>
<p>Eu escrevi um <a href="https://github.com/coredump/getracing/blob/master/getracing.sh">scriptizinho</a> em bash para facilitar minha vida ao ligar e desligar o tracing. Na minha máquina funcionou beleza (ainda tem bugs, mas funciona), mas lembre-se que alguns tracers (como o <em>function</em>) tem de ser habilitados no Kernel e pelo menos no kernel do Debian não estavam. Como eu já estava recompilando o 2.6.36 para fazer alguns testes, aproveitei para habilitar.</p>
<p>O <a href="http://audidude.com/?p=495">Perfikt</a> é uma ferramenta  GTK que usa dados do Valgrind e aparentemente tem suporte para a interface de tracing do kernel, fornecendo uma interface gráfica bem simpática para a parada.</p>
<p>Mais sobre o assunto (em inglês):</p>
<ul>
<li><a href="http://www.mjmwired.net/kernel/Documentation/trace/ftrace.txt">Documentação oficial</a> do Kernel</li>
<li>Matérias da LWN: <a href="http://lwn.net/Articles/322666/">First look</a>, Debugging the Kernel using Ftrace partes <a href="http://lwn.net/Articles/365835/">1</a> e <a href="http://lwn.net/Articles/366796/">2</a></li>
</ul>
<p>intel</p>


<p>Posts relacionados:<ol><li><a href='http://core.eti.br/2010/09/09/linuxcon-brasil-2010-%e2%80%93-dia-2/' rel='bookmark' title='Permanent Link: LinuxCon Brasil 2010 – Dia 2'>LinuxCon Brasil 2010 – Dia 2</a> <small>Continuando, o segundo dia da LinuxCon prometia ser tão interessante...</small></li>
<li><a href='http://core.eti.br/2007/01/30/turbogears-ou-zope-ou-ruby-behind-apache-diminuindo-o-load/' rel='bookmark' title='Permanent Link: Turbogears (ou zope, ou ruby) Behind Apache: Diminuindo o load.'>Turbogears (ou zope, ou ruby) Behind Apache: Diminuindo o load.</a> <small>E então, muita gente usa frameworks como o Turbogears ou...</small></li>
<li><a href='http://core.eti.br/2006/04/28/resumo-semanal-de-coisas-nerds/' rel='bookmark' title='Permanent Link: Resumo semanal de coisas nerds&#8230;.'>Resumo semanal de coisas nerds&#8230;.</a> <small>Apache na liderança também em sites SSL. Com o apache2...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/thebrainisamachine/~4/MTvYokAPOXo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://core.eti.br/2010/11/10/ftrace-tracing-de-funcoes-do-kernel-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://core.eti.br/2010/11/10/ftrace-tracing-de-funcoes-do-kernel-linux/</feedburner:origLink></item>
		<item>
		<title>VULoad, para observar load average em terminais</title>
		<link>http://feedproxy.google.com/~r/thebrainisamachine/~3/KC-teaefD8Y/</link>
		<comments>http://core.eti.br/2010/10/05/vuload-para-observar-load-average-em-terminais/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 13:00:20 +0000</pubDate>
		<dc:creator>coredump</dc:creator>
				<category><![CDATA[Linux e Open Source]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ncurses]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://core.eti.br/?p=584</guid>
		<description><![CDATA[Update: dei uma mexida nele e já coloquei a versão nova no github. Agora ele parece um pouco mais rápido para sair. Atualizei o screenshot também (os mais atentos vão notar que as barras estão sendo desenhadas com dados de teste, bem mais altos que os loads mostrados no cabeçalho). Nesse final de semana de [...]


Posts relacionados:<ol><li><a href='http://core.eti.br/2006/08/17/e-depois-perguntam/' rel='bookmark' title='Permanent Link: E depois perguntam&#8230;'>E depois perguntam&#8230;</a> <small>Máquina aqui de casa, Windows XP, usada apenas para checar...</small></li>
<li><a href='http://core.eti.br/2009/10/06/quase-trocando-o-prism-por-um-script-de-60-linhas/' rel='bookmark' title='Permanent Link: (quase) Trocando o Prism por um script de 60 linhas'>(quase) Trocando o Prism por um script de 60 linhas</a> <small>Quase, mas quase mesmo. O Prism é o antigo xulrunner...</small></li>
<li><a href='http://core.eti.br/2007/09/15/meus-projetos-parados/' rel='bookmark' title='Permanent Link: Meus Projetos Parados'>Meus Projetos Parados</a> <small>Costumo plagiar meu amigo Bruno lá de Divinópolis: &#8220;Eu tenho...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><strong>Update: </strong>dei uma mexida nele e já coloquei a versão nova no <a href="http://github.com/coredump/vuload/">github</a>. Agora ele parece um pouco mais rápido para sair. Atualizei o screenshot também (os mais atentos vão notar que as barras estão sendo desenhadas com dados de teste, bem mais altos que os loads mostrados no cabeçalho). <a href="http://core.eti.br/wp-content/uploads/2010/10/Captura_de_tela-bin-bash.png"><img class="alignright size-medium wp-image-592" title="Versão atual" src="http://core.eti.br/wp-content/uploads/2010/10/Captura_de_tela-bin-bash-300x241.png" alt="" width="300" height="241" /></a></p>
<p>Nesse final de semana de eleição tivemos de colocar umas coisas no ar na <a href="http://www.ebc.com.br">EBC</a> para atender as demandas de infraestrutura dos sistemas suportando as <a href="http://radioagencianacional.ebc.com.br">rádios</a>, <a href="http://agenciabrasil.ebc.com.br">agência de notícias</a>, <a href="http://apuracao.ebc.com.br">apuração em tempo real</a> e<a href="http://www2.ebc.com.br/ebc-public/flowplayer/"> tv ao vivo</a>, e para isso fizemos vários testes incluíndo balanceamento e carga. Num desses um dos colegas do desenvolvimento me sacaneou porque eu estava usando os gráficos do <a href="http://www.zabbix.com">Zabbix</a> para monitorar o load dos servidores, enquanto usava o iftop em um <a href="http://www.tenshu.net/terminator/">terminator</a> todo repartido para ver como andava a rede dos mesmos.</p>
<p>Como nada é mais inspirador que uma boa aporrinhação-construtiva, tirei um tempo nas madrugadas para fazer um trequinho em <a href="http://docs.python.org/library/curses.html">python-ncurses</a> para a próximas vez que eu precisar monitorar o <em>Load Average</em> de máquinas em modo console. Na verdade, eu imagino que já exista, mas como eu ando precisando reanimar meus <em>skills</em> em python eu nem me esforcei muito para procurar. Abaixo dois screenshots da paradinha em funcionamento:</p>
<p>Essa é minha máquina local, com quatro processadores e pouco load. Não tinha nada a mão para gerar um bom enfileiramento de processos então ficou assim mesmo.</p>
<p>A idéia é a seguinte: até o meio da tela eu mostro uma barra linear que vai até o valor de <em>Load Average</em> igual ao número de CPUs disponíveis na sua máquina (ou seja, até onde o seu <em>Load Average</em> está tranquilo, <a href="http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages">leia isso aqui</a> para entender). Depois disso eu uso um multiplicador configurável (no código claro) para mostrar a barra de excesso de load. Visualmente é fácil de interpretar, mesmo se estiver com vários abertos na: <strong>se a barra passou do meio da tela o </strong><em><strong>load </strong></em><strong> está alto demais e processos estão começando a enfileirar, quanto mais pro final da tela, pior</strong>.</p>
<p>Ainda tem algumas coisinhas cosméticas para mexer, e eu ainda tenho de testar em uma máquina com load alto de verdade, para ver como ele se comporta (por exemplo, se ele vai conseguir se atualizar corretamente com um grande enfileiramento acontecendo).</p>
<p>Mais um screenshot, agora usando o terminator para mostrar duas telas simultâneas, no meu VPS que só tem uma CPU: <a href="http://core.eti.br/wp-content/uploads/2010/10/Captura_de_tela-coredump@core.eti_.br-.png"><img class="alignright size-medium wp-image-586" title="Máquinas remota" src="http://core.eti.br/wp-content/uploads/2010/10/Captura_de_tela-coredump@core.eti_.br--300x241.png" alt="" width="300" height="241" /></a></p>
<p>O código está no <a href="http://github.com/coredump/vuload">Github</a>, você pode baixar direto <a href="http://github.com/coredump/vuload/raw/master//vuload.py">clicando aqui</a>. Obviamente, é GPL. É um bom exemplo de como usar ncurses com python também, para quem quiser ter um feeling de como era programar na era dos terminais. Por exemplo, eu tinha me esquecido como era ter de se lembrar de re-escrever a tela. Ou fazer barras usando código ASCII. Mas foi bem divertido. Vou dar mais umas hackeadas nele depois se pensar em mais informações ou alguma otimização que for interessante de fazer.</p>
<p>intel.</p>


<p>Posts relacionados:<ol><li><a href='http://core.eti.br/2006/08/17/e-depois-perguntam/' rel='bookmark' title='Permanent Link: E depois perguntam&#8230;'>E depois perguntam&#8230;</a> <small>Máquina aqui de casa, Windows XP, usada apenas para checar...</small></li>
<li><a href='http://core.eti.br/2009/10/06/quase-trocando-o-prism-por-um-script-de-60-linhas/' rel='bookmark' title='Permanent Link: (quase) Trocando o Prism por um script de 60 linhas'>(quase) Trocando o Prism por um script de 60 linhas</a> <small>Quase, mas quase mesmo. O Prism é o antigo xulrunner...</small></li>
<li><a href='http://core.eti.br/2007/09/15/meus-projetos-parados/' rel='bookmark' title='Permanent Link: Meus Projetos Parados'>Meus Projetos Parados</a> <small>Costumo plagiar meu amigo Bruno lá de Divinópolis: &#8220;Eu tenho...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/thebrainisamachine/~4/KC-teaefD8Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://core.eti.br/2010/10/05/vuload-para-observar-load-average-em-terminais/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://core.eti.br/2010/10/05/vuload-para-observar-load-average-em-terminais/</feedburner:origLink></item>
		<item>
		<title>Código de Ética do Sysadmin</title>
		<link>http://feedproxy.google.com/~r/thebrainisamachine/~3/FA_xqIlpN5k/</link>
		<comments>http://core.eti.br/2010/09/17/codigo-de-etica-do-sysadmin/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 20:04:15 +0000</pubDate>
		<dc:creator>coredump</dc:creator>
				<category><![CDATA[Linux e Open Source]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[artigos]]></category>

		<guid isPermaLink="false">http://core.eti.br/?p=575</guid>
		<description><![CDATA[Eu me associei a LOPSA no Sysadmin Appreciation Day deste ano, tava baratinho, dá uns descontos para OReilly e é uma comunidade de Sysadmins, que era o que eu estava procurando. Eles também tem um ótimo Código de Ética. Numa dessas madrugadas insones eu aproveitei para dar uma traduzida inicial nele, que está colocada abaixo. [...]


Posts relacionados:<ol><li><a href='http://core.eti.br/2010/03/07/para-ser-um-sysadmin/' rel='bookmark' title='Permanent Link: Para ser um Sysadmin'>Para ser um Sysadmin</a> <small>Vendo o formspring do fike eu tentei me lembrar do...</small></li>
<li><a href='http://core.eti.br/2006/12/01/trac-hacks-indispensaveis/' rel='bookmark' title='Permanent Link: Trac Hacks  Indispensáveis'>Trac Hacks  Indispensáveis</a> <small>Então, eu uso bastante o trac como gerenciador de projetos....</small></li>
<li><a href='http://core.eti.br/2007/01/09/usando-o-tor-e-foxy-proxy-para-acessar-o-youtube/' rel='bookmark' title='Permanent Link: Usando o Tor e Foxy Proxy para acessar o YouTube'>Usando o Tor e Foxy Proxy para acessar o YouTube</a> <small>E então. Pela segunda vez tenho a impressão de que...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Eu me associei a <a href="http://lopsa.org/">LOPSA</a> no Sysadmin Appreciation Day deste ano, tava baratinho, dá uns descontos para OReilly e é uma comunidade de Sysadmins, que era o que eu estava procurando. Eles também tem um ótimo <a href="http://lopsa.org/CodeOfEthics">Código de Ética</a>. Numa dessas madrugadas insones eu aproveitei para dar uma traduzida inicial nele, que está colocada abaixo. Ainda tem coisa pra mexer e estou aceitando dicas.</p>
<h1>O Código de Ética do Administrador de Sistemas</h1>
<p>Nós como Administradores de Sistemas profissionais nos comprometemos aos mais altos padrões de conduta ética e profissional e concordamos em ser guiados por este código de ética, e encorajamos a todos outros Administradores de Sistemas a fazer o mesmo.</p>
<p><strong>Profissionalismo</strong> Irei manter a conduta profissional no ambiente de trabalho e não permitirei que questões ou crenças pessoais me façam tratar pessoas injustamente ou sem profissionalismo.</p>
<p><strong>Integridade</strong> Serei honesto nas minhas relações profissionais e verdadeiro nas minhas competências e nos impactos dos meus erros. Buscarei assistência de outros quando for necessário.</p>
<p>Irei evitar conflitos de interesses e tendências sempre que possível. Quando meu conselho for procurado, se eu tiver algum conflito de interesse ou tendência, irei declará-los se apropriado, e recusar se necessário.</p>
<p><strong>Privacidade </strong>Irei acessar informações privadas em sistemas computacionais apenas quando necessário no curso de meus deveres técnicos. Irei manter e proteger a confidencialidade de qualquer informação a qual eu tenha tido acesso, independente do método pelo qual eu tenha tido conhecimento à mesma.</p>
<p><strong>Leis e Normas</strong> Irei me educar com relação a leis, regulamentos e normas relativas a execução dos meus deveres.</p>
<p><strong>Comunicação </strong>Irei me comunicar com a gerência, usuários e colegas sobre assuntos computacionais de interesse mútuo. Irei me esforçar para escutar e entender as necessidades de todas as partes envolvidas.</p>
<p><strong>Integridade dos sistemas </strong>Irei me esforçar para garantir a integridade, confiabilidade e disponibilidade dos sistemas pelos quais eu sou responsável.</p>
<p>Irei desenhar e manter cada sistema de maneira a suportar o propósito do sistema para a organização.</p>
<p><strong>Educação </strong>Irei continuar a atualizar e melhorar meu conhecimento técnico e outras habilidades relacionadas ao trabalho. Irei compartilhar meu conhecimento e experiência com outros.</p>
<p><strong>Responsabilidade com a Comunidade de Computação </strong>Irei cooperar com a comunidade de computação para manter a integridade de redes e recursos computacionais.</p>
<p><strong>Responsabilidade social </strong>Como profissional informado, irei encorajar o desenvolvilento e adoção de normas e leis consistentes com estes princípios éticos.</p>
<p><strong>Responsabilidade ética </strong>Irei me esforçar para construir e manter um ambiente de trabalho seguro, sadio e produtivo.</p>
<div id="_mcePaste">Irei fazer o meu melhor para tomar decisões consistentes com a segurança, privacidade e bem estar da minha comunidade e do público, e revelar rapidamente fatores que possam representar riscos ou perigos desconhecidos.</div>
<p>Irei aceitar e oferecer críticas construtivas de trabalhos técnicos quando apropriado e irei creditar corretamente as contribuições de outros.</p>
<p>Irei liderar por exemplo, mantendo elevados padrões éticos e graus de profissionalismo no exercício dos meus deveres. Irei auxiliar meus colegas a seguir este código de ética.</p>
<div id="_mcePaste"><a href="http://lopsa.org/">LOPSA</a> | <a href="http://www.usenix.org/">USENIX</a> | <a href="http://www.sage.org/">SAGE</a></div>


<p>Posts relacionados:<ol><li><a href='http://core.eti.br/2010/03/07/para-ser-um-sysadmin/' rel='bookmark' title='Permanent Link: Para ser um Sysadmin'>Para ser um Sysadmin</a> <small>Vendo o formspring do fike eu tentei me lembrar do...</small></li>
<li><a href='http://core.eti.br/2006/12/01/trac-hacks-indispensaveis/' rel='bookmark' title='Permanent Link: Trac Hacks  Indispensáveis'>Trac Hacks  Indispensáveis</a> <small>Então, eu uso bastante o trac como gerenciador de projetos....</small></li>
<li><a href='http://core.eti.br/2007/01/09/usando-o-tor-e-foxy-proxy-para-acessar-o-youtube/' rel='bookmark' title='Permanent Link: Usando o Tor e Foxy Proxy para acessar o YouTube'>Usando o Tor e Foxy Proxy para acessar o YouTube</a> <small>E então. Pela segunda vez tenho a impressão de que...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/thebrainisamachine/~4/FA_xqIlpN5k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://core.eti.br/2010/09/17/codigo-de-etica-do-sysadmin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://core.eti.br/2010/09/17/codigo-de-etica-do-sysadmin/</feedburner:origLink></item>
		<item>
		<title>LinuxCon Brasil 2010 – Dia 2</title>
		<link>http://feedproxy.google.com/~r/thebrainisamachine/~3/1pNrY14i3i0/</link>
		<comments>http://core.eti.br/2010/09/09/linuxcon-brasil-2010-%e2%80%93-dia-2/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 21:48:30 +0000</pubDate>
		<dc:creator>coredump</dc:creator>
				<category><![CDATA[Linux e Open Source]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[linuxcon]]></category>
		<category><![CDATA[nerdagem]]></category>

		<guid isPermaLink="false">http://core.eti.br/?p=569</guid>
		<description><![CDATA[Continuando, o segundo dia da LinuxCon prometia ser tão interessante quanto o primeiro, mas como meu voo estava marcado para mais tarde eu tinha de ficar esperto com bagagem, aeroporto e essas coisas. O Panel com os desenvolvedores do Kernel foi bem interessante. Foi meio um QA sobre futuro e passado do Kernel, com direito [...]


Posts relacionados:<ol><li><a href='http://core.eti.br/2010/09/01/linuxcon-brasil-2010-dia-1/' rel='bookmark' title='Permanent Link: LinuxCon Brasil 2010 &#8211; Dia 1'>LinuxCon Brasil 2010 &#8211; Dia 1</a> <small>Depois de algum tempo sem ir a eventos de SL...</small></li>
<li><a href='http://core.eti.br/2005/04/06/ii-festival-software-livre-bahia/' rel='bookmark' title='Permanent Link: II Festival Software Livre Bahia'>II Festival Software Livre Bahia</a> <small>Então. Na quinta a noite estarei indo para Salvador, participar...</small></li>
<li><a href='http://core.eti.br/2010/06/24/sobre-o-novo-sistema-de-avaliacao-de-palestras-do-fisl/' rel='bookmark' title='Permanent Link: Sobre o novo sistema de avaliação de palestras do FISL'>Sobre o novo sistema de avaliação de palestras do FISL</a> <small>Esse post é uma rant. Nem é tão pela minha...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Continuando, o segundo dia da LinuxCon prometia ser tão interessante <a href="http://core.eti.br/2010/09/01/linuxcon-brasil-2010-dia-1/">quanto o primeiro</a>, mas como meu voo estava marcado para mais tarde eu tinha de ficar esperto com bagagem, aeroporto e essas coisas.</p>
<p>O <em>Panel</em> com os desenvolvedores do Kernel foi bem interessante. Foi meio um QA sobre futuro e passado do Kernel, com direito a casos pitorescos como <em>&#8220;Qual o código menos mantido no código do kernel&#8221;</em> (resposta, a camada TTY).</p>
<p>Outras palestras interessantes do dia incluiram a do Glauber da Red Hat sobre KVM, que me deixou bastante animado com relação a evolução do projeto. Ou &#8220;produto&#8221; como eles chamam lá na corporação deles.</p>
<p>Teve um palestrante que faltou. Foi&#8230; Trágico.</p>
<p>A palestra do Thomas Gleixner do <em>RT Patch</em> foi hilária. Eles são realmente meio malucos, mas aparentemente o patch está a caminho de ser aprovado. Claro que existem penalidades de performance em se usar um sistema <em>Real Time, </em>em torno de 25% até, mas se você quer usar um <em>real time kernel</em> você tem de se conformar.</p>
<p>No final das contas, a qualidade das palestras da LinuxCon é inegável, principalmente dos palestrantes internacionais.</p>
<p>intel.</p>


<p>Posts relacionados:<ol><li><a href='http://core.eti.br/2010/09/01/linuxcon-brasil-2010-dia-1/' rel='bookmark' title='Permanent Link: LinuxCon Brasil 2010 &#8211; Dia 1'>LinuxCon Brasil 2010 &#8211; Dia 1</a> <small>Depois de algum tempo sem ir a eventos de SL...</small></li>
<li><a href='http://core.eti.br/2005/04/06/ii-festival-software-livre-bahia/' rel='bookmark' title='Permanent Link: II Festival Software Livre Bahia'>II Festival Software Livre Bahia</a> <small>Então. Na quinta a noite estarei indo para Salvador, participar...</small></li>
<li><a href='http://core.eti.br/2010/06/24/sobre-o-novo-sistema-de-avaliacao-de-palestras-do-fisl/' rel='bookmark' title='Permanent Link: Sobre o novo sistema de avaliação de palestras do FISL'>Sobre o novo sistema de avaliação de palestras do FISL</a> <small>Esse post é uma rant. Nem é tão pela minha...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/thebrainisamachine/~4/1pNrY14i3i0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://core.eti.br/2010/09/09/linuxcon-brasil-2010-%e2%80%93-dia-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://core.eti.br/2010/09/09/linuxcon-brasil-2010-%e2%80%93-dia-2/</feedburner:origLink></item>
		<item>
		<title>LinuxCon Brasil 2010 – Dia 1</title>
		<link>http://feedproxy.google.com/~r/thebrainisamachine/~3/EeFz0XQL-EA/</link>
		<comments>http://core.eti.br/2010/09/01/linuxcon-brasil-2010-dia-1/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 05:25:41 +0000</pubDate>
		<dc:creator>coredump</dc:creator>
				<category><![CDATA[Linux e Open Source]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[linuxcon]]></category>
		<category><![CDATA[nerdagem]]></category>

		<guid isPermaLink="false">http://core.eti.br/?p=560</guid>
		<description><![CDATA[Depois de algum tempo sem ir a eventos de SL eu finalmente me animei a ir ao LinuxCon. Não vou negar que a presença do Linus, Andrew Morton e Jon Corbet da LWN não contaram na decisão, claro, é por isso que eles são chamados keynote speakers. Primeiro dia, cheguei mais o fike já no [...]


Posts relacionados:<ol><li><a href='http://core.eti.br/2010/09/09/linuxcon-brasil-2010-%e2%80%93-dia-2/' rel='bookmark' title='Permanent Link: LinuxCon Brasil 2010 – Dia 2'>LinuxCon Brasil 2010 – Dia 2</a> <small>Continuando, o segundo dia da LinuxCon prometia ser tão interessante...</small></li>
<li><a href='http://core.eti.br/2005/03/30/fisl60/' rel='bookmark' title='Permanent Link: FISL6.0'>FISL6.0</a> <small>Minha palestra sobre Exim foi aceita no FISL 6.0 Agora...</small></li>
<li><a href='http://core.eti.br/2005/04/06/ii-festival-software-livre-bahia/' rel='bookmark' title='Permanent Link: II Festival Software Livre Bahia'>II Festival Software Livre Bahia</a> <small>Então. Na quinta a noite estarei indo para Salvador, participar...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Depois de algum tempo sem ir a eventos de SL eu finalmente me animei a ir ao LinuxCon. Não vou negar que a presença do Linus, Andrew Morton e Jon Corbet da LWN não contaram na decisão, claro, é por isso que eles são chamados <em>keynote speakers</em>.</p>
<p>Primeiro dia, cheguei mais o <a href="http://www.midstorm.org/~fike/weblog/">fike</a> já no final da palestra sobre MeeGo, mas nem senti muito porque o assunto não é láááá esse meu interesse todo (ojeriza a QT dá nisso). Eu meio que assisti a fala do Ian Pratt do <em>Xen Project</em> sobre os novos rumos do Xen e quando terminou tudo que eu conseguia pensar era em KVM. Ele meio que me perdeu quando mostrou a Virtualização para Notebooks. A idéia é boa? É boa<em>ish</em>&#8230; Mas tem formas menos overkill de implementar, me parece.</p>
<p>A <em>keynote</em> seguinte foi o bate papo entre Linus Torvalds, Andrew Morton e Jim Zemlin da <em>Linux Foundation,</em> foi bem interessante, cheio de coisa que estamos carecas de saber mas que imagino tenha sido a primeira vez que muita gente tenha visto e em alguns casos como o meu foi a primeira vez que eu vi ao vivo, como por exemplo o fato do Linus ser um tosco <img src='http://core.eti.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Mas ele fez o que pode para ser simpático e vencer a timidez que lhe é característica, imagino que por ser uma das raras visitas ao Brasil ele se dobrou para ser um pouco mais <em>public relations</em>, deu autógrafos, posou para algumas fotos (não para todas, tinha muita gente).</p>
<div id="attachment_561" class="wp-caption alignleft" style="width: 310px"><a href="http://core.eti.br/wp-content/uploads/2010/09/DSC00987.jpg"><img class="size-medium wp-image-561" title="Andrew Morton e coredump" src="http://core.eti.br/wp-content/uploads/2010/09/DSC00987-300x225.jpg" alt="Andrew Morton e Coredump" width="300" height="225" /></a><p class="wp-caption-text">Andrew Morton, coredump e boné do debian </p></div>
<p>O Andrew Morton foi menos assediado, consegui uma foto com ele para minha coleção tiete.</p>
<p>O problema do assédio é bem complicado. Por um lado, o Linus tinha de entender que existem pessoas que vão tentar tirar fotos e conversar e pedir autógrafos e tal. Pelo outro lado, isso deve ser um SACO, e a incapacidade de se locomover por um evento pode ser um ótimo motivo para nunca mais voltar. Na verdade, me disseram que na convenção da Austrália espalharam cartazes pedindo para não aporrinharem demais o coitado se quisessem que ele voltasse.</p>
<p>Vem com a fama. Não imagino que ele queria ser famoso quando ele escolheu ser programador na verdade. Como ele mesmo disse, ele só escolheu uma profissão que garantiria que ele sempre teria dinheiro pra viver <img src='http://core.eti.br/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<div id="attachment_563" class="wp-caption alignright" style="width: 310px"><a href="http://core.eti.br/wp-content/uploads/2010/09/DSC00986.jpg"><img class="size-medium wp-image-563" title="Linus" src="http://core.eti.br/wp-content/uploads/2010/09/DSC00986-300x225.jpg" alt="Linus Torvalds" width="300" height="225" /></a><p class="wp-caption-text">Linus, cercado e autografando</p></div>
<p>Depois do almoço acabei perdendo a palestra do Jon Corbet, no finalzinho que peguei ele falava sobre System Tap e performance counters no Linux, boas novidades para quem sente falta de um <em>dtrace</em> de gente grande como nós pobres <em>sysadmins.</em></p>
<p>A palestra do Jeremy Allison foi uma grata surpresa. Ele trabalha no Google com Samba,  estava no evento como representante do projeto e é um dos criadores da parada. Ele falou muito sobre como usar o Samba em dispositivos embarcados ou produtos próprios, como interagir (e como <strong>não</strong> interagir) com o <em>Dev Team</em> do Samba. Também falou da preocupação com a segurança e de alguns projetos interessantes, como uma empresa (não citada) que está trabalhando com o Samba 4 para fornecer uma solução completa de substituição do <em>Active Directory</em> e um projeto que ele está trabalhando no Google, que também usa Samba 4 e que, de acordo com ele, se contasse teria de nos matar depois. Mas só o prospecto de Samba 4 + Google dá o que pensar né?</p>
<p>Abordei ele depois da palestra para conversar sobre Samba e consegui uma boa confirmação de que a versão atual no <em>git HEAD</em> do projeto já consegue substituir um AD com um número razoável de usuários (1500-2000) desde que não tenha relações de confiança demais, com sucesso, e que mais ou menos no meio do ano que vem o Samba 4 deve estar sendo lançado.</p>
<p>Chupa. <em>Active. Directory.</em></p>
<p>Depois dessa palestra eu fiquei mais zanzando e fazendo um <em>networking</em> com uns conhecidos que eu não via a tempos. Otávio,  e faw do Debian, andrelop, Luiz Blanes, Corinto Meffe, Deivi Khun (esse é meu vizinho na verdade), Julio Neves, e por ai vai.</p>
<p>Cena engraçada e frase punk do dia:</p>
<blockquote><p>Otávio, fike, eu, faw, andrelop e mais uns chegados parados conversando e combinando uma churrascaria</p>
<p>Camarada da Organização:</p>
<p>- <em>E ai, vocês vão no jantar dos famosos?</em></p>
<p><em> </em>Todo mundo se entreolha, faw responde:</p>
<p>- <em>Claro que não, você está olhando pro chão de fábrica do software livre</em><em>.</em></p></blockquote>
<p>Amanhã, último dia e volta pra casa. Cheio de idéias! Compra-se dia de 30 horas para implementá-las todas!</p>
<p>intel</p>


<p>Posts relacionados:<ol><li><a href='http://core.eti.br/2010/09/09/linuxcon-brasil-2010-%e2%80%93-dia-2/' rel='bookmark' title='Permanent Link: LinuxCon Brasil 2010 – Dia 2'>LinuxCon Brasil 2010 – Dia 2</a> <small>Continuando, o segundo dia da LinuxCon prometia ser tão interessante...</small></li>
<li><a href='http://core.eti.br/2005/03/30/fisl60/' rel='bookmark' title='Permanent Link: FISL6.0'>FISL6.0</a> <small>Minha palestra sobre Exim foi aceita no FISL 6.0 Agora...</small></li>
<li><a href='http://core.eti.br/2005/04/06/ii-festival-software-livre-bahia/' rel='bookmark' title='Permanent Link: II Festival Software Livre Bahia'>II Festival Software Livre Bahia</a> <small>Então. Na quinta a noite estarei indo para Salvador, participar...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/thebrainisamachine/~4/EeFz0XQL-EA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://core.eti.br/2010/09/01/linuxcon-brasil-2010-dia-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://core.eti.br/2010/09/01/linuxcon-brasil-2010-dia-1/</feedburner:origLink></item>
	</channel>
</rss>
