http://www.biazus.com/forum/

Thunder Cache 3 no FreeBSD - Instruções de Instalação.
http://www.biazus.com/forum/viewtopic.php?f=38&t=1001
Página 1 de 4

Autor:  eksffa [ Dezembro 2nd, 2009, 12:23 pm ]
Assunto do Tópico:  Thunder Cache 3 no FreeBSD - Instruções de Instalação.

Senhores,

Seguem instruções passo-a-passo para instalação do Thunder Cache 3 em FreeBSD 7.2 e 8.0.

Os procedimentos são literais e devem ser seguidos na ordem mencionada. Essas instruções são para quem já tem algum conhecimento em FreeBSD.

Preparação prévia - Atualização do Sistema Operacional e Coleção de Ports

Garanta que você tem o último 7.2-STABLE ou 8.0-STABLE. O processo esta documento no Handbook do FreeBSD:

http://doc.fug.com.br/handbook/cutting-edge.html

Garanta também a versão mais recente da Coleção de Ports do FreeBSD com os comandos:

Código:
portsnap fetch
portsnap extract


Instalando Thunder 3 no FreeBSD

Em nosso setup, o Thunder vai rodar com usuário desprivilegiado, então criemos o usuário:

Código:
pw groupadd thunder
pw useradd thunder -c "Thunder Cache Daemon User" -s /sbin/nologin -d /usr/local/thunder


O TC3 é fechado e compilado, ao menos na versão atual, apenas para Linux. De tal forma será necessário ativar o modo de compatibilidade binária com Linux:

Código:
kldload linux > /dev/null 2>&1
sysctl -w compat.linux.osrelease=2.6.16

cd /usr/ports/emulators/linux_base-f10/
make install clean

echo "linproc         /compat/linux/proc      linprocfs       rw 0 0" >> /etc/fstab
echo "linsys          /compat/linux/sys       linsysfs        rw 0 0" >> /etc/fstab

mount /compat/linux/sys
mount /compat/linux/proc

echo "OVERRIDE_LINUX_BASE_PORT=f10" >> /etc/make.conf
echo "OVERRIDE_LINUX_NONBASE_PORTS=f10" >> /etc/make.conf


O processo de instalar Linux Base Fedora Core 10 demorará, pois será preciso baixar uma sé de rpm e outros binários Linux. A velocidade dependerá de sua largura de banda com Internet. Ao encerrar ative o modo de compat binário no rc.conf:

Código:
echo 'linux_enable="YES"' >> /etc/rc.conf



Se você tem um FreeBSD com mais de 4GB de RAM, terá um kernel com PAE (Phisical Address Extensions). Nesse caso carregar Linux como módulo não é possível, então compile estático no kernel:

Código:
options         COMPAT_LINUX
options         LINPROCFS
options         LINSYSFS


Você não pode ter o SQLite nativo para FreeBSD pois o Thunder tem ABI restritiva e não permitirá linkar o uso de um ELF tipo 3 (Linux) em um tipo 9 (FreeBSD). Então instale o SQLite3 de Linux:

Código:
cd /usr/ports/databases/linux-f10-sqlite3/
make install clean


E para garantir que a compatibilidade com Linux seja com base no kernel 2.6 (pre-requisito pro thunder), adicione a entrada aplicada manualmente ao sysctl.conf (persistente):
Código:
echo "compat.linux.osrelease=2.6.16" >> /etc/sysctl.conf


Agora vamos criar a hierarquia de sistema de arquivos para o Thunder. Manteremos a organização FreeBSD padronizando o PREFIX /usr/local/ (tipicamente para aplicações de terceiros) também para o Thunder (assim os usuários se sentirão em casa). Vamos também adequar as permissões necessárias.

Código:
mkdir -p /usr/local/thunder/cache/
mkdir /var/log/thunder /var/tmp/thunder /var/run/thunder
chown -R thunder /var/log/thunder /var/tmp/thunder /var/run/thunder /usr/local/thunder/cache
chmod 755 /var/log/thunder /var/tmp/thunder /var/run/thunder


Agora vamos baixar e descompactar o Thunder Cache 3:

Código:
cd /usr/local/thunder
fetch -o thunder3.0.tar.bz2 "http://www.biazus.com/forum/download/file.php?id=179"
tar xzf thunder3.0.tar.bz2


