OpenVZ: Virtualização para servidores Linux

Prólogo

  • Título: OpenVZ: Soluções OpenSource para virtualização
  • Interface: Português
  • Assunto: /Linux/Virtualização
Esta publicação online não oferece nenhum tipo de suporte ou garantia sobre os softwares e informações aqui demonstrados, a não ser o que foi declarado e testado durante o desenvolvimento do mesmo. Não me responsabilizo por algum eventual problema com o sistema ou o software. Siga por sua própria conta e risco.A divulgação e publicação em outros portais fica permitida desde que eu seja comunicado e também sejam mantidos os créditos do autor, assim como a integridade do artigo.
Introdução ao OpenVZ

O que é o OpenVZ

OpenVZ é uma solução de virtualização em nível de sistema operacional. OpenVZ cria ambientes virtuais isolados, que funcionam como servidores standalone convencionais, porém utilizando um único hardware em comum. Estes ambientes virtuais seguros são conhecidos como VE ou como VPS (virtual private server).

VPS’s podem ser reinicializados independentes uns dos outros. Todos possuem hostname, acesso de root, endereço IP e tudo mais que um servidor pode ter, sendo assim uma solução extremamente confiável e funcional de virtualização.

OpenVZ é a base do sistema comercial chamado Virtuozzo, muito conhecido pelo pessoal que costuma alocar servidores em datacenters no exterior. Estas empresas costumam oferecer o VPS por um preço bem mais acessível que um servidor standalone. 

Baixando os pacotes necessários

Neste artigo estarei partindo do pressuposto que o leitor já conheça o sistema operacional Linux, bem como algumas funções avançadas, tais como:

  • Compilação de programas;
  • Compilação e atualização do kernel;
  • Debug de possíveis erros.

Estarei utilizando o seguinte hardware para teste:

  • P4 3.0;
  • 4Gb Ram;
  • HD 200 Gb SATA.

Sistema operacional: Debian Sarge 3.1.

Apesar de utilizar o Debian, também estarei ensinando passo-a-passo como compilar os componentes necessários, assim ninguém ficá sentindo-se abandonado, ehehe.

Uma coisa meio chata é que o OpenVZ está disponível apenas para o kernel 2.6.8-2, que já é um pouco velho, mas já que é assim, vamos ao kernel.

Primeiro vamos para /usr/src:

# cd /usr/src

Baixando o kernel necessário para nosso projeto:

# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
# tar xjf linux-2.6.8.tar.bz2

Agora precisamos baixar o patch para o OpenVZ:

# wget http://download.openvz.org/kernel/022stab064.1/\
stable/patches/patch-022stab064-combined.gz

Descompactando:

# gzip -d patch-022stab064-combined.gz

Aplicando o patch:

# patch -p1 < patch-022stab064-combined

Assim nosso kernel estará pronto para utilizar o OpenVZ. Para finalizar, vamos baixar o arquivo de configuração para o kernel:

# wget http://download.openvz.org/kernel/022stab064.1/configs/\
stable/kernel-2.6.8-022stab064-i686.config.ovz

Vamos entrar na configuração do kernel.

# make menuconfig

Vá à opção:

“Load an alternate configuration file”

Após isto, basta escolher o arquivo kernel-2.6.8-022stab064-i686.config.ovz.

Pode compilar o kernel agora:

# fakeroot make-kpkg –revision=OpenVZ.2.6.8 kernel_image

Com make-kpkg será gerado um arquivo.deb que só precisa ser instalado.

Nas outras distribuições, compile o kernel da forma que lhe for mais conveniente.

Instalando um kernel com OpenVZ

Para os usuários de Debian podemos acelerar um pouco as coisas utilizando um pacote de kernel pré-compilado e pronto para instalar, o que facilita muito a nossa vida.

Vale lembrar que este kernel não possui suporte ao sistema de arquivos XFS.

# wget http://downloads.howtoforge.com/debian_openvz_howto/\
kernel-image-2.6.8-022stab064-up_OpenVZ.2.6.8_i386.deb

