Como você gerencia e implanta as portas do FreeBSD em um ambiente grande?

19

Estou curioso para saber como as pessoas estão implantando as portas do FreeBSD em seu ambiente. Eu suponho que a maioria das pessoas que usam o FreeBSD estão realmente usando Ports (e muitas vezes portupgrade para atualizar com binários). No entanto, estou interessado em saber como você tem essa configuração, pois não estou satisfeito com o funcionamento das coisas nas versões recentes. Agora estou executando o FreeBSD 9.0 e estou tendo problemas.

Eu configurei as coisas da seguinte forma:

  • / usr / ports é compartilhado via NFS de um nó (com a atualização noturna 'portsnap fetch').
  • Cada nó monta / usr / ports com leitura-gravação
  • Eu configurei "WRKDIRPREFIX = / usr / tmp" em /etc/make.conf em todos os nós
  • Configurei o Portsnap para usar um índice local, adicionando o seguinte a /usr/local/etc/pkgtools.conf:

ENV['LOCALINDICES'] ||= '/var/db'

ENV['PORTS_INDEX'] ||= ENV['LOCALINDICES'] + '/INDEX.local'

Eu posso executar com sucesso portupgrade -p package para criar um pacote e, em seguida, portupgrade -P package para instalar o binário nos outros nós.

No entanto, às vezes recebo o seguinte problema: /var/db/INDEX.local:23265:dbm_store failed

Eu não consigo pensar em nenhuma outra otimização que eu possa fazer ao sistema, já que o índice agora reside localmente, e a única coisa realmente exportada é a árvore de ports e nada é escrito lá dos nós.

    
por vpetersson 28.02.2012 / 17:45

4 respostas

13

Nunca fiquei totalmente satisfeito com o sistema de portas em um ambiente grande. Parece sempre que você precisa aplicar um gerenciamento externo a ele para que ele funcione bem.

Minhas melhores dicas (em ordem de preferência ascendente, "pior" solução para "melhor" solução):

Se você está desenvolvendo cada host, não .
Se você precisar, não faça isso no NFS com montagens de leitura-gravação como você descreve: Você pode confiar nas portas para fazer a coisa certa e não pisar na árvore de portes se você fornecer diretórios de trabalho alternativos, mas é sempre melhor prevenir do que remediar: execute um espelho CVS / csup local e copie todos os seus hosts daquela caixa, em seguida, construa localmente como se fossem máquinas individuais.
Sim, eu sei que isso significa ter mais espaço em disco nos hosts e uma etapa extra. Também é quase garantido que não há problema.
Advertência: Você provavelmente deseja sincronizar os arquivos de configuração de pacotes (rsync ou similares) de um "host de configuração" designado para garantir a consistência em cada máquina ( você pode até mesmo rsync a árvore de ports inteira se você quiser, ao invés de usar o csup em cada nó).

Use um host de criação, crie pacotes e instale-os.
Uma solução muito melhor do que criar em cada máquina individual: use um host de compilação para criar pacotes e aponte suas ferramentas para esses pacotes.
Isso significa manter um host de compilação em torno de cada arquitetura que você executa (ou compilação cruzada), mas é melhor para suas máquinas de destino (sem grandes tarefas de compilação, uma garantia de consistência)

Use uma ferramenta de gerenciamento de configuração / sistema.
Esta é a solução que acabei tendo - eu construo uma imagem de servidor padrão e implantei em torno do meu ambiente usando radmind . Você pode fazer coisas parecidas com o Puppet ou Chef . Isso tem todas as vantagens de usar um host de compilação (consistência, menos carga nos servidores individuais) e adiciona o benefício do gerenciamento de configuração.

Ressalva: Isso só funciona muito bem se suas máquinas forem "idênticas" - ou seja, você pode instalar o mesmo conjunto de portas em todas elas. Ele pode funcionar se você tiver vários conjuntos de portas, mas isso aumenta substancialmente a sobrecarga administrativa.

Aviso: sou o mantenedor da porta para sysutils/radmind . Sim, eu gostei tanto que adotei isso.

Tudo isso é baseado na minha experiência no gerenciamento de ambientes FreeBSD de vários tamanhos (variando de 1 a 2 máquinas a mais de 100). As ferramentas de configuração / gerenciamento de sistemas que empurram e mantêm uma imagem padronizada são realmente a melhor maneira de lidar com isso na minha experiência.

    
por 28.02.2012 / 20:41
6

Estranho que ninguém tenha mencionado ports-mgmt / tinderbox :

Tinderbox is a package building system for FreeBSD ports, based on official Portbuild scripts used on pointyhat building cluster. Tinderbox was written by Joe Marcus Clarke.

You can define multiple jails (base system versions) and multiple portstrees. The combination of jail and portstree is called a build. A Tinderbox jail is not what is understood as a jail in FreeBSD, it is in fact a given world in a chroot. Tinderbox supports automatic tracking of dependencies and only rebuilds packages that changed since last run. Tinderbox has support for email notification of failed builds. Tinderbox also integrates well with ccache.

Tinderbox is designed to easily provide package sets of ports you need, for platforms and architectures you need. Tinderbox is also excellent tool for testing new ports and port upgrades, especially for testing dependencies and packing lists. It's also useful for testing ports on various releases of FreeBSD, since you can run FreeBSD 6.X world as a jail on FreeBSD 7.X/8.X host.

Também mudar para o pkgng simplifica muito as implantações de pacotes.
Confira no github: link

    
por 06.03.2012 / 01:47
3

Eu gerenciei mais de 100 servidores FreeBSD simplesmente compartilhando / usr somente leitura em NFS bem ajustado, movendo os bancos de dados de pacotes de / var para / usr e simbolizando para eles (não estritamente necessário, mas habilitando pkg_info e outros). Pode ter havido um ou dois outros arquivos que precisavam ser movidos em uma direção ou outra e ligados por links simbólicos, mas toda a configuração me levou cerca de uma hora para descobrir. Funcionou muito, muito bem. Se eu me deparasse com problemas de dimensionamento, teria adicionado servidores NFS adicionais e dividido a carga de trabalho, mas ela nunca apareceria. O desempenho nunca foi um problema para mim (na verdade, foi ótimo), mas suponho que você poderia colocar o / usr do servidor NFS (ou uma cópia dele) em um md.

    
por 27.07.2012 / 21:44
1

Parece que ninguém tem uma boa solução para isso, infelizmente. O mais provável é que isso se deva a limitações nas ferramentas de underlaying.

Aqui está o que eu criei: eu descartei a ideia de exportar toda a árvore de ports. Em vez disso, eu cedi e coloquei uma árvore de ports completa em cada nó. Eu então montei 'packages' sobre o NFS (para permitir a distribuição de pacotes).

Eu também pretendo utilizar um proxy de cache (provavelmente Squid) para acelerar o processo do portnap. Escrevi um breve post sobre como para configurar isso no meu blog.

Referências:

por 07.05.2012 / 15:26

Tags