MySQL sliding window archive

Dezembro 2, 2007 on 4:05 am | In database, linux, MySQL, storage | No Comments

O objectivo
Já aqui falei sobre logs centralizados. O objectivo que se pretende atingir é concentrar todos os logs de um datacenter num único sítio para consulta fácil e arquivo histórico. Mais concretamente, é importante:

  • Guardar todos os logs durante pelo menos 5 anos.
  • Manter os últimos meses rapidamente acessíveis e passíveis de serem consultados de forma flexível e rápida.
  • Garantir que em caso de avaria grave não se perdem mais do que 1 ou dois dias de logs.

Noutro post falei da possibilidade de usar o Archive storage engine como forma de reduzir o espaço ocupado e, simultaneamente, dificultar o encobrimento de acções ilegítimas através da eliminação de logs. 

Os problemas
Ao tentar usar o Archive storage engine como repositório de todos os logs, tentanto tirar partido da compresão e da durabilidade inerentes, surgem alguns problemas, nomeadamente:

  • A compressão/descompressão de dados, associada à inexistência de índices torna as consultas com critérios complexos muito mais demoradas do que em MyISAM.
  • O recurso a partições para acelerar as consultas (que são sempre limitadas a um determinado intervalo de tempo, e por isso prestam-se a partition pruning) é uma boa ideia, mas há limites

A solução
A conjugação dos requisitos anteriores aponta quase directamente para uma solução heterogénea que combine o melhor de dois mundos: a rapidez de acesso e a flexibilidade do storage engine MyISAM, com a durabilidade e compressão do Archive.
A solução final tem os seguintes componentes:

  • Uma base de dados em que os logs são guardados em tabelas MyISAM. As tabelas são particionadas por intervalo, usando a data do evento como chave de particionamento. Cada partição irá conter um dia dados, ou seja uma média de 300.000 registos. As tabelas são criadas vazias com duas partições, uma para o dia actual e outra para o dia seguinte.
  • Uma base de dados em que os logs são guardados em tabelas Archive, sem recurso a partições, porque são conhecidos vários problemas com essa combinação, e já tive oportunidade de experimentar alguns deles. As tabelas são criadas vazias.
  • Um script executado diariamente que verifica a existência de dados na base de dados MyISAM com mais de 60 dias e, caso existam, os copia para a base de dados Archive, eliminando de seguida a partição correspondente (e os dados nela contidos) da base de dados MyISAM.

Desta forma mantém-se sempre 2 meses de logs que são muito rápidos de consultar, graças ao uso de partições e do storage engine MyISAM é fácil e rápido fazer backup, e assegura-se o armazenamento a longo prazo com taxas de ocupação adequadas.

Share

Database Disaster Resilience (3/3)

Maio 27, 2007 on 10:58 pm | In database, linux, MySQL, networking, open-source, storage | No Comments

(Continuação deste outro post)

Para encerrar este tema, a solução final passou por replicar duas partições de alguns GBs usando DRBD 0.7, e montar o /var/lib/mysql lá em cima.

Como storage engine ficou o InnoDB, mas com tablespaces individuais por cada tabela, para ser mais fácil gerir o espaço em disco (e também dá jeito para backup/restore binário).

Ainda não simulei desastres com o sistema em carga, mas conto fazê-los em breve, se houver novidades dignas de registo, avisarei.

Só mais uma nota, durante o setup foi necessário sincronizar a partição entre duas localizações remotas e fiquei agradavelmente surpreendido com o desempenho de rede do DRBD.

PS: A história das maçãs serve apenas para facilitar a escrita e evitar mencionar o objectivo real da aplicação que está em cima desta infra-estrutura. Como é ortogonal em relação aos temas discutidos, julgo que ninguém sai lesado.

Share

SLED 10 on Lenovo T60 – s2ram

Maio 22, 2007 on 3:19 pm | In ibm, linux, mobile, MySQL | 1 Comment

Tenho estado a fazer alguns testes com SLED 10 em portáteis Thinkpad (aliás Lenovo…) T60.
São umas belas máquinas, pesadotas mas poderosas, pelo menos para os meus padrões de exigência.

A instalação reconheceu o hardware todo sem problemas. Houve só duas coisas que não ficaram a funcionar out-of-the-box. Uma foi o suspend-to-ram, outra foi a autenticação biométrica.

Ainda não me dediquei à segunda, mas a primeira já ficou resolvida. Este modelo de Thinkpad não está na whitelist do s2ram, por isso, para evitar potenciais chatices, o instalador desactiva esta opção sem dizer nada a ninguém. Este artigo ajudou-me a configurar as opções correctas para o s2ram e neste momento já funciona sem problemas. Resumidamente, é preciso acrescentar ao seguinte ficheiro:

/etc/powersave/sleep

as seguintes opções:

SUSPEND2RAM_FORCE=”yes”
SUSPEND2RAM_ACPI_SLEEP=”3″

Curiosamente, o suspend-to-disk funcionou sem problemas logo após a instalação.

PS: compiz rocks ;)

Share

wget + fiddler

Maio 18, 2007 on 9:19 pm | In linux, MySQL, open-source, windows | No Comments

