Gerenciamento de configurações : meu novo vício

Dizem que a vida é cíclica. De tempos em tempos, um novo ciclo se inicia, logo após um ciclo anterior ter se fechado. Observando com atenção, podemos notar padrões indicando finais e inícios de novos ciclos constantemente. Tudo acaba, tudo reinicia novamente, tudo se renova.

Eu, como parte do universo, também tenho meus ciclos. Um deles, por exemplo, é, de tempos em tempos, me interessar por um assunto em específico e começar a estudá-lo, independente de ser um assunto completamente ligado a minha área de atuação. Geralmente, porém, ao menos algum resquício de relação com o que faço existe.

A bola da vez é gerenciamento de configuração. A medida que a quantidade de servidores e serviços com os quais se tem de lidar diariamente aumenta, a tarefa de administrá-los, mantê-los atualizados, configurados de forma correta, documentá-los e manter atualizada a documentação relacionada a esse ambiente, se torna exaustiva.

A cada vez que uma melhoria é necessária, percorrer todo o parque de servidores para implementá-la de forma idêntica ou semelhante é uma tarefa maçante, que consome muito tempo e, como tal, por vezes acaba sendo adiada, as vezes sendo até mesmo esquecida por completo, ainda mais se a equipe responsável por manter o ambiente for uma equipe pequena com diversas atribuições.

Uma solução para esses problemas é passar a utilizar uma solução de gerenciamento de configurações. Comecei a estudar sobre o assunto nos últimos dias, inicialmente sobre a teoria existente sobre o tópico, os conceitos, os problemas que as soluções dessa categoria se propõem a resolver e me interessei ainda mais.

Nos últimos dias, graças a virtualização, fiz um laboratório simples, com um host servidor representando a fonte das diretivas de configuração a serem aplicadas nos servidores clientes e um host cliente, o qual receba as configurações definidas no host servidor. Até o momento, após consultas a documentação e testes práticos, tudo parece estar funcionando corretamente.

Inicialmente, minha idéia é criar classes de configuração que me permitam representar todos os padrões a serem implementados em novos servidores a serem instalados. Sempre temos uma certa quantidade de passos que seguimos e que devem ser executados em todo novo servidor (instalação de pacotes específicos, configuração de utilitários, definição de checagens periódicas e envio de notificações sobre diversos aspectos do servidor, etc). Automatizar esses passos é o primeiro objetivo.

Com isso feito e com a experiência obtida após isso, o próximo passo é tentar, aos poucos, ir colocando sob o gerenciamento do host servidor de configurações os servidores antigos já existentes, os quais provavelmente terão que ter classes próprias criadas para os mesmos, apesar de provavelmente poder reutilizar classes básicas previamente criadas.

O objetivo final é que cada mudança de configuração a ser realizadas, seja ela simples ou complexa, possa ser realizada não diretamente nos arquivos de configuração dos serviços relevantes do servidor alvo a ser modificado, mas sim nas classes aplicadas ao host em questão, existentes no host servidor de configurações.

Aliado a isso, pretendo colocar todas definições, classes e configurações específicas sob controle de versão, de forma que, caso qualquer problema ocorra, seja possível ter o recursos de visualizar diferenças entre versões dos arquivos modificados e, se for o caso, ter a possibilidade de fazer um rollback para versões anteriores, conhecidamente funcionais.

Futuramente, quem sabe, seja possível, caso exista solução para isso, juntar cada commit no sistema de controle de versão a um ticket em um sistema de controle de chamados, de forma que cada linha adicionada, removida ou modificada possa ser mapeada para uma requisição ou problema e relacionada a uma solicitação ou necessidade de um cliente.

Implementar mudanças na configuração de um arquivo ou grupo de arquivos, as quais tenham que ser replicadas para todo o parque de servidores, fica extremamente mais simples, uma vez que a mudança pode ser implementada somente uma única vez em uma classe base utilizada pela configuração de todos os servidores. Com isso, tal mudança pode ser automaticamente replicada para todo o parque de servidores sem que seja necessário reaplicá-la manualmente em cada um deles.

No momento, estou utilizando como solução de gerenciamento de configurações a ferramenta Puppet. Ainda não cheguei ao estágio de colocar as mudanças sob o controle de um sistema de controle de versões, mas acredito que, quando o fizer (o que pretendo fazer em breve), optarei por utilizar como solução de controle de versão a ferramenta git.

O interessante da ferramenta Puppet é que a mesma já abstrai por padrão diversos conceitos em classes ou definições prontas, sem que seja necessário escrever tudo a partir do zero. Por exemplo, existem definições já existentes sobre o que é um pacote, quais seus estados, como instalá-los, removê-los e atualizá-los, de forma que somente com um linha se pode indicar que todo um parque de servidores tenha, por padrão, um conjunto de pacotes específicos instalado.

Da mesma forma, também é possível definir que um dado serviço de rede deve ser habilitado, desabilitado, parado ou reiniciado, ou até mesmo que  tal serviço possa ser reiniciado somente caso um arquivo de configuração específico relacionado ao mesmo tenha sido modificado, de forma que novas configurações do serviço em questão entrem em funcionamento imediatamente.

As possibilidades são virtualmente infinitas. Muita coisa já existe pronta, esperando somente para ser reutilizada e criar novas classes, bem como reutilizá-las, é tarefa trivial. Uma grande comunidade de administradores de sistema costumam compartilhar suas “receitas” de classes Puppet, principalmente em serviços de controle de versão distribuídos, como o github, por exemplo.

Vou escrevendo mais a medida que for progredindo com meus estudos, visto que, apesar de ser algo que vai realmente trazer mais qualidade ao meu trabalho, o assunto não se trata de uma prioridade no momento e, por isso, posso lidar com isso somente em meu tempo livre.

Anúncios

5 comentários sobre “Gerenciamento de configurações : meu novo vício

  1. Estudando disciplinas de ITIL, é? 🙂
    Geralmente as pessoas dão pouco importância para Gerência de Configuração e Mudança, as duas são trabalhosas inicialmente mas agiliza muito migrações de sistema e resolução de problemas.

    Espero que continue pq vale à pena.

    • Não, ainda não estou estudando ITIL. Nem mesmo sabia que isso fazia parte de ITIL. Eu tendo a pensar em ITIL como algo chato e burocrático, provavelmente porque as equipes que utilizam a metodologia e me obrigam a seguí-la a praticam de forma errôena.

      Gerenciamento de configuração foi algo pelo que me interessei simplesmente pelo aspecto prático, as vantagens que nos traz quando feito de forma correta e mantido.

      Como você disse, pode ser bastante trabalhoso inicialmente, mas após o tempo inicial de trabalho acima do habitual, a tendência é que o trabalho duro passe a compensar e as coisas passem a ficar mais simples de serem gerenciadas.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s