53
FLISOL – DF - 2011 Assuma o controle do seu parque virtualizado Palestrantes: Guto Carvalho @gutocarvalho Daniel Sobral @dcsobral

Assuma o controle do seu parque virtualizado

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

FLISOL – DF - 2011

Assuma o controle do seu parque virtualizado

Palestrantes:Guto Carvalho @gutocarvalho

Daniel Sobral @dcsobral

Já teve a sensação de estar perdendo o controle do seu

ambiente virtualizado?

Foto tirada do site sysadminday.com por Frank Schicksal

Necessidades do cliente

● Isolamento de ambientes e serviços em vm's● Facilidade de migração inter-sites● Maior estabilidade e disponibilidade dos

serviços● Curta curva de aprendizagem

Desafios

● Centralização da administração e configuração● Padronização do ambiente● Rápida implantação e implementação● Conversão de infraestrutura● Manutenção descomplicada

Decisões Importantes

● Utilização de tecnologia livre ou opensource● Internalizar suporte● Utilização coerente de recursos e orçamento

Caso de Estudo

● Empresa Brasil de Comunicação● Cerca de 160 máquinas virtuais rodando em

um cluster com 15 nós● Gestão e distribuição de configurações● Administração compartilhada de 4 devops

Especialistas Envolvidos

Equipe TecnisysJosé Augusto Carvalho @gutocarvalho

Daniel Sobral @dcsobralJefferson Santos @jalexandre0

Equipe EBCCoordenadores

Tadeu Ibns N. Rocha – [email protected]é Eufrásio @coredump

SysAdminsNieson Santos – [email protected]

VIRTUALIZAÇÃO

Terminologia

Virtualization [. . . ] a hypervisor, also called virtual machine monitor, allows

multiple operating systems to run concurrently on a host computer. (Wikipedia)

Cluster Node ≡ physical machine Instance ≃ machine ≃ virtual machine

Nossa Escolha: GANETI

● Produto criado pelo Google

● Case interessante de uso interno no Google

● Facilidade de implementação

● Utilização de hypervisors livres XEN e KVM

● Funciona em modo Cluster

● Permite migração de máquinas entre nós

● Administração simplificada via CLI ou WEB (frontends)

● Boa documentação, desenvolvimento ativo e comunidade crescente

GANETI: Overview

● Gerenciador Open Source para clusters virtualizados

● Combina virtualização e replicação de disco em tempo real

● Oferece uma aplicação de alta disponibilidade promovendo uma melhor utilização dos recursos do seu datacenter.

● Usa Python, OpenSSL, Xen, KVM, LVM, DRBD Desenvolvida pelo Google, disponibilizado em Agosto de 2007. É utilizado pelo Google internamente. Foi liberado com a licença GPLv2

● Site do projeto: http://code.google.com/p/ganeti/

GANETI: Hypervisors

XEN

Xxxx

Xxxx

Xxx

KVM

Xxx

Xx

Xx

Xx

GANETI: Estrutura Lógica

● Cluster● Nó mestre● Nós● Instâncias

GANETI: Organização Lógica do Cluster

GANETI: Exemplos de melhorias

● Na infraestrutura XEN a administração é descentralizada, precisávamos entrar em cada máquina para fazer manutenções nas VM. Hoje fazemos isto de forma centralizada no master node.

● Informações descentralizadas: antes para criar máquinas precisávamos entrar em cada servidor XEN para avaliar os recursos disponíveis e escolher um servidor ideal para instalar o serviço. Com o ganeti temos um visão completa de todo o cluster no nó master.

GANETI: Listando nós

GANETI: Listando instâncias

GANETI: Listando info de VM

GANETI: Movendo VM entre nós

GANETI: Operações

1. Criando um cluster# gnt-cluster init gnt-node01.empresa

2. Adicionando nó ao cluster# gnt-instance add node02# gnt-instance add node03

3. Criando máquina virtual# gnt-instance add -n node1 -t plain -H memory=1G -s 10G -o debian apache01

GANETI: Operações

4. desligando

# gnt-instance shutdown maquina

5. ligando

# gnt-instance startup maquina

6. reiniciando

# gnt-instance reboot maquina

7. acessando console de maquinas em qualquer lugar do cluster a partir do nó mestre

# gnt-instance console maquina

8. removendo

# gnt-instance remove maquina

GANETI: Operações

Movendo máquinas entre nós# gnt-instance move -n gnt-node05 maquina

Ativando discos para montagem# gnt-instance activate-disks maquina# ssh gnt-nodeXX# kpartx -av /dev/mapper/xenvg-xxx.disk0 # mount /dev/xenvg/xxxx /mnt/disco

GANETI: Operações

Adicionando mais memoria

# gnt-instance modify -B memory=4G maquina

Adicionando mais processadores

# gnt-instance modify -B vcpus=3 maquina

Adicionando mais placas de rede

# gnt-instance modify -B --net add:ip=192.168.50.173 maquina