Quem está habituado a trabalhar em Linux conhece o wget desde os primeiros contactos com a plataforma. Só há alguns meses descobri que também havia binários para Windows. Comecei a usá-lo diariamente para evitar alguns problemas conhecidos com os downloads directos do Internet Explorer.

Para downloads de sites públicos funciona lindamente. Para downloads de sites protegidos com autenticação por http basic também, basta usar as opções:

--http-user
--http-password

Para downloads de sites ftp autenticados existem opções equivalentes, mas e para todos os sites com esquemas de autenticação baseados em cookies, a esmagadora maioria?

Ao bom estilo do software open-source, também existe uma opção! :) A opção --header permite especificar qualquer cabeçalho http que se pretenda acrescentar ao pedido original. Isto significa que é possível acrescentar um cabeçalho do tipo:

Cookie: __utmz=17373.1172.2.1.utmccn=(direct)

para especificar o cookie que deve ser usado para autenticar o utilizador que tenta fazer o download (este exemplo – alterado – é parte de um cookie usado pelo Gmail). Mas, e como obter este cookie? Ele está guardado algures nas directorias temporárias do browser, mas há uma extensão brilhante para o Internet Explorer que pode dar uma ajudinha: o Fiddler. Trata-se de uma extensão que permite fazer debugging ao protocolo http que o browser usa para “falar” com os servidores web. De facto não é mais do que um proxy transparente com uma interface bonitinha para espiolhar o que lá passa, mas dá muito, muito jeito.

Basta abrir o Fiddler, iniciar o download através do Internet Explorer, identificar o pedido correspondente no inspector do Fiddler, mudar para a vista “Raw”, et voilà, estarão à vista todos os cabeçalhos, incluindo o cookie que tanta falta faz ao wget. Agora é só fazer copy/paste e está o problema resolvido.

Share

TSM Live CD

Maio 14, 2007 on 10:53 pm | In ibm, linux, MySQL, storage, tivoli | No Comments

No mundo empresarial de data protection, é mais ou menos assumido que há poucos rivais para o Tivoli Storage Manager (TSM) da IBM. É um produto maduro, com muitos anos de existência e conceitos pouco intuitivos mas extremamente eficazes (ao contrário da maior parte do software de backup, é data-oriented e não media-oriented, o que significa que gere a informação e não os mídias onde a informação é guardada). Para além disso é verdadeiramente multi-plataforma (Windows, Linux, AIX, z/OS, i5/OS, etc.).

Recentemente estive envolvido na realização de backups para Disaster Recovery (DR) recorrendo precisamente ao TSM. A mim couberam-me os servidores Linux. Para garantir backups completos com o filesystem em estado consistente, é importante que o sistema operativo que lança o cliente de backup não toque no disco, o que equivale a dizer que é preciso um live-cd com Linux.

Ainda tentei usar o bootcd do Debian para tentar gerar um Live CD de um sistema que já tinha o cliente de backup instalado, mas ficaram muitas arestas por limar. Finalmente decidi dar uma hipótese ao Ubuntu, e seguir este tutorial para criar um Dapper Drake à minha maneira. Correu às mil maravilhas. Bastou-me copiar as directorias do cliente de backup para o /opt, dar-lhe uma ajudinha a encontrar as bibliotecas com o ldconfig e ficou a funcionar.

No final, o procedimento para fazer backups/restores de DR ficou com o seguinte aspecto:

Backup

  1. arrancar com live cd
  2. abrir terminal
  3. setxkbmap pt
  4. sudo su -
  5. sfdisk para gerar dump das partições (ex. sfdisk -d /dev/sda > partition-dump.txt)
  6. criar mount points (ex. mkdir /mnt/sda1)
  7. mount nos sitios certos (ex. mount -t ext3 /dev/sda1 /mnt/sda1)
  8. encher de zeros os blocos vazios do filesystem para melhor compressão (ex: dd if=/dev/zero of=/mnt/sda1/dummy; rm -f /mnt/sda1/dummy)
  9. mudar node name para o valor correcto e acrescentar “compression yes” ao ficheiro /opt/tivoli/client/ba/bin/dsm.sys
  10. fazer o backup dos vários discos (ex: /opt/tivoli/tsm/client/ba/bin/dsmc image backup /mnt/sda1 -imagetype=static)

Restore

  1. arrancar com live cd
  2. abrir terminal
  3. setxkbmap pt
  4. sudo su -
  5. sfdisk para criar as partições (ex. sfdisk /dev/sda
  6. mkfs.* para criar filesystems (ex. mkfs.ext3 /dev/sda1)
  7. mkswap para criar swap (ex. mkswap /dev/sda2)
  8. criar mount points (ex. mkdir /mnt/sda1)
  9. mount nos sitios certos (ex. mount -t ext3 /dev/sda1 /mnt/sda1)
  10. mudar node name no ficheiro /opt/tivoli/client/ba/bin/dsm.sys
  11. fazer o restore dos vários discos (ex. /opt/tivoli/tsm/client/ba/bin/dsmc image restore /mnt/sda1 /mnt/disco1)
Share
Página seguinte »

© procself. Este blog está alojado no FEUP Blogs. Crie também o seu blog.
Subscreva os Artigos (RSS) e os Comentários (RSS) do procself.