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 PortsGaranta 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.htmlGaranta 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 FreeBSDEm 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:8080Para confirar que está realmente usando o Thunder. E depois da primeira vez note a velocidade:
/dev/null 100% of 563 kB 105 MBpsPortanto 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/CacheboyAqui 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 3Agora acesse o
http://seu_ip/thunder/ e você poderá acompanhar o status de atividade do seu setup.
Modificações / ContribuiçõesO 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í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ência %</strong></td></tr>
+ <td><strong>Eficiê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 [ 266.1 KiB | Visualizado 2349 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 [ 304.89 KiB | Visualizado 2349 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.