Agora basta instalá-lo:

# dpkg -i /usr/src/kernel-image-2.6.8-022stab064-up_OpenVZ.2.6.8_i386.deb

Reinicie o servidor e pronto.

# shutdown -r now

Instalando o gerenciador OpenVZ

Vamos instalar a suíte de ferramentas que vai nos permitir gerar e gerenciar as máquinas virtuais. Para tanto, adicione o seguinte repositório em seu APT:

deb http://debian.systs.org/ stable openvz
Atualize a base do APT:# apt-get update

Agora basta instalá-los:

# apt-get install vzctl vzquota

Pronto, estamos preparados para criar nossa primeira máquina virtual.

Montando nossa primeira máquina virtual

Para montar nossa primeira máquina virtual vamos utilizar um modelo que o openvz.org fornece. Este modelo é um cache do sistema operacional que vamos utilizar.O OpenVZ fornece a seguinte lista:

  • centos-4-i386-default.tar.gz (signature) 107 Mb
  • centos-4-i386-minimal.tar.gz (signature) 33 Mb
  • centos-4-x86_64-default.tar.gz (signature) 139 Mb
  • centos-4-x86_64-minimal.tar.gz (signature) 60 Mb
  • debian-3.1-i386-minimal.tar.gz (signature) 42 Mb
  • debian-3.1-x86_64-minimal.tar.gz (signature) 41 Mb
  • fedora-core-3-i386-default.tar.gz (signature) 105 Mb
  • fedora-core-3-i386-minimal.tar.gz (signature) 33 Mb
  • fedora-core-4-i386-default.tar.gz (signature) 114 Mb
  • fedora-core-4-i386-minimal.tar.gz (signature) 45 Mb
  • fedora-core-5-i386-default.tar.gz (signature) 125 Mb
  • fedora-core-5-i386-minimal.tar.gz (signature) 44 Mb
  • gentoo-20060317-amd64-stage3.tar.gz (signature) 119 Mb
  • gentoo-20060317-i686-stage3.tar.gz (signature) 106 Mb
  • mandriva-2006-i386-minimal.tar.gz (signature) 28 Mb
  • opensuse-10-i386-default.tar.gz (signature) 90 Mb
  • opensuse-10-x86_64-default.tar.gz (signature) 96 Mb

E por parte da comunidade open source que participa e enviaram os seguintes modelos:

  • slackware-10.2-i386-minimal.tar.gz 26 Mb
  • suse-9.3-x86_64.tar.gz 155 Mb
  • ubuntu-6.06-i386-minimal.tar.gz 60 Mb

Assim, temos máquinas virtuais para todos os gostos de Linux. 😀

Vamos criar nossa primeira máquina utilizando um Debian Sarge 3.1.

Entre no diretório /var/lib/vz/templates/cache e, lá dentro, baixe o arquivo contendo o template do seu sistema favorito:

# wget http://download.openvz.org/template/precreated/debian-3.1-i386-minimal.tar.gz

Após baixada a imagem, vamos dar início a configuração:

Para criar o VPS precisamos dar-lhe um número de ID. Este número de ID deve ser numérico e não pode ser duplicado. Recomendo utilizar a partir de 100.

# vzctl create 101 –ostemplate debian-3.1-i386-minimal –config vps.basic Creating VPS private area: /var/lib/vz/private/101
Performing postcreate actions
VPS private area was created

Pronto, a máquina está criada, agora vamos configurá-la:

Vamos setar nossa máquina virtual para iniciar junto ao sistema caso o mesmo reinicie:

# vzctl set 101 –onboot yes –save
Saved parameters for VPS 101

Agora vamos configurar o hostname:

# vzctl set 101 –hostname vps-new –save
Saved parameters for VPS 101

Próximo passo: configurar um endereço IP:

# vzctl set 101 –ipadd 10.1.1.245 –save
Saved parameters for VPS 101

Iremos agora definir os nameservers que o servidor vai utilizar:

# vzctl set 101 –nameserver 10.1.1.43 –save Saved parameters for VPS 101

