Arquivo da tag: gfs

Criando um disco de uso compartilhado no VMware usando Raw Device Mapping

Caso você precise utilizar um disco compartilhado (usando os sistemas de arquivos GFS ou OCFS2) no VMware deverá criar discos do tipo Raw Device Mapping. O VMware possui um método de criação de discos compartilhados que utiliza SCSI Bus Sharing que não é confiável quando utilizado com GFS ou OCFS2 e não dever ser usado.

Antes do procedimento, deve ser entendido como o VMware aloca os discos que estarão disponíveis para as máquinas virtuais:

Método 1: Você formata uma partição como VMFS no seu host VMware e cria os arquivos, que serão os discos das máquinas virtuais, dentro desta partição. Talvez o acesso a disco não seja tão rápido quanto o método 2 mas lhe dá muita flexibilidade para mover a máquina virtual para onde quiser.

Método 2: Você entrega para a máquina virtual a partição inteira e ela cria suas partições. Eu não testei, mais acredito que este tipo de alocação seja mais performático que o método 1. A desvantagem é não poder mover facilmente a máquina virtual para outro disco ou storage facilmente.

Este procedimento explica como criar discos compartilhados utilizando o método 2 (Raw Device Mapping).

Crie uma lun no seu storage, conforme procedimento fornecido pelo seu fabricante, e mapeie a mesma para o seu host VMware ESX.

Se tudo correr bem, ela será reconhecida e aparecerá em Configuration, Storage Adapters, vmhbaX (sendo X o número da hba na qual você mapeou a LUN). Na figura abaixo foram criadas 2 luns de 10 GB:

Uma vez que a LUN foi reconhecida pelo VMware, você poderá “entregá-la” para as máquinas virtuais que a utilizarão. Edite a máquina virtual e adicione um novo disco. Escolha o tipo Raw Device Mappings:

Selecione a LUN que será destinada à máquina virtual e clique em Next:

Selecione a opção Store with Virtual Machine e clique em Next:

Na tela seguinte deixe marcada a opção Physical e clique em Next:

Selecione o ID SCSi para o novo disco. Coloque um ID diferente do disco de sistema. Por exemplo: O disco de sistema é ID 0:0 e o /var é 0:1. Então atribuia a este disco o ID 1:0. Isso fará que uma nova controladora seja adicionada a sua máquina virtual. Depois de atribuído o ID, clique em Next para continuar e confirme a criação do disco.

Depois de adicionar o disco, clique na controladora recém-criada e altere a opção SCSI Bus Sharing para Physical.

O procedimento termina aqui. O problema é que o VMware só deixa adicionar a LUN Raw Device em somente uma máquina virtual, talvez para proteger o próprio usuário evitando a adição do disco em mais de uma máquina virtual. Para poder adicionar a LUN em mais de uma máquina virtual precisamos adotar um “artifício técnico”. Remova a sua máquina virtual do inventário (Remove from inventory) e realize o mesmo procedimento na outra máquina virtual. Cuidado para não remover a máquina virtual usando a opção imediatamente abaixo desta!

Depois que você adicionar o disco em todas as máquinas virtuais, você poderá adicionar todas as máquinas novamente no inventário.Para adicionar novamente você precisar dar um Browse datastore no Datastore onde ela se encontra. Para isso vá no seu host, clique na tab Summary e clique com o botão direito no Datastore onde a máquina se encontra e clique em Browse Datastore.

Selecione a pasta da máquina virtual, ache o arquivo .vmx , clique com o botão direito do mouse nele e clique na opção Add to Inventory. A máquina virtual será adicionada novamente à lista de máquinas virtuais do seu host:

IMPORTANTE: Este procedimento não é suportado pela VMware. A única solução de cluster com disco compartilhado é utilizando o Microsoft Cluster. Mesmo assim eu fiz vários testes com Linux e OCFS2 e funcionou perfeitamente. Entretanto eu recomendo que você também realize seus testes antes de implantar qualquer solução usando disco compartilhado em produção.

Sistema de arquivos compartilhado no Linux – Parte 1: GFS

O GFS é um dos sistemas de arquivos compartilhados que testei nos últimos dias. Ele é mantido hoje pela Red Hat e é uma das “features” que impulsionam a venda do RHEL (Red Hat Enterprise Linux). Mas não é necessário comprar o caro Red Hat, é possível fazê-lo funcionar no Centos, que é gratuito.

Para o GFS funcionar, é necessário configurar o Cluster do Linux e confesso que sofri muito para conseguir fazer tudo funcionar. Primeiro porque não achei documentação decente, com exceção das que cito como fontes deste procedimento. Segundo porque não achei os pacotes necessários para fazer o Cluster do Linux e o GFS funcionarem no Centos 5. Sendo assim tive que optar pelo Centos 4.8.