Crie agora também os arquivos de white/blacklist:

Código:
:> /usr/local/thunder/etc/thunder/whitelist
:> /usr/local/thunder/etc/thunder/blacklist


É pre-requisito ter o Apache2 e PHP instalados se você deseja usar a rotina PHP de monitoração das atividades do TC. Instale-os como de costume, e configure a seguinte entrada no seu httpd.conf:

Código:
Alias /thunder "/usr/local/thunder/cache"
<Directory "/usr/local/thunder/cache">
        Order allow,deny
        Allow from all
        Header set THUNDER "THUNDER" # desnecessário, fica em homenagem ao TC2.1
        Options Indexes MultiViews FollowSymLinks
</Directory>


Agora instale o suporte a PDO do PHP e PDO_SQLITE. Agora sim nativo, ja que não vamos usar binários Linux pra essa etapa:

Código:
cd /usr/ports/databases/php5-pdo_sqlite
make install clean


"Mas Patrick... não preciso do PDO também... ??"

Não se preocupe, o php5-pdo_sqlite instalará o php5-pdo automaticamente como dependência. Facilidades óbvias do Ports.

Agora copie o thunder.php para dentro da estrutura que você mapeou no Apache. Note que assim como o thunder, esse php depende de um padrão pre-estabelecido. Ele acredita que o cache do thunder será sempre /cache. Então vamos copiar e substituir esse padrão apontando para /usr/local/thunder/cache (padrão FreeBSD no PREFIX /usr/local):

Código:
cp  /usr/local/thunder/etc/thunder/thunder.php /usr/local/thunder/cache/index.php
sed -i "" -e 's/\/thunder/\/usr\/local\/thunder\/cache/g' /usr/local/thunder/cache/index.php


Faça um backup do thunder.conf original:

Código:
cp /usr/local/thunder/etc/thunder/thunder.conf /usr/local/thunder/etc/thunder/thunder.conf-dist


Edite o /usr/local/thunder/etc/thunder/thunder.conf (ou apenas /etc/thunder/thunder.conf afinal temos o link simbólico la) e coloque o seguinte conteúdo:

Código:
CACHEDIR /usr/local/thunder/cache/
PLUGINSDIR /usr/local/thunder/etc/thunder/plugins/

BLACKLIST /usr/local/thunder/etc/thunder/blacklist
WHITELIST /usr/local/thunder/etc/thunder/whitelist

USER thunder
GROUP thunder


Pode remover todo o conteúdo do thunder e deixar apenas esse (temos um backup para referência). Sim esse thunder.conf é minimalista, modifica apenas o que precisamos no nosso setup. Na ausência das demais opções o thunder sobe com seus valores default, que é suficiente para a maioria dos usuários.

Como não colocamos o thunder no Ports (ainda?) você precisa criar um script de startup.

Crie o arquivo /usr/local/etc/rc.d/thunder com o seguinte conteúdo:

Código:
#!/bin/sh
#
# PROVIDE: thunder
# REQUIRE: LOGIN
#
# Remember to thunder_enable="YES" in /etc/rc.conf
#
# FreeBSD Brasil LTDA <consultoria@freebsdbrasil.com.br>
#

. /etc/rc.subr

name="thunder"
rcvar=`set_rcvar`
command="/usr/local/thunder/sbin/thunder ${thunder_flags}"
pidfile="/var/run/thunder/thunder.pid"
: ${thunder_enable="NO"}
: ${thunder_flags="-c /usr/local/thunder/etc/thunder/thunder.conf"}
load_rc_config $name
run_rc_command "$1"


De as permissões de execução:

Código:
chmod +x /usr/local/etc/rc.d/thunder


E pronto, você tem um script de startup padrão FreeBSD simples, elegante e 100% funcional.

Agora adicione ao seu rc.conf:

Código:
thunder_enable="YES"


Reinicie o seu Apache e inicie o seu Thunder:

Código:
apachectl graceful
/usr/local/etc/rc.d/thunder start


Pronto, o Thunder está instalado e funcional.

Testando o Thunder Cache 3

Para tirar a limpo a funcionalidade, façamos o teste simples, usando o Thunder local como proxy para um Download.

Configure o proxy para o fetch(1):