No caso, 10.1.1.43 é meu servidor DNS da rede local.

Pronto, as configurações básicas foram colocadas, podemos inicializar pela primeira vez nosso VPS:

# vzctl start 101 Starting VPS …
vzquota : (warning) Quota is running for id 101 already
VPS is mounted
Adding IP address(es): 10.1.1.245
Setting CPU units: 1000
Set hostname: vps-new
File resolv.conf was modified
VPS start in progress…

Pode ver que o servidor virtual já aceita ping:

# ping 10.1.1.245
PING 10.1.1.245 (10.1.1.245) 56(84) bytes of data.
64 bytes from 10.1.1.245: icmp_seq=1 ttl=64 time=0.097 ms
64 bytes from 10.1.1.245: icmp_seq=2 ttl=64 time=0.033 ms
64 bytes from 10.1.1.245: icmp_seq=3 ttl=64 time=0.032 ms

— 10.1.1.245 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.032/0.054/0.097/0.030 ms

Vamos entrar nele e setar a senha de root:

# vzctl enter 101
entered into VPS 101
vps-new:/# uname -a
Linux vps-new 2.6.8-022stab064-smp #1 SMP Mon Aug 21 15:33:09 BRT 2006 i686 GNU/Linux
vps-new:/# uptime
22:17:09 up 1 min, 0 users, load average: 0.00, 0.00, 0.00
vps-new:/# id
uid=0(root) gid=0(root) groups=0(root)
vps-new:/# cat /etc/issue
Debian GNU/Linux 3.1 l

vps-new:/# passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
vps-new:/# ifconfig

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8930 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8930 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1254542 (1.1 MiB)  TX bytes:1254542 (1.1 MiB)

venet0  Link encap:UNSPEC  HWaddr 00-00-FF-00-00-00-00-00-00-00-00-00-00-00-00-00
        inet addr:127.0.0.1  P-t-P:127.0.0.1  Bcast:0.0.0.0  Mask:255.255.255.255
        UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
        RX packets:3 errors:0 dropped:0 overruns:0 frame:0
        TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:0
        RX bytes:252 (252.0 b)  TX bytes:252 (252.0 b)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-FF-FF-FF-FF-00-00-00-00-00-00-00-00-00-00
          inet addr:10.1.1.245  P-t-P:10.1.1.245  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

Como podemos ver, entramos no servidor virtual e ele é exatamente como um server standalone.

Agora que setamos a senha, vamos dar um exit e logar no ssh dele pela primeira vez:

vps-new:/# exit
logout
exited from VPS 101

# ssh -l root 10.1.1.245 The authenticity of host ‘10.1.1.245 (10.1.1.245)’ can’t be established.
RSA key fingerprint is 1a:42:4b:62:3e:cc:8d:84:05:ab:99:01:6a:d0:cb:ba.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘10.1.1.245’ (RSA) to the list of known hosts.
Password:
vps-new:~# 😀 funcionou

Parabéns, agora temos uma máquina virtual Debian inteirinha e pronta para utilizar. Caso você queira rodar um Fedora ou Slackware, o procedimento acima é o mesmo.

Vamos agora verificar alguns comandos e características que podem nos ajudar a gerenciar melhor nossas VPS’s.

Gerenciando a máquina virtual

Vamos verificar, primeiramente, o arquivo de configuração que o OpenVZ gerou contendo as informações do VPS:[root@master /etc/vz]# ls
conf  dists  names  vz.conf
[root@master /etc/vz]# cd conf/
[root@master /etc/vz/conf]# ls
0.conf  101.conf  ve-light.conf-sample  ve-vps.basic.conf-sample

O arquivo 101.conf contém as configurações de nossa VPS:

# Copyright (C) 2000-2006 SWsoft. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#ONBOOT=”yes”