Pré-requisitos

  • Pelo menos 2 servidores com 2 ou mais processadores ou cores. (Os pacotes do cluster e GFS são compilados para kernels SMP). Importante: Este tutorial não funciona em kernel mono-processado.
  • Centos 4.8 x86_64 bits mínimo instalado. Não é necessário instalar nenhum pacote na hora da instalação, instalaremos os pacotes necessários em seguida. Baixe o ISO do CentOS aqui. Note que você vai precisar de uma máquina com instruções 64 bits. Todos os processadores lançados nos últimos 3 anos devem ser compatíveis.
  • Ter a mão os pacotes do Cluster para instalar. Como eu sou um cara legal, criei um arquivo compactado com todos eles que você pode baixar aqui.
  • Ter um volume de acesso compartilhado via SCSI. Isso é possível via Storage (apontando uma LUN para 2 ou mais hosts) ou via VMware (usando este procedimento)
  • Configurar o acesso a rede no Centos e nomear as máquinas. Não esqueça de colocar todos os servidores membros do cluster no arquivo /etc/hosts
  • Deve haver conectividade de rede entre todos os servidores membros do cluster.

Legenda

A maior parte das operações precisam ser executadas em todos os servidores membros do cluster mas algumas somente uma vez. Para facilitar convencionei o seguinte:

  • Operações que devem ser executadas em todos os nós estão escritas em azul.
  • Operações que precisam ser executadas em somente um dos servidores estão escritas em verde.

Procedimento

Instalado o Cluster

Baixe e descompacte os pacotes do Cluster do Linux no diretório /tmp com os comandos:

cd /tmp
wget http://blogdovicente.com/wp-content/uploads/2009/12/clustertar.bz2
tar -xvjf clustertar.bz2

Caso não tenha acesso direto a internet e precise utilizar um servidor proxy, execute este procedimento.

Será criada um diretório chamado cluster. Acesse este diretório e instale todos os pacotes com os comandos:

cd cluster
rpm -hiv * – -nodeps

Agora será necessário instalar alguns pacotes para resolver as dependências dos pacotes recém instalados.

Renomeie o arquivo  /etc/yum.repos.d/CentOS-Base.repo para /etc/yum.repos.d/CentOS-Base.repo.old

Edite o arquivo /etc/yum.repos.d/CentOS-Media.repo e altere a linha enabled=0 para enabled=1

Insira novamente o DVD de instalação do CentOS e monte-o com o comando:

mount /dev/cdrom

Instale as dependências necessárias com o comando:

yum install nss.x86_64 perl-XML-LibXML pexpect fonts-xorg-base gnome-python2-canvas pygtk2-libglade

Aceite todas as confirmações e serão instalados todos os pacotes necessários.

Configurando o Cluster

Será necessário um utilitário gráfico para executar o configurador do cluster. Como não há interface gráfica instalada no servidor, é preciso exportar a tela para algum outro servidor ou estação que tenha o X instalado e rodando. Se você está rodando Windows na sua estação de trabalho, siga este procedimento. Se você está rodando o Linux na sua estação, é possível exportar a tela do configurador do Cluster para ela usando executando os seguintes passos:

No servidor, execute o comando:

export DISPLAY=ip_da_estacao_linux:0.0

Na estação, execute o comando:

xhost +

Com isso qualquer janela que for iniciado no servidor será mostrada na estação.

Execute no servidor o comando:

system-config-cluster

Será iniciada a configuração do cluster. Na primeira vez vai dar um erro, mas na segunda execução será exibida a tela abaixo.

1 ) Clique no botão Create New Configuration

cluster-create-new-configuration

2 ) Dê um nome para o cluster e clique em OK. Este nome será usado a frente na formatação do volume GFS:

new-cluster-configuration

3 ) Na tela seguinte clique em Fence Devices, Add a Fence Device

cluster-configuration

4 ) Na tela seguinte, selecione Manual Fencing, dê um nome a ele e clique em OK

add-fence-device

5 ) Clique em Cluster Nodes e em Add a Cluster Node

cluster-configuration-add-node

6 ) Na tela seguinte, coloque o nome do servidor e preencha 1 no campo Quorum Votes e clique em OK

node-properties

7 ) Clique no host recém adicionado e clique no botão Manage Fencing For This Node

cluster-configuration-manage-fencing

8 ) Na tela seguinte clique no host e no botão Add a New Fence Level

fence-configuration1