Código:
setenv HTTP_PROXY 127.0.0.1:8080


E faça um download. Sugiro reproduzir o comando abaixo na íntegra:

Código:
fetch -o /dev/null -v "http://au.download.windowsupdate.com/msdownload/update/software/secu/2008/09/windowsxp-kb956803-x86-ptb_41fc52d91a9750d9087a714163b396dd381e2020.exe"


A primeira vez que você executar o comando, vai demorar um pouco o download, pois o Thunder vai buscar na Internet. Repita esse comando 2, 3, 10 vezes e veja a diferença de performance depois da primeira. Veja a reprodução:

Código:
fetch -o /dev/null -v "http://au.download.windowsupdate.com/msdownload/update/software/secu/2008/09/windowsxp-kb956803-x86-ptb_41fc52d91a9750d9087a714163b396dd381e2020.exe"
looking up 127.0.0.1
connecting to 127.0.0.1:8080
requesting http://au.download.windowsupdate.com/msdownload/update/software/secu/2008/09/windowsxp-kb956803-x86-ptb_41fc52d91a9750d9087a714163b396dd381e2020.exe
remote size / mtime: 576552 / 0
/dev/null                                     100% of  563 kB  105 MBps


Você deve prestar atenção em:

looking up 127.0.0.1
connecting to 127.0.0.1:8080


Para confirar que está realmente usando o Thunder. E depois da primeira vez note a velocidade:

/dev/null 100% of 563 kB 105 MBps

Portanto o Cache está 100% funcional.

Dica: Se precisar de mais informações no teste, use o fetch com -vv para elevar o nível de verbose. Quanto mais vezes repetir o -v mais informações. No tentando duas vezes será suficiente para acompanhar toda a transação HTTP, incluindo headers.

No seu HD você pode comprar o arquivo cacheado:

Código:
ls /usr/local/thunder/cache/windowsupdate/

domain.db
windowsxp-kb956803-x86-ptb_41fc52d91a9750d9087a714163b396dd381e2020.exe


E nos logs do Thunder (/var/log/thunder/access.log) você vai ver o TCP_MISS e depois os TCP_HIT:

Código:
tail -200 /var/log/thunder/access.log

1259779323.000 0 127.0.0.1 TCP_MISS/200 576855 GET http://au.download.windowsupdate.com/msdownload/update/software/secu/2008/09/windowsxp-kb956803-x86-ptb_41fc52d91a9750d9087a714163b396dd381e2020.exe - NONE/- -
1259779326.000 0 127.0.0.1 TCP_HIT/200 576777 GET http://au.download.windowsupdate.com/msdownload/update/software/secu/2008/09/windowsxp-kb956803-x86-ptb_41fc52d91a9750d9087a714163b396dd381e2020.exe - NONE/- -
1259779329.000 0 127.0.0.1 TCP_HIT/200 576777 GET http://au.download.windowsupdate.com/msdownload/update/software/secu/2008/09/windowsxp-kb956803-x86-ptb_41fc52d91a9750d9087a714163b396dd381e2020.exe - NONE/- -


:!: IMPORTANTE: Acabou. As instruções específicas para FreeBSD se encerram. É extremamente importante você notar que o Thunder 3 tem que funcionar standalone (independente). Integrar com Squid é outra conversa, e inclusive é opcional. Tudo tem que estar funcional até esse ponto antes de comtinuar.

Integrando Thunder Cache 3 com Squid/Lusca/Cacheboy

Aqui cabe uma consideração. Eu não uso Squid, uso Lusca, fork do Squid criado pelo Adrian (commiter FreeBSD) e recomendo este proxy ao invés do squid. Isso posto, as instruções são equivalentes.

Adicione ao final do seu /usr/local/etc/squid.conf:

Código:
# Thunder 3
include "/usr/local/etc/squid/thunder_squid.conf"


E crie o arquivo /usr/local/etc/squid/thunder_squid.conf com o seguinte conteúdo:

Código:
acl thunder_lst url_regex -i "/usr/local/thunder/etc/thunder/thunder.lst"
cache deny thunder_lst
cache_peer 127.0.0.1 parent 8080 0 proxy-only no-digest no-query
dead_peer_timeout 2 seconds
cache_peer_access 127.0.0.1 allow thunder_lst
cache_peer_access 127.0.0.1 deny all