Adicionando disco# gnt-instance gnt-instance modify --disk add:size=1g smtp02

GANETI: Hooks

● Padronização de configurações do OS durante a instalação

● Instalação dos softwares básicos para administração das máquinas

GANETI: Ganhos

Cliente● Uso coerente dos recursos de hardware/rede● Investimento em conhecimento da equipe● Investimento de SW direcionado para HW

Equipe● Facilidade na criação e adm. de máquinas● Movimentação de VM's entre nós e SITES● Replicação DRDB = Alta disponibilidade

GANETI: Problemas

● Uso de Múltiplos volumes – storage area network (SAN)

● SNAPSHOTs● Clonagem de máquinas● DRDB e desempenho● I/O● Múltiplas Redes

GANETI: Front-End

GANETI: Web Manager

GANETI: Web Manager

GANETI: Web Manager

GANETI: Web Manager

GANETI: Comparações

Máquina Física – Debian Lenny

● Tempo de instalação de maquina física – 40 minutos sem atualizações (CD)

● Tempo de configuração/update* – padrão - de maquina física – 40 minutos

Máquina Virtual – Debian Lenny

● Tempo de criação de maquina virtual - 2 minutos

● Tempo de configuração/update* usando Hooks – 2 a 4 minutos

* Levando em conta configurações da rede, locale, ntpdate, backup, monitoramento, criação de usuários, instalação de pacotes básicos do sysadmin.

GANETI: Comparações

Máquina Física – Debian Lenny

● Tempo de instalação de maquina física – 40 minutos sem atualizações (CD)

● Tempo de configuração/update* – padrão - de maquina física – 40 minutos

Máquina Virtual – Debian Lenny

● Tempo de criação de maquina virtual - 2 minutos

● Tempo de configuração/update* usando Hooks – 2 a 4 minutos

* Levando em conta configurações da rede, locale, ntpdate, backup, criação de usuários, instalação de pacotes básicos do sysadmin.

GANETI: Dicas

● Atenção com DNS, dependência grande para criar a VMs

● Uso e abuse de Activate Disks para montar e `clonar` máquinas

● GrowDisk e Parted● Nunca dê CTRL+C● Usar - - submit● Nunca, jamais, de forma alguma, dê um KILL

em um processo de MOVE ou CREATE.

GANETI: Limitações dos Hooks

Sabendo que os hooks são podem ser utilizados instalação das VMS, como ir além dos hooks...?

Gestão de Configuração

Gestão de Configuração

● Facilitar o trabalho de administração de servidores● Padronizar as configurações utilizadas● Possibilitar auditoria de configuração● Centralizar a administração● Elementos comumente gerenciados

● Usuários● Grupos● Arquivos● pacotes instalados● execução periódica de scripts

Nossa Escolha

● Puppet (2005)● Ruby, GPL● AIX, BSD, HP-UX,

Linux, MaxOS, Solaris, Windows(*)

● Wikipedia:● Configuration_management

● Comparison_of_open_source_configuration_management_software

PUPPET: Funcionamento

● Autônomo● Cliente/Servidor

● HTTPS● Certificado de Cliente● Pull por default● Push opcional

● Cliente obtém plugins● Cliente envia fatos● Servidor produz

catálogo● Cliente processa

catálogo● Cliente envia relatório

Puppet: Fácil AprendizadoSintaxe Declarativa

cl ass r sysl og {

package { ' r sysl og': ensur e => pr esent, } ser vi ce { ' r sysl og': hasr est ar t => t r ue, } f i l e { ' / et c/ r sysl og. d/ l ogser ver 01. conf ' : ensur e => pr esent, sour ce => ' puppet : / / / f i l es/ r sysl og/ r sysl og. d/ l ogser ver 01. conf ', not i f y => Ser vi ce[ ' r sysl og' ], } }

Puppet: Fácil AprendizadoIndependente de Plataforma

cl ass edi t or { $vi m = $oper at i ngsyst em ? { ' RedHat ' => ' v i m- enhanced', ' Cent OS' => ' v i m- enhanced', ' Fedor a' => ' v i m- enhanced', def aul t => ' v i m', } package { " $vi m": ensur e => pr esent, al i as => ' v i m', } }node “ host 01. domai n. com. br ” { i ncl ude edi t or}node “ host 02. domai n. com. br ” { i ncl ude edi t or}

Puppet: Auto documentado