9 ) Clique em Fence-Level-1 e em Add New Fence to this Level. Na tela seguinte, selecione o Fence device que você criou anteriormente e clique em OK e depois em Close.

fence-level-1-properties

Repita os passos de 5 a 9 para todos os outros nós do Cluster. Para salvar clique em File, Save e OK para salvar a configuração no arquivo /etc/cluster/cluster.conf e clique em OK para concluir.

Clique em File, Quit para sair da configuração do cluster.

Copie o arquivo /etc/cluster/cluster.conf para todos os nós do cluster. Pode ser usado sftp ou scp.

Acertando os módulos do kernel

Execute os comandos abaixo para copiar os módulos do kernel para os locais corretos:

mkdir /lib/modules/2.6.9-89.ELsmp/kernel/cluster
cp -Rp /lib/modules/2.6.9-89.0.11.ELsmp/kernel/fs/gfs_locking/ /lib/modules/2.6.9-89.ELsmp/kernel/fs/
cp -Rp /lib/modules/2.6.9-89.0.11.ELsmp/kernel/fs/gfs/ /lib/modules/2.6.9-89.ELsmp/kernel/fs/
cp -Rp /lib/modules/2.6.9-89.0.11.ELsmp/kernel/cluster/ /lib/modules/2.6.9-89.ELsmp/kernel/
depmod

Alterando as opções de lock e criando o LVM

A criação do LVM pode ser feita da mesma maneira que criaria para um volume normal. O procedimento abaixo se refere a criação de um volume usando somente um disco. Partido do princípio que o disco que será usado pelo GFS é o dispositivo /dev/sdb, execute os passos abaixo:

pvcreate /dev/sdb
vgcreate vg0 /dev/sdb
vgchange -a y
lvcreate -L 1000MB -n lv0 vg0

O comando anterior contempla um disco de 1 GB. Altere este comando caso seu disco tenha tamanho diferente.

Altere no arquivo /etc/lvm/lvm.conf as linhas abaixo:

locking_type = 2
locking_library = “/usr/lib/liblvm2clusterlock.so”

Iniciando os serviços necessários para o Cluster

Os serviços do cluster deverão ser iniciados na ordem abaixo em todos os nós do cluster para que seja possível montar volumes GFS:

service ccsd start
service cman start

Depois disso os seguintes serviços devem ser iniciados em todos os nós do cluster:

service fenced start
service clvmd start
service gfs start

Criando e montando o volume GFS

Execute os comandos abaixo para formatar e montar o disco como GFS:

gfs_mkfs -p lock_dlm -t nome_do_cluster:nome_desejado_para_o_volume -j numero_de_nos_do_cluster /dev/vg0/lv0
mkdir /mnt/gfs
mount -t gfs /dev/vg0/lv0 /mnt/gfs

Tornando a montagem automática no boot

Para isso você precisará editar o arquivo /etc/fstab. Insira no final dele a seguinte linha:

/dev/vg0/lv0     /mnt/gfs     gfs     defaults,noquota,noatime,nodiratime     0 0

Conclusão

Ter um disco compartilhado é muito bom para muitas aplicações e pode aumentar muito a performance em comparação a um acesso feito via NFS. O GFS funciona bem mas eu tive alguns problemas, como algumas máquinas sairem fora do cluster, quando executei uma aplicação que faz acesso massivo de disco e usava muita CPU. Eu não consegui chegar a conclusão de qual foi a causa. Como o lock entre os servidores é feito via rede, pode ter sido uma perda de comunicação ou mesmo o acesso a disco que não foi rápido o suficiente. Antes de implantar em ambiente de produção, sugiro fortemente que você faça testes e avalie a solucão para seu ambiente.

Caso tenha algum problema, primeiro veja se você não pulou algum passo. Tutoriais como este são bem extensos e é fácil de esquecer alguma coisa. Se este não for seu caso ou tiver alguma sugestão para deixar o texto mais claro, deixe um comentário.

Fontes

Red Hat Documentation: Oracle RAC GFS

GFS Wiki

Red Hat Knowledgebase: How do you set up GFS on Red Hat Enterprise Linux 4 Update 2 or later?

Pacotes do Red Hat Cluster para o Centos 4.X

Red Hat GFS 6.1: Administrator’s Guide

Red Hat Knowledgebase: How can I improve the performance of my GFS filesystem or prevent processes from hanging while accessing it?

Criando um disco de uso compartilhado no VMware

No VMware, por padrão, é possível utilizar um disco para somente uma máquina virtual de cada vez. Você pode compartilhar o disco desde que somente uma das máquinas virtuais esteja ligada por vez.