Adapte essa configuração ao seu cenário. Ela é funcional para um cenário onde o Lusca é o proxy primário e usa o Thunder3 como Parent na mesma máquina.

Reinicie seu lusca/squid e note que você passará a observar a expressão FIRST_UP_PARENT no Lusca/Squid, indicando desvio de consulta pro primeiro cache_peer (o Thunder)

Código:
TCP_MISS/200 325887 GET http://au.download.windowsupdate.com/msdownload/update/software/secu/2009/06/windowsxp-kb971633-x86-ptb_86dbbb1ba8ad50210695e4adcaad0e5b577b86f6.exe - FIRST_UP_PARENT/127.0.0.1 application/octet-stream


Algumas Considerações:

Se você está usando um cenário profissional e transparente, saiba que o Thunder não vai funcionar por padrão com Squid em modo T-Proxy.

Código:
http_port 3127 transparent tproxy


Então use em modo transparente convencional.

Código:
http_port 3127 transparent


Para funcionar com t-proxy são necessárias outras intervenções, que não são inerentes ao Thunder e provavelmente só vão funcionar com Lusca, mas provavelmente esse não é seu cenário.

Monitorando o Thunder Cache 3

Agora acesse o http://seu_ip/thunder/ e você poderá acompanhar o status de atividade do seu setup.

Modificações / Contribuições

O script PHP de monitoração do Thunder é excelente. No entanto tomei a liberdade de modifica-lo afim de contabilizar a banda economizada desde o último acesso ao script. A idéia é muito simples, apenas salvo em um arquivo temporário a última economia em bytes calculada pelo script e a data, calculo a diferença e quanto tempo passou: essa é a economia por segundo. Converto para bits e temos o que queremos.

Tentei anexar o patch no Forum mas infelizmente a extensão .patch nem .txt são permitidas.
Então segue no corpo deste how-to:

Código:
--- /usr/local/thunder/etc/thunder/thunder.php  2009-09-27 12:14:07.000000000 -0300
+++ /usr/local/thunder/cache/index.php  2009-12-02 17:01:49.000000000 -0200
@@ -16,7 +16,7 @@
*
* (C) Copyright 2008-2009 Thunder Cache
*
-* For more information check http://thundercache.org
+* For more information check http://usr/local/thunder/cachecache.org
*
* Get relatories from system
*
@@ -24,7 +24,7 @@
*/

        error_reporting(0);
-       $cache_dir = "/thunder";
+       $cache_dir = "/usr/local/thunder/cache";
       
        function disk_use($dir){
                $df = disk_free_space($dir);
@@ -84,25 +84,32 @@
          return $total;
        }

