Virtualizaçao – projeto e solucoes
Capítulo 4 Virtualização: da teoria a soluções Alexandre Carissimi Instituto de Informática Universidade Federal do Rio Grande do sul (UFRGS) caixa postal 15064 CEP 91501970 Porto Alegre – RS – Brasil Abstract Virtualization is a technique which allows a computer system to be partitioned on multiples isolated execution environments similar to a single physical computer_ Such environments are called virtual machines (VM). Each VM can be configured on an ind system, applicatlons, It is possible to interc ne-: a physical one.
Some support Iike switches 2 iew nent page own operating twork parameters. s if they were virtual network nd VPN can be also used among VMs. This work presents virtualizations techniques, its implementations issues and its use on IT infrastructures. We discuss the different virtualizations approaches, hardware support, tools, advantages and disadvantages on using virtualization as a business strategy. Resumo Virtualização é a técnica que permite particionar um unico sistema computacional em vários outros denominados de máquinas virtuais.
Cada máquina virtual oferece um ambiente completo muito similar a uma máquina fisica. Com isso, cada máquina virtual pode ter eu próprio sistema operacional, aplicativos e serviços de rede (Internet). É possível ainda interconectar (virtualmente) cada uma dessas máquinas através de interfaces de redes, switches, roteadores e firewalls virtuais, além do uso já bastante difundido de VPN (Virtual Private Networks). ? objetivo deste mini minicurso fornecer os conceitos básicos para compreender no que consiste a virtualização, suas formas de implementação, compromissos e vantagens para uma infra-estrutura de TI. 174 260 Simpósio Brasileiro de Redes de Computadores e Sistemas Distribuídos 4. 1. Introdução A virtualização é um assunto que tem sido atualmente destaque no mundo da tecnologia da informação (TI), apesar de não ser exatamente uma novidade.
A Introdução da linguagem de programação Java trouxe consigo a noção de máquina virtual, mas a origem das máquinas virtuais remonta ao início dos anos 70. Nessa época, era comum que cada computador (mainframe), mesmo de um único fabricante, tivesse seu próprio sistema operacional, e isso se tornou uma das principais razões para o aparecimento das máquinas virtuais: permitir que software legado executasse nos caros mainframes. Na rática, o software não incluía apenas a aplicação, mas sim todo o ambiente operacional sobre o qual ele executava.
Essa abordagem foi usada com sucesso pela IBM que, na linha de mainframes 370 e seus sucessores, oferecia uma máquina virtual, portada para várias de suas plataformas, sobre a qual as aplicações executavam. Dessa forma era possível executar, ou migrar, uma aplicação de uma plataforma para outra desde que houvesse uma versão de máquina virtual para a plataforma alvo. Uma máquina virtual nada mais é que uma camada de software que oferece um ambiente completo muito similar a uma máquina física. Com isso, cada máquina virtual pode ter seu próprio sistema operacional, bibliotecas e aplicativos. ? medida que os computadores começaram a se tornar mais comuns, a quantidade de sistemas operacionais convergiu para algumas poucas famílias ( 62 mais comuns, a quantidade de sistemas operacionais convergiu para algumas poucas famílias (Unix, Macintosh e Microsoft), cada uma com um público-alvo e um conjunto de aplicativos. Nesse contexto, a virtualização deixava de ser um problema importante. No entanto, o aumento do poder computacional dos atuais processadores, a disseminação de sistemas distribuídos a onipresença das redes de computadores causaram, por várias razões, o ressurgimento da virtualização.
Hoje em dia é multo difícil maginar um sistema computacional que não seja conectado em rede. Na prática, essa conectividade faz com que os administradores de sistemas sejam responsáveis por manter um conjunto grande e heterogêneo de servidores, cada um executando uma aplicação diferente, que podem ser acessadas por clientes também heterogêneos- É comum encontrarmos em infra-estruturas de rede uma filosofia “um servidor por serviço” por razões que variam desde suporte a heterogeneidade dos lientes à segurança.
Normalmente, nesse contexto, a carga de processamento de um servidor não explora todo o potencial disponibilizado pelo processador. Há um desperdício de ciclos de processamento e, por conseqüência, de investimento. A virtualização surge como uma opção para contornar esse problema. Inicialmente, a virtualização pode auxiliar a se trabalhar em um ambiente onde haja uma diversidade de plataformas de software (sistemas operacionais) sem ter um aumento no número de plataformas de hardware (máquinas físicas).
Assim, cada aplicação pode executar em uma máquina virtual rópria, possivelmente incluindo suas bibliotecas e seu sistema operacional que, por sua vez, executam em uma plataforma de hardware comum. Em outras palavras, Isso não hardware comum. Em outras palavras, isso não deixar de ser um retorno à situação de executar software herdado em um sistema diferente daquele para o qual ele foi projetado. Assim, a virtualização proporciona um alto grau de portabilidade e de flexibilidade permitindo que várias aplicações, de sistemas operacionais diferentes, executem em um mesmo hardware.
Ao se executar múltiplas instâncias de máquinas Livro Texto dos Mlnicursos 75 virtuais em um mesmo hardware, também se está proporcionando um uso eficiente de seu poder de processamento. Essa situação é comumente denominada de consolidação de servidores e é especialmente interessante em data centers devido a heterogeneidade de plataformas inerente ao próprio negócio. Além disso, em data centers, a diminuição de máquinas ffsicas implica na reduçao de custos de infra-estrutura fisica como espaço, energia elétrica, cabeamento, refrigeração, suporte e manutenção a vários sistemas.
A flexibilidade e a portabilidade das máquinas virtuais também tornam interessante uso da virtualização em desktops. É possível imaginar, por exemplo, o desenvolvimento de produtos de software destinados a vários sistemas operacionais sem ter a necessidade de uma plataforma física para desenvolver e testar cada um deles. Assim, as máquinas virtuais em desktops podem ser usadas para se definir ambientes experimentais sem comprometer o sistema operacional original da máquina, ou ainda, para compor plataformas distribuídas como clusters e grades computacionais.
Nos últimos anos, dada a importância e a gama de aplicações em que a virtualização pode ser empregada, houve um investimento aclço 4 62 aplicações em que a virtualização pode ser empregada, houve um investimento maciço nesta tecnologia por parte de fabricantes de processadores e no desenvolvimento de produtos de software. Os processadores mais recentes da Intel e da AMD contam no seu projeto com mecanismos e soluções de hardware especialmente destinados a dar suporte a virtualização.
As máquinas virtuais, por emularem um ambiente computacional sobre outro impõem algumas restrições de implementação e de desempenho. É aqui que entra o desenvolvimento dos produtos de software para a virtualização. Basicamente, as máquinas irtuais podem ser implementadas como uma aplicação de um sistema operacional e executarem em modo usuário, ou serem uma camada de software posicionada entre o hardware da máquina e o sistema operacional. A primeira opção é o que se denomina de máquina virtual de processo e a segunda de monitor de máquina virtual ou hypervisor [Smith e Nair, 2005].
Ainda, um monitor de máquina virtual pode prover virtualização total ou para-virtualização, dependendo se, respectivamente, o sistema operacional que executa na máquina virtual deve ou não ser adaptado para tal. A partir do momento que se define áquinas virtuais surge quase que imediatamente a necessidade de conectá-las em rede. Todas as máquinas virtuais existentes provêm interfaces de redes virtuais idênticas a suas similares reais, isso é, possuem endereços MAC e podem ser interligadas em equipamentos de Interconexão de redes, como switches e rateadores.
Tipicamente, isso é feito colocando a interface de rede física em modo promíscuo e multiplexando seu uso entre as diferentes interfaces virtuais. Um passo adiante é fornecer toda uma infra-estrutura virtual de r s 2 uma infra-estrutura virtual de rede, criando processos (daemons) ue emulam switches e roteadores, ou incluindo esse tipo de suporte na própria infra-estrutura de virtualização. Com base no que foi mencionado até o momento é possível maginar que a virtualização oferece uma gama bastante grande de aplicações.
O objetivo deste trabalho é apresentar os principais conceitos da virtualização, discutir aspectos relacionados com sua utilização e mostrar as principais ferramentas existentes para sua implantação. para atingir esse objetivo este trabalho é organizado em oito seções incluindo esta introdução. 176 Inicialmente, a seção 4. , fornece uma visão geral no que consiste a virtualização e faz uma revisão de conceitos básicos de sistemas operacionais necessários para uma melhor compreensão da virtualização e de sua Implementação.
A seção 4. 3, por sua vez, apresenta a virtualização sob o ponto de vista de redes de computadores abordando seu uso na implantação de serviços Internet e na definição da infra-estrutura de rede. Atualmente existem várias ferramentas que oferecem suporte a virtualização, tanto soluções proprietárias quanto em software livre, as mais comuns, VMware, Xen e Microsoft, são apresentadas na seção . 4. A seção 4. ilustra o emprego da virtualização através de estudos de casos, para isso foram selecionadas três aplicações significativas: consolidação de servidores, virtualização em desktops e a definição de honeypots. A adoção da virtualização em uma infra-estrutura de TI deve ser feita considerando uma série de aspectos, pois ela a 6 62 virtualização em uma infra-estrutura de TI deve ser feita considerando uma série de aspectos, pois ela afeta sobremaneira como novos serviços podem ser agregados à infra-estrutura de rede, na aquisição de novos equipamentos e muda a ilosofia de administração de sistemas.
O objetivo da seção 4. 6 é discutir alguns desses aspectos de forma a orientar o leitor sobre os principais pontos a serem avaliados quando da análise sobre adotar a virtualização. A seção 4. 7 complementa essa análise abordando aspectos como segurança, gerenciamento e desempenho de máquinas virtuais. por fim, a seção 4. 8, que apresenta a conclusão deste trabalho. 4. 2. Virtualização Qualquer pessoa que atualmente use um computador sabe que existe algo denominado de sistema operacional que, de alguma forma, controla os diversos dispositivos que o compõe.
A definição clássica para sistema operacional, encontrada em vários livros, é a de uma camada de software inserida entre o hardware e as aplicações que executam tarefas para os usuários e cujo objetivo é tornar a utilização do computador, ao mesmo tempo, mais eficiente e conveniente [Silberschatz, 2001]. A utilização mais eficiente busca um maior retorno no investimento feito no hardware. Maior eficiência sign’fica mais trabalho obtido pelo mesmo hardware.
Isso é obtido através da distribuição de seus recursos (espaço em memória principal, processador, espaço m disco, etc) entre diferentes programas. Cada programa tem a ilusão de estar executando sozinho no computador quando na realidade ele está compartilhando com os demais. Uma utilização mais conveniente do computador é obtida, escondendo-se do usuário detalhes de hardware, em especial, dos periféricos de entrad escondendo-se do usuário detalhes de hardware, em especial, dos periféricos de entrada e saída.
Tipicamente, isso é feito através da criação de recursos de mais alto nível oferecido através de interfaces gráficas. Por exemplo, os usuários usam spaço em disco através do conceito de arquivos. Arquivos não existem no hardware. Eles formam um recurso criado a partir do que o hardware oferece. Genericamente, isso é denominado de virtualização de recursos. Um conceito importante em sistemas operacionais é de processo. Um processo é uma abstração que representa um programa em execução.
Cada processo é um ambiente de execução isolado dos demais processos que executa sobre um processador lógico, isto é, um processador virtual, vinculado a si no momento da criação do processo. Cabe ao núcleo do sistema operacional, através de seu escalonador, lternar os diferentes processadores lógicos (virtuais) sobre um processador físico. A ilusão de paralelismo é 177 criada pelo chaveamento rápido entre os processos. Na realidade, os sistemas operacionais atuais possuem duas abstrações para unidade de execução: processos e threads.
Entretanto, continua válida a noção de um processador virtual por unidade de execução. Um estudo desses conceitos extrapola o escopo deste trabalho e o leitor mais interessado pode obter mais detalhes em [Silberschatz, canssimi e Toscani, 2004]. Figura 4. 1 – Princípio básico de máquinas virtuais Em sua essência, a virtualização consiste em estender ou substituir um recurso, ou uma interface, existente por um outro, de modo a imitar um comportamento. Isso é ilustrado genericamente na figura 4. 1 . Por exemplo, sobre o hardware um comportamento. Isso é ilustrado genericamente na figura 4. por exemplo, sobre o hardware do sistema computacional A é posto uma camada de software, o sistema operacional X, que fornece a ilusão de uma máquina virtual B para as aplicações do sistema operacional X. No entanto, uma dessas aplicações pode ser a implementação de uma máquina virtual C que, por sua vez, ferece um ambiente de execução para aplicações escritas para a máquina virtual C. Um exemplo prático disso, é a máquina virtual java (JVM – Java Virtual Machine) que permite que aplicações Java executem um ambiente virtual a JVM implementado para o sistema operacional GNU/Linux ou para o Windows. . 2. 1 Conceitos básicos Para entender o que é uma máquina virtual, é interessante relembrar alguns aspectos fundamentais de sistemas operacionais. um conceito importante em sistemas operacionais é o de processo. Um processo é uma abstração que representa um programa em execução. O processo é epresentado por um espaço de endereçamento lógico composto por regiões de texto, dados, pilha e heap (figura 4. 2). A região de texto é onde residem as instruções do programa a serem executadas. A região de dados mantém todas as variáveis globais, inicializadas ou não.
A pilha serve para armazenar o endereço de retorno de chamadas de função, para a passagem de parâmetros, além de ser também a área onde são armazenadas as variáveis locais de uma função. Por fim, a região de heap que serve para a alocação dinâmica de porções de memória. 178 A execução de um processo é acompanhada por dois egistradores lógicos (virtuais): contador de programa (Program Counter – RC) e o acompanhada por dois registradores lógicos (virtuais): contador de programa (Program Counter – RC) e o apontador de pilha (Stack Pointer – SP).
O contador de programa indica a instrução a ser executada e o apontador de pilha onde devem ser armazenados o endereço de retorno de uma chamada de função, seus parâmetros e suas variáveis locais. Cabe ao sistema operacional, através de seu escalonador e do dispatcher, mapear os registradores lógicos PC e SP para os registradores físicos PC e SP – e únicos – do processador. Isso é o que se denomina de chaveamento de contextol. A alternância entre os diversos PC e SP lógicos, dos diferentes processos, nos registradores PC e SP físicos fornece a ilusão de que vários processos estão executando simultaneamente (figura 4. ). Portanto, um processo nada mais é que um tipo de máquina virtual que executa um único programa. Figura 4. 2 – A abstração de processo em um sistema operacional Outro princípio importante em sistemas operacionais é a sua estruturação em camadas hierárquicas com diferentes níveis de abstrações e interfaces. Um computador é um sistema de omputação relativamente complexo devido à variedade de componentes de hardware e de software que o constitui e a sua interação.
Entretanto, essa complexidade nunca foi um empecilho para o crescimento e a evolução dos computadores em geral devido ao seu projeto de forma hierárquica, com diferentes níveis de abstração e com interfaces bem definidas entre esses níveis. O uso de níveis de abstração e interfaces, tanto para os componentes de software, como para os de hardware, permitiu que cada componente fosse visto como um subsistema independente oferecendo serviços para os demais. Os detalhes in 0 DF 62