cl ass l i nux- ser ver { # I ncl ude cl asses common t o al l l i nux ser ver s i ncl ude l ocal mt a i ncl ude nt pdat e i ncl ude puppet : : conf i ncl ude ssh: : ser ver i ncl ude sudoer s i ncl ude user s i ncl ude ut i l s i ncl ude zabbi x- agent i ncl ude edi t or i ncl ude snmpd i ncl ude r sys l og

#. . .}

Puppet: Controle de Versão e Rollback

#gi t l ogcommi t 263b2239ccf f 746f 345c448d723f 4f f 52d3f 8c0f Aut hor : Dani el Sobr al <dcsobr al @gmai l . com> Dat e: Thu Mar 31 22: 11: 16 2011 - 0300 Excl ui a bol et i ns das máqui nas conf i gur adas como mt a sat él i t e. Li mi t a a conf i gur ação do exi m4 às máqui nas Ubunt u e Debi an. commi t 8f bed5a4b8095b7560941c598454d47f 3b3dec7e Aut hor : Dani el Sobr al <dcsobr al @gmai l . com> Dat e: Thu Mar 31 22: 08: 22 2011 - 0300 Cl asse debi an- common adapt ada par a l i dar com Ubunt u. Basi cament e,f or ça l i dar com ser vi ços no padr ão Debi an ( Ubunt u supor t a padr ão Fr eeBSD t ambém) , e não mexe no sour ce l i st ( por hor a). Si st emas Ubunt u t ambém i ncl ui r ão a c l asse debi an- ser ver. Ver i f i ca se o ker nel é xen, e, se f or , i nc l ui o l i nux modul es cor r espondent e.

Puppet: Altamente Flexível

node " el ei coesconcur vm01" { i ncl ude l i nux- ser ver j boss: : app { ' consel ho': conf => ' def aul t ', pgdb => ' consel hopr od' , # Al t er a pg_hba. conf } }

node “ el ei coesconcur vmbd01” { i ncl ude l i nux- ser ver pgdb { ' consel hopr od' : # Ger a XML par a dat asour ce passwor d => ' * * * * * * * * ', pgver si on => ' 8. 4', } }

Puppet: Expansível

● Puppet● Classes● Definições

● Templates (ERB)● Ruby

● Fatos● Funções● Tipos● Provedores

def i ne pgcl i ent ( $ensur e = pr esent ,$i p = $i paddr ess) { @@l i ne { " pgcl i ent ${ i p} ": ensur e => $ensur e, l i ne => " ${ i p} / 32\ n", r equi r e => Fi l e[ ' c l i ent i p' ], t ag => " pgcl i ent _${ t i t l e} " , } }

# augeasver si on. r b Fact er . add( " augeasver si on" ) do set code do begi n r equi r e ' augeas' aug = Augeas: : open( ' ' , ' ' ,Augeas: : NO_LOAD & Augeas: : NO_STDI NC) aug. get ( ' / augeas/ ver s i on' ) | |ni l #. . .

Puppet: Problemas

● Documentação Deficiente● Mensagens de erro ruins● Servidor default nao segura mais de 20

máquinas● Não distribui arquivos grandes● Grande investimento de tempo para chegar ao

nível de expert

Frontends – Puppet Dashboard

Frontends – The Foreman

● Visualiza● Inventário (fatos)● Relatório● Configurações

● Provisiona servidores● Kickstart● Jumpstart● Preseed

PUPPET + GANETI

Onde podemos chegar com essa combinação?

Comparação Final

Máquina Física – Debian Lenny + LAMP

● Tempo de instalação de maquina física – 40 minutos sem atualizações (CD)

● Tempo de configuração/update OS* – padrão - de maquina física – 40 minutos

● Tempo de instalação e configuração Apache2, PHP5, MYSQL – 2 horas**

Máquina Virtual – Debian Lenny

●Tempo de criação de maquina virtual - 2 minutos

●Tempo de configuração/update OS* usando Hooks – 2 a 4 minutos

●Tempo de instação e configuração Apache2, PHP5, MYSQL – 2 a 4 minutos**

* Levando em conta configurações da rede, locale, ntpdate, backup, monitoração, criação de usuários, instalação de pacotes básicos do sysadmin.** Levando em conta hardening, tuning os, apache2, php5, mysql, considerando ter as classes prontas

Conclusão

O Ganeti é uma alternativa viável, moderna estável, largamente utilizado no google, em franco desenvolvimento com um comunidade crescente e ativa.

O Puppet é uma ferramenta essencial para gerenciar e distribuir configurações, ele é um batalhão de sysadmins trabalhando para você.

Informações dos projetos

Site/BlogHttp://ww.puppetlabs.comHttp://www.puppetlabs.com

Twitter@puppetlabs

Http://www.github.com/puppelabs

Google GroupsPuppet-camp, puppet-users, puppet-dev

IRCIrc.freenode.org #puppet

Site/Bloghttp://code.google.com/p/ganeti/

Docshttp://docs.ganeti.org

Twitter (manager web do ganeti)@ganetiwebmgr

Google Groupsganeti, ganeti-develganeti-webmgr

IRCIrc.freenode.org #ganeti

Contato, Dúvidas, Perguntas

Guto Carvalho:[email protected]

@gutocarvalho

http://gutocarvalho.net/dokuwiki

Http://github.com/dcsobral

Daniel [email protected]

@dcsobral

http://dcsobral.blogspot.com

Http://github.com/dcsobral

Palestras de hoje disponíveis em nossos sites.

Palestra sob licença Creative Commons - Atribuição