-       function sizeFormat($size){
+       function sizeFormat($size,$By2bi){
+           $b="B";
+           $bs="bytes";
+           if ($By2bi) {
+               $b="b/s";
+               $bs="bits/s";
+               $size=($size*8);
+           }
            if($size<1024)
            {
-               return $size." bytes";
+               return round($size,1)." $bs";
            }
            else if($size<(1024*1024))
            {
                $size=round($size/1024,1);
-               return $size." KiB";
+               return $size." K$b";
            }
            else if($size<(1024*1024*1024))
            {
                $size=round($size/(1024*1024),1);
-               return $size." MiB";
+               return $size." M$b";
            }
            else
            {
                $size=round($size/(1024*1024*1024),1);
-               return $size." GiB";
+               return $size." G$b";
            }

        }
@@ -169,8 +176,12 @@
        <table border="1" align="center">
         <tr class="cabecalho">
           <td><strong>Dom&iacute;nio</strong></td><td><strong>Arquivos</strong></td><td><strong>Tamanho</strong></td><td><strong>Economia</strong></td><td><strong>Hits</strong></td>
-          <td><strong>Efici&ecirc;ncia %</strong></td></tr>
+          <td><strong>Efici&ecirc;ncia %</strong></td>
+          <td><strong>Banda</strong></td></tr>
        <?
+       $current_data = array(date(U));
+       $saved_data = unserialize(file_get_contents("/tmp/thunder_stats_fbsdbr.txt"));
+
foreach($domains as $domain) {
        //caso a base de dados não exista, ele tenta criar
        if ($db = new PDO("sqlite:$cache_dir/$domain/domain.db")) {
@@ -184,6 +195,11 @@
        foreach($db->query("SELECT file, requested, size from thunder") as $roww) {
                $economia_domain += ($roww[2] * $roww[1]);
        }
+       $current_data[$domain] = $economia_domain;
+       $segundos = $current_data[0] - $saved_data[0];
+       $econo_bytes = (($current_data[$domain] - $saved_data[$domain])/$segundos);
+       $totalEcono_bytes+=$econo_bytes;
+
        foreach ($db->query("SELECT SUM(requested) FROM thunder") as $row) {
                $ar = getDirectoryInfo("$cache_dir/$domain");
                $porcent=round(($economia_domain/$ar['size'])*100,2)
@@ -193,7 +209,8 @@
                <td height="18"><font color="#20A253"><?= sizeFormat($ar['size']) ?></font></td>
                <td height="18"><font color="#20A253"><?= sizeFormat("$economia_domain") ?></font></td>
                <td height="18"><font color="#20A253"><?= $row['SUM(requested)'] ?></font></td>
-               <td height="18"><font color="#20A253"><?= $porcent ?> %</td></tr>
+               <td height="18"><font color="#20A253"><?= $porcent ?> %</td>
+               <td height="18"><font color="<?= ($econo_bytes<0) ? 'red' : ($econo_bytes>0) ? 'green' : 'black' ?>"><?= sizeFormat($econo_bytes,true) ?></td></tr>
                <?
                $totaleconomy += $economia_domain;
                $totalhits += $row['SUM(requested)'];
@@ -204,13 +221,18 @@
?>
<?php
$ar_root = getDirectoryInfo("$cache_dir");
+
+$fp = fopen("/tmp/thunder_stats_fbsdbr.txt", 'w+') or die("I could not open $filename.");
+fwrite($fp, serialize($current_data));
+fclose($fp);
?>
   <tr><td height="22"><b><font color="#0C70EE">Total</font></b></td>
        <td height="22"><b><font color="#0C70EE"><?= $ar_root['count'] ?></font></b></td>
        <td height="22"><b><font color="#0C70EE"><?= sizeFormat($ar_root['size']) ?></font></b></td>
        <td height="22"><b><font color="#0C70EE"><?= sizeFormat($totaleconomy) ?></font></b></td>
        <td height="22"><b><font color="#0C70EE"><?= $totalhits ?></font></b></td>
-       <td height="22"><b><font color="#0C70EE"><?= round(($totaleconomy/$ar_root['size'])*100,3) ?> %</font></b></td></tr>
+       <td height="22"><b><font color="#0C70EE"><?= round(($totaleconomy/$ar_root['size'])*100,3) ?> %</font></b></td>
+       <td height="22"><b><font color="#0C70EE"><?= sizeFormat($totalEcono_bytes,true) ?></font></b></td></tr>
  </table>
</body>
</html>


Feedback de Performance e Economia de banda.

Em anexo vocês vêem na primeira imagem o script de status do thunder modificado.

Anexo:
Comentário sobre o Arquivo: Status do Thunder modificado (economia de banda) integrado Cacti.
Captura_de_tela.png
Captura_de_tela.png [ 266.1 KiB | Visualizado 2369 vezes ]


Na segunda uma análise do tráfego NetFlow HTTP. Pra baixo a banda que eu envio pros clientes, pra cima a banda que eu vou buscar da Internet. Note que as cores é praticamente só HTTP tanto pros clientes quanto Internet.

Anexo:
Comentário sobre o Arquivo: Análise NetFlow depois da ativação do Thunder.
Captura_de_tela-1.png
Captura_de_tela-1.png [ 304.89 KiB | Visualizado 2369 vezes ]


Ou seja com o Thunder chegamos perto de 70Mbit/s entregue aos clientes, nesse FreeBSD em questão, enquanto consumimos menos de 8Mbit/s de Internet. Bem-vindos ao Thunder com FreeBSD.

Notem que esse é o pico. Considerem a economia como o baseline que fica claro no gráfico em anexo.

Atenção: Se você for usar o script modificado e não usa FreeBSD modifique :

Código:
+       $cache_dir = "/thunder";
-       $cache_dir = "/usr/local/thunder/cache";


Espero que essas instruções sejam úteis. Elas estão 100% testadas, se alguem simplesmente copiar e colar os comandos vai funcionar. Mas não faça isso puro-e-simpesmente; importante é entender o que você está fazendo.

Obrigado a essa equipe pelo Thunder Cache e por criar um fórum para FreeBSD.

Bom uso do how-to à comunidade FreeBSD. E se você não é usuário FreeBSD aproveite o encejo e use esse how-to como um convite.

Autor:  osmano807 [ Dezembro 2nd, 2009, 12:39 pm ]
Assunto do Tópico:  Re: Thunder Cache 3 no FreeBSD - Instruções de Instalação.

Executou o thunder --help?
Código:
Usage: thunder [Options]

Thunder Version 3

Possible options are:
--help | -h                         This pamphlet
--conf-file=FileName | -c Filename  Use this Config-File

Exiting..


thunder -c /path/do/conf

Agora, me passe seu msn que to pensando em migrar meu servidor aqui :1laugh:

Autor:  eksffa [ Dezembro 2nd, 2009, 4:36 pm ]
Assunto do Tópico:  Re: Thunder Cache 3 no FreeBSD - Instruções de Instalação.

Opa, tem toooda razão osmano! Excelente. Vi que existem variaveis pra BLACK e WHITE o que resolve tambem essa questão. Vou atualizar a documentação.

Quanto ao msn é esse mesmo que voce adicionou :)
Sigamos.

Autor:  eksffa [ Dezembro 2nd, 2009, 4:48 pm ]
Assunto do Tópico:  Re: Thunder Cache 3 no FreeBSD - Instruções de Instalação.

How-to atualizado depois da dica do Osmanu.

CHANGELOG:

- thunder_flags adicionado ao script de startup (pode ser customizado via /etc/rc.conf).
- Não precisamos mais do /etc/thunder como symlink.
- thunder.conf modificado para refletir a inexistência do /etc/thunder (BLACKLIST, WHITELIST, PLUGINSDIR).

Testado (estou rodando com essas mudanças aqui)

Autor:  minelli [ Dezembro 2nd, 2009, 5:23 pm ]
Assunto do Tópico:  Re: Thunder Cache 3 no FreeBSD - Instruções de Instalação.

Parabéns amigo pelo trabalho caso queira que seu material seja disponibilizado somente para Donators nos avise e fazermos a transferência de área, caso não queira meus parabéns mais uma vez.
Afinal poucos fazem o que fez.

Autor:  Luiz Biazus [ Dezembro 3rd, 2009, 2:52 am ]
Assunto do Tópico:  Re: Thunder Cache 3 no FreeBSD - Instruções de Instalação.

excelente mesmo!

acho que todos sabem que servidores BSD são muito mais "parrudos" que linux de modo geral e tiram muito mais proveito do hardware...
com certeza testarei isso ai!

Parabéns velho!

Abraços

Luiz

Autor:  eksffa [ Dezembro 4th, 2009, 8:00 am ]
Assunto do Tópico:  Re: Thunder Cache 3 no FreeBSD - Instruções de Instalação.

Minelli,

Vamos ver, se o how-to se mostrar valioso podemos sim, nao torna-lo restrito mas uma versão melhor dele, com mais detalhes como t-proxy com Thunder, tunning de performance.

Autor:  minelli [ Dezembro 4th, 2009, 10:51 am ]
Assunto do Tópico:  Re: Thunder Cache 3 no FreeBSD - Instruções de Instalação.

Ok, ficamos no aguardo.

Autor:  eksffa [ Dezembro 17th, 2009, 10:38 pm ]
Assunto do Tópico:  Re: Thunder Cache 3 no FreeBSD - Instruções de Instalação.

Testado ambiente 64bits também. 100% funcional.

Autor:  matheuscucoloto [ Dezembro 18th, 2009, 6:28 pm ]
Assunto do Tópico:  Re: Thunder Cache 3 no FreeBSD - Instruções de Instalação.

Fala Patrick.

Estou usando o thunder 3 aqui na empresa mas sem o linux emule, o pessoa do thunder acessou nosso servidor e compilou.

Aqui esta rodando perfeitamente também.

Faz tempo que eu nao via uma publicação sua.

Abraços

Página 1 de 4 Todos os Horários estão como UTC - 3 horas
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/