# UBC parameters (in form of barrier:limit)
# Primary parameters
AVNUMPROC=”40:40″
NUMPROC=”65:65″
NUMTCPSOCK=”80:80″
NUMOTHERSOCK=”80:80″
VMGUARPAGES=”6144:2147483647″
# Secondary parameters
KMEMSIZE=”2752512:2936012″
TCPSNDBUF=”319488:524288″
TCPRCVBUF=”319488:524288″
OTHERSOCKBUF=”132096:336896″
DGRAMRCVBUF=”132096:132096″
OOMGUARPAGES=”6144:2147483647″
# Auxiliary parameters
LOCKEDPAGES=”32:32″
SHMPAGES=”8192:8192″
PRIVVMPAGES=”49152:53575″
NUMFILE=”2048:2048″
NUMFLOCK=”100:110″
NUMPTY=”16:16″
NUMSIGINFO=”256:256″
DCACHESIZE=”1048576:1097728″

PHYSPAGES=”0:2147483647″
NUMIPTENT=”128:128″

# Disk quota parameters (in form of softlimit:hardlimit)
DISKSPACE=”1048576:1153434″
DISKINODES=”200000:220000″
QUOTATIME=”0″

# CPU fair sheduler parameter
CPUUNITS=”1000″
VE_ROOT=”/var/lib/vz/root/$VEID”
VE_PRIVATE=”/var/lib/vz/private/$VEID”
OSTEMPLATE=”debian-3.1-i386-minimal”
ORIGIN_SAMPLE=”vps.basic”
HOSTNAME=”vps-new”
IP_ADDRESS=”10.1.1.245″
NAMESERVER=”10.1.1.43″

Como podemos ver, modificando o arquivo de configuração você configura o espaço em disco que o servidor virtual vai ter, número de arquivos, etc.Vamos ver alguns binários interessantes que fazem parte do vzctl:

vzcalc

Gera um cálculo de uso de recursos por id de VPS:

# vzcalc -v 101

Resource     Current(%)  Promised(%)  Max(%)
Low Mem          0.76       1.33       1.33
Total RAM        1.25        n/a        n/a
Mem + Swap       0.83       0.57        n/a
Alloc. Mem       3.03       0.57       4.33
Num. Proc        0.06        n/a       0.07
--------------------------------------------
Memory           3.03       1.33       4.33

vzmemcheck

Gera um cálculo de utilização de recursos de todas as VPS.

Gerei este resultado em um servidor meu com 5 VPS simultâneos:

# vzmemcheck -v

Output values in %
veid        LowMem  LowMem     RAM MemSwap MemSwap   Alloc   Alloc   Alloc
              util  commit    util    util  commit    util  commit   limit
101           0.76    1.33    1.25    0.83    0.57    3.03    0.57    4.33
102           0.05    1.33    0.08    0.05    0.57    0.06    0.57    4.33
103           0.05    1.33    0.08    0.05    0.57    0.06    0.57    4.33
104           0.06    1.33    0.09    0.05    0.57    0.07    0.57    4.33
105           0.06    1.33    0.07    0.04    0.57    0.06    0.57    4.33
-------------------------------------------------------------------------
Summary:      0.99    6.65    1.57    1.03    2.86    3.27    2.86   21.64

vzlist

Mostra todas as VPS em execução:

# vzlist

     VPSID      NPROC STATUS  IP_ADDR         HOSTNAME
       101         63 running 10.1.1.249      vps1.ascenty.com
       102          3 running 10.1.1.248      vps2
       103          3 running 10.1.1.247      -
       104          4 running 10.1.1.246      vps4
       105         10 running 10.1.1.245      vps-new

Para reiniciar um VPS, basta pará-lo e iniciá-lo:

# vzctl stop 101
Stopping VPS …
VPS was stopped
VPS is unmounted

Pronto, nosso VPS foi restartado.

Conclusão

OpenVZ é uma ótima solução para virtualização e pode trazer muitos benefícios para sua infra-estrutura e abrir um novo leque de opções de crescimento de seus servidores.Espero que possam apreciar e utilizar este recurso. Também espero poder voltar a compartilhar artigos com a comunidade, pois o tempo anda meio escasso.

Abraços a todos.

Rolar para cima