Se você precisa usar o um sistema de arquivos compartilhado como o GFS ou OCFS2 no Linux ou deixar o disco disponível para escrita em uma máquina e as outras usando o disco somente para leitura vai precisar fazer algumas alterações na configuração da controladora SCSI.

Atualização em 9/2/2010: Apesar de ser funcional, este procedimento não se aplica a sistemas de arquivos em que mais de um nó precisa ler e escrever no disco. Nos meus testes com GFS e OCFS2, havia momentos em que um ou mais hosts perdiam acesso ao disco sem explicação. A maneira melhor de habilitar o acesso de várias máquinas virtuais ao mesmo disco físico é usar Raw Device Mapping ou RDM.

Este tutorial ainda é útil para montagem de discos para escrita somente em um host e leitura nos demais.

Como fazer:

1) Acesse a console do VMware ESX ou ESXi, edite a máquina virtual e adicione um novo disco.

2) Ao escolher o ID SCSI do disco, escolha um ID em uma controladora diferente do disco existente. Exemplo, se seu disco de sistema está usando o ID 0:0, escolha para o novo disco o ID 1:0. Isso fará que o VMware adicione outra controladora SCSI.

add-new-scsi-disk

3) Após concluir o assistente, você notará em negrito os dispositivos que serão adicionados. Clique na controladora SCSI e altere a opção SCSI Bus Sharing para Physical e clique em OK para concluir.

change-controller-settings

Pronto! Agora você poderá adicionar este disco em outra máquina virtual e as duas poderão acessar o disco.

IMPORTANTE: Você não pode fazer isso com Windows para as duas máquinas enxergarem o disco para escrita em uma partição NTFS, por exemplo. Se o Windows permitir o acesso de duas máquinas ao mesmo tempo, a partição será corrompida e vai haver perda de dados. Mesmo no Linux, até pode atribuir uma partição EXT3, por exemplo, para dois ou mais servidores, mas somente 1 deles poderá montar o disco para escrita. Os dois únicos sistemas de arquivos que suportam este recurso que testei são o GFS e OCFS2 no Linux. Logo, logo colocarei tutoriais de como implementar os dois aqui no blog.

Sistemas de arquivos compartilhados

Este talvez seja um dos artigos mais nerds que eu já escrevi no blog, mas vai servir de introdução para outros dois que vou escrever em breve.

Imagine que você tenha um computador que acesse determinados arquivos. Além dele, outros 2 precisam ler e gravar no mesmo disco. Se você pensar no mundo Windows, você precisará atribuir o disco com estes arquivos em um computador e criar um compartilhamentos para os outros dois acessarem. Se for no mundo Unix, onde tudo funciona bem melhor, você exportaria o disco via NFS e os dois acessariam usando este protocolo:

acesso-nfs-smb

Quais são os problemas da solução acima? Eu lembro destes:

1) Caso o computador que tem o disco travar, os outros dois param de acessar o disco.

2) O computador que “administra” o disco terá uma sobrecarga por “servir” os dados para os outros computadores. Quanto maior a quantidade de leituras e alterações, maior a sobrecarga.

3) O computador que “administra” o disco terá uma alta velocidade de acesso ao disco, mas os outros dois computadores estarão limitados pela rede, que tem uma velocidade e latência (tempo de espera entre a solicitação e entrega do dado) maiores.

A solução ideal é que todos os computadores acesse o disco diretamente:

acesso-direto-disco

O problema desta solução é que o sistema de arquivos precisa estar preparado para isso. Se você dar acesso a três servidores Windows ou Linux em uma partição e todos estiverem lendo e escrevendo, eu garanto a vocês que o sistema de arquivos estará corrompido em pouco tempo.

Mas existem alguns sistemas de arquivos que são preparados para isso. Na Wikipedia em inglês há uma lista deles. Nos últimos dias eu fiz testes com dois deles:

GFS (Global File System) – Criado originalmente para o sistema operacional IRIX em 1997, foi portado para o Linux em 1998.  Em 2001 o GFS era de propriedade da Sistina Software que fechou o código. Em 2003 a Red Hat comprou a Sistina Software e liberou novamente o código sob licença GPL.

OCFS2 (Oracle Cluster File System) – Criado pela Oracle e usa a licença GPL. Integrada ao kernel do Linux a partir da versão 2.6.16 e marcado como estável a partir do kernel 2.6.19.

Os dois sistemas de arquivos tem vantagens por prover redundância e performance para aplicações que funcionam em cluster, como banco de dados e aplicações que precisam de sistemas de arquivos compartilhados.

Nos próximos dias, estarei publicando tutoriais de como implementar os dois sistemas de arquivos no Linux, aguardem.