Primeiros passos com o Automatic Storage Management Cluster FileSystem (ACFS) - Parte I

Por Franky Weber,
Postado em Novembro 2016

Revisado por Marcelo Pivovar - Solution Architect

Objetivo: Apresentar os benefícios e motivos para usar o ACFS e configurar inicialmente o ACFS para uso.

O ACFS (Automatic Storage Management Cluster FileSystem) foi introduzido na segunda release do Oracle 11g em 2009 e inicialmente não havia custo de licenciamento, assim como os demais componentes do produto Grid Infrastructure. Na versão 11.2.0.2 ele passou a se chamar CloudFS e junto a isso veio a ter um custo de licenciamento. Em setembro de 2014 a Oracle o fez novamente sem custo e permanece assim até agora. Você não tem um custo de licenciamento para usar qualquer dos componentes do Grid Infrastructure, mas só pode fazê-lo se possuir outro produto licenciado, como o Oracle Database ou o suporte Premier do Oracle Enterprise Linux.

Nas versões mais recentes do Oracle Database Appliance o CloudFS (ACFS) passou a ser o sistema de arquivos padrão.

O ACFS amplia as capacidades de uso do ASM e passa a oferecer um sistema de arquivos multi-plataforma e escalável com a finalidade de armazenar qualquer tipo de arquivo, incluindo arquivos de áudio, vídeo ou imagens. Está de acordo com os padrões POSIX para sistemas operacionais Linux e Unix e também com padrões Windows.

Para o funcionamento do ACFS precisamos configurar o ADVM (AMS Dinamyc Volume Manager, que é responsável por entregar e gerenciar os volumes. Estes volumes podem ser parte de um cluster e também podem ser formatados em outros sistemas de arquivos, além do ACFS, como EXT4, EXT3, etc.

A figura abaixo exemplifica as camadas envolvidas quando temos o ASM com o ADVM e o ACFS configurados:

Para utilizarmos o ACFS precisamos ter configurado o Grid Infrastructure, então não podemos fazer uso do ACFS para armazenar o Voting Disk, OCR e o Grid Infrastructure Home e Diagnostic Dest. Como a figura mostra, o ACFS fica acima do ASM. A partir da versão 12.1.0.1 o ACFS passou a suportar o armazenamento de datafiles de bancos de dados de versões 11.2.0.4 ou acima.

Há alguns recursos avançados que trazem vantagens no uso do ACFS:

  • Snapshots;
  • Criptografia;
  • Segurança;
  • Auditoria;
  • Replicação;
  • HANFS;
  • Tagging.

Alguns destes recursos têm questões especiais no tratamento das licenças de utilização. Veja a tabela abaixo que é apresentada na documentação:

Observe que todos os recursos são livres de licenciamento caso não sejam utilizados para arquivos do banco de dados.

Há vários benefícios ao utilizar o ACFS e estes benefícios se somam também aos do ASM e do ADVM:

  • Não há necessidade de adquirir quaisquer outros gerenciadores de volumes;
  • Por fazer parte de um cluster, ganhamos em disponibilidade;
  • É fácil de gerenciar e facilita a administração;
  • O monitoramento pode ser centralizado;
  • Agiliza o provisionamento e a cópia de bancos de dados;
  • Pode ser apresentado facilmente em todos os nós do cluster, inclusive hub e leaf nodes em Flex Clusters.

Se antes um dos empecilhos seria o consumo de recursos para o uso da instância do ASM, agora a partir da versão 12c isso já não é mais desculpa, pois com a arquitetura Flex ASM não se faz mais necessário uma instância por servidor.

Na figura acima há 5 nodes e somente 3 deles possuem uma instância ASM, os demais fazem acesso utilizando a rede interna do ASM, a qual facilita a comunicação entre as instâncias.

O passo a passo para ter um filesystem ACFS é simples:

  • Instalar o Grid Infrastructure;
  • Configurar o ASM;
  • Criar os diskgroups;
  • Criar os volumes do ADVM;
  • Formatar os volumes como ACFS;
  • Criar os diretórios que serão usados pelos filesystems;
  • Montar os filesystems.

Depois desta breve introdução sobre o ACFS vamos ver como criar os volumes no ADVM para então formatá-los e montar os filesystems.

Inicialmente tenho um novo disco adicionado aos meus servidores Linux srv1 e srv2 (esta operação deve ser realizada a partir de um dos nós, somente), então vou criar uma partição:

[root@srv1 ~]# fdisk /dev/sdf
Device contains neither a valid DOS partition  table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk  identifier 0x7f9518b1.
Changes will remain in memory only, until you  decide to write them.
After that, of course, the previous content  won't be recoverable.
Warning: invalid flag 0x0000 of partition  table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated.  It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-130, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G}  (1-130, default 130):
Using default value 130
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

Vamos verificar se a partição foi criada:

[root@srv1 ~]# fdisk -l /dev/sdf
Disk /dev/sdf: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280  bytes
Sector size (logical/physical): 512 bytes /  512 bytes
I/O size (minimum/optimal): 512 bytes / 512  bytes
Disk identifier: 0x7f9518b1
Device Boot      Start         End      Blocks    Id  System
/dev/sdf1            1         130      1044193+  83  Linux

Feito isso vamos criar o disco no ASM com o nome de ADVMVOL1:

[root@srv1 ~]# oracleasm createdisk ADVMVOL1  /dev/sdf1
Writing disk header: done
Instantiating disk: done

Vamos listar os discos para ver o que temos:

[root@srv1 ~]# oracleasm listdisks
ADVMVOL1
CONFIG1
CONFIG2
CONFIG3
DATA1

Agora trocamos para o usuário oracle para acessar o ASM:

[root@srv1 ~]# su -  oracle
[oracle@srv1 ~]$ .  oraenv
ORACLE_SID = [oracle] ? +ASM1
The Oracle base has been set to  /u01/app/oracle

Acessamos a instância do ASM:

[oracle@srv1 ~]$ sqlplus / as sysasm
SQL*Plus: Release 12.1.0.2.0 Production on  Sat Oct 15 16:10:04 2016
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options
SQL>

Agora vamos listar os discos para então criar o diskgroup:

SQL> set pages 200 lin 200  
SQL> col path for a50  
 SQL> select path, header_status from  v$asm_disk order by 2;
 
 PATH                                       HEADER_STATU
------------------------------------------ ------------
/dev/oracleasm/disks/CONFIG3               MEMBER
/dev/oracleasm/disks/DATA1                 MEMBER
/dev/oracleasm/disks/CONFIG2               MEMBER
/dev/oracleasm/disks/CONFIG1               MEMBER
/dev/oracleasm/disks/ADVMVOL1              PROVISIONED

Em seguida criamos o diskgroup, vou chamá-lo de ADVM:

SQL> create diskgroup ADVM external  redundancy disk '/dev/oracleasm/disks/ADVMVOL1' attribute 'au_size'='1M'; 
 Diskgroup created.

Feito isso agora vamos criar um volume utilizando o ASMCMD, veja que para criar o volume temos que mudar os atributos do diskgroup:

SQL> exit
Disconnected from Oracle Database 12c  Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Real Application Clusters and Automatic  Storage Management options
[oracle@srv1 ~]$ asmcmd -p
ASMCMD [+] > volcreate -G ADVM -s 500M  ADVMVOL1
ORA-15032: not all alterations performed
ORA-15221: ASM operation requires  compatible.asm of 11.2.0.0.0 or higher (DBD ERROR: OCIStmtExecute)

Vamos voltar ao SQL*Plus e alterar alguns atributos do nosso diskgroup para podermos utilizar o ADVM. O Oracle por padrão volta a compatibilidade para uma versão anterior, no nosso caso como queremos ter todos os novos recursos do 12c vamos definir tudo para 12.1.0.2:

ASMCMD [+] > exit  [oracle@srv1 ~]$ sqlplus / as sysasm
SQL*Plus: Release 12.1.0.2.0 Production on  Sat Oct 15 16:47:29 2016
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
 
Connected to:  Oracle Database 12c Enterprise Edition Release  12.1.0.2.0 - 64bit Production  With the Real Application Clusters and  Automatic Storage Management options
SQL> alter diskgroup ADVM set attribute  'compatible.asm'='12.1.0.2';
Diskgroup altered.
SQL> alter diskgroup ADVM set attribute  'compatible.advm'='12.1.0.2';
Diskgroup altered.
SQL> alter diskgroup ADVM set attribute  'compatible.rdbms'='12.1.0.2';
Diskgroup altered.
Agora sim vamos criar nosso volume:
SQL> exit  
Disconnected from Oracle Database 12c  Enterprise Edition Release 12.1.0.2.0 - 64bit Production 
 With the Real Application Clusters and  Automatic Storage Management options  
 [oracle@srv1 ~]$ asmcmd -p 
 ASMCMD [+] > volcreate -G ADVM -s 500M  ADVMVOL1

Vamos ver os volumes criados no diskgroup ADVM:

ASMCMD [+] > volinfo -G ADVM -a
Diskgroup Name: ADVM
Volume Name: ADVMVOL1
Volume Device: /dev/asm/advmvol1-301
State: ENABLED
Size (MB): 512
Resize Unit (MB): 64
Redundancy: UNPROT
Stripe Columns: 8
Stripe Width (K): 1024
Usage:
Mountpath:

Vou voltar ao SQL*Plus para mostrar que por ele também é possível criar volumes:

ASMCMD [+] > exit  [oracle@srv1 ~]$ sqlplus / as sysasm
SQL*Plus: Release 12.1.0.2.0 Production on  Sat Oct 15 17:09:34 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
 
Connected to: 
 Oracle Database 12c Enterprise Edition  Release 12.1.0.2.0 - 64bit Production 
 With the Real Application Clusters and  Automatic Storage Management options
SQL> alter diskgroup ADVM add volume ADVMVOL2  size 100M;
Diskgroup altered.

Pelo próprio SQL*Plus também conseguimos consultar informações dos nossos volumes na view V$ASM_VOLUME:

SQL>select group_number, volume_number,  size_mb, usage, state from v$asm_volume;
GROUP_NUMBER VOLUME_NUMBER SIZE_MB    USAGE                      STATE
------------ ------------- ---------- -------------------------- --------
3            1             512                                   REMOTE
3            2             128                                   REMOTE

Agora pelo sistema operacional vamos conseguir visualizar os volumes criados:

SQL> exit
Disconnected from Oracle Database 12c  Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Real Application Clusters and  Automatic Storage Management options
[oracle@srv1 ~]$ ls -lh /dev/asm/
total 0
brwxrwx--- 1 root oinstall 251, 154113 Oct 15  16:59 advmvol1-301
brwxrwx--- 1 root oinstall 251, 154114 Oct 15  17:35 advmvol2-301

Temos os 2 volumes listados, o Oracle insere um sufixo no nome dos volumes para garantir seus nomes únicos. Observe no primeiro caractere a letra “b” que significa que este arquivo é um block device no sistema operacional.

Agora vamos formatar estes volumes. O primeiro deles vou formatar como ACFS e para isso preciso fazer a operação como root:

[oracle@srv1 ~]$ su -
Password:
[root@srv1 ~]# mkfs  -t acfs /dev/asm/advmvol1-301
mkfs.acfs: version                   = 12.1.0.2.0
mkfs.acfs: on-disk version           = 39.0
mkfs.acfs: volume                    = /dev/asm/advmvol1-301
mkfs.acfs: volume size               = 536870912  ( 512.00 MB )
mkfs.acfs: Format  complete.

O outro volume vou formatar como EXT4 para demonstrar que isso também pode ser feito:

[root@srv1 ~]# mkfs -t ext4  /dev/asm/advmvol2-301
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
32768 inodes, 131072 blocks
6553 blocks (5.00%) reserved for the super  user
First data block=1
Maximum filesystem blocks=67371008
16 block groups
8192 blocks per group, 8192 fragments per  group
2048 inodes per group
Superblock backups stored on blocks:
8193,  24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting  information: done
This filesystem will be automatically checked  every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Observe a diferença na saída dos dois comandos. Para formatar em EXT4 não é usado nenhum utilitário do Oracle e sim do próprio Linux que é quem formata para esse tipo de filesystem. Formatando em qualquer outro filesystem que não seja o ACFS nós perdemos a possibilidade de usar os recursos de snapshot, replicação, criptografia, etc do ACFS nesse volume.

Vamos montar agora esses filesystems em algum diretório:

[root@srv1 ~]# mkdir -p /mnt/advm/fs1
[root@srv1 ~]# mount -t acfs  /dev/asm/advmvol1-301 /mnt/advm/fs1/
[root@srv1 ~]# mkdir -p /mnt/advm/fs2
[root@srv1 ~]# mount -t acfs  /dev/asm/advmvol2-301 /mnt/advm/fs2/
mount.acfs: ACFS-00591: error found in volume  disk header
mount.acfs: ACFS-02037: File system not  created on a Linux system. Cannot  mount.

Veja que quando tentei montar o advmvol2 não foi possível, pois este está formatado para EXT4 e tentei montá-lo como ACFS. Vou montá-lo agora como EXT4:

[root@srv1 ~]# mount  -t ext4 /dev/asm/advmvol2-301 /mnt/advm/fs2/

Agora sim deu certo. Vamos listar os nossos pontos de montagem:

[root@srv1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_srv1-lv_root
50G   21G    27G  44% /
tmpfs                 2.0G  1.2G   759M  62% /dev/shm
/dev/sda1             485M   78M   382M  17% /boot
/dev/mapper/vg_srv1-lv_home
45G  199M    43G   1% /home
/dev/asm/advmvol1-301
512M   40M   473M   8% /mnt/advm/fs1
/dev/asm/advmvol2-301
124M  5.6M   113M   5% /mnt/advm/fs2

E como será que ficou no servidor srv2? Vamos conferir:

[oracle@srv2 ~]$ df  -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_srv1-lv_root
50G   22G    26G  46% /
tmpfs                 2.0G  1.3G   743M  63% /dev/shm
/dev/sda1             485M   78M   382M  17% /boot
/dev/mapper/vg_srv1-lv_home
45G  181M   43G    1% /home

Não há nenhum dos volumes montados. Vamos criar os diretórios e montá-los:

[oracle@srv2 ~]$ su -
Password:
[root@srv2 ~]# mkdir  -p /mnt/advm/fs1
[root@srv2 ~]# mkdir -p /mnt/advm/fs2
[root@srv2 ~]# mount -t acfs  /dev/asm/advmvol1-301 /mnt/advm/fs1/
[root@srv2 ~]# mount -t ext4 /dev/asm/advmvol2-301  /mnt/advm/fs2/
[root@srv2 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_srv1-lv_root
50G   22G    26G  46% /
tmpfs                 2.0G  1.3G   743M  63% /dev/shm
/dev/sda1             485M   78M   382M  17% /boot
/dev/mapper/vg_srv1-lv_home
45G  181M    43G   1% /home
/dev/asm/advmvol1-301
512M   78M   435M  16% /mnt/advm/fs1
/dev/asm/advmvol2-301
124M  5.6M   113M   5% /mnt/advm/fs2

Sucesso. Vamos fazer um teste gerando um arquivo no servidor srv1:

[root@srv1 ~]# touch /mnt/advm/fs1/teste_advm
[root@srv1 ~]# ls -lh /mnt/advm/fs1/
total 64K
drwx------ 2 root root 64K Oct 15 18:09  lost+found
-rw-r--r-- 1 root root   0 Oct 15 18:13 teste_advm

Como o /mnt/advm/fs1 é um filesystem ACFS esse diretório está no cluster e o arquivo criado deve também estar visível a partir do srv2. Vamos conferir:

[root@srv2 ~]# ls -lh /mnt/advm/fs1
total 64K
drwx------ 2 root root 64K Oct 15 18:09  lost+found
-rw-r--r-- 1 root root   0 Oct 15 18:13 teste_advm

Ótimo! Deu certo. O arquivo está aparecendo nos 2 nós do cluster.

Vamos fazer o mesmo teste para o filesystem formatado em EXT4:

[root@srv1 ~]# touch /mnt/advm/fs2/teste_advm2
[root@srv1 ~]# ls -lh /mnt/advm/fs2/
total 12K
drwx------ 2 root root 12K Oct 15 17:40  lost+found
-rw-r--r-- 1 root root   0 Oct 15 18:16 teste_advm2

No srv1 ok, vamos ver listar no srv2 para ver se aparece:

[root@srv2 ~]# ls -lh /mnt/advm/fs2/
ls: cannot access /mnt/advm/fs2/teste_advm2:  Input/output error
total 12K
drwx------ 2 root root 12K Oct 15 17:40  lost+found
-????????? ? ?    ?      ?            ?  teste_advm2

Parece que estragou nosso filesystem, não é? Como é EXT4 ele não está em cluster e deve ser apresentado somente para o servidor o qual será utilizado, então vamos desmontá-lo do srv2:

[root@srv2 ~]# umount /mnt/advm/fs2/
[root@srv2 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_srv1-lv_root
50G   22G    26G  46% /
tmpfs                 2.0G  1.3G   743M  63% /dev/shm
/dev/sda1             485M   78M   382M  17% /boot
/dev/mapper/vg_srv1-lv_home
45G  181M    43G   1% /home
/dev/asm/advmvol1-301
512M   78M   435M  16% /mnt/advm/fs1

Vimos um exemplo bem simples de utilização do ACFS. Assim iniciamos na aprendizagem desse fantástico filesystem. O ACFS pode ser usado também para centralizar os logs do banco de dados e de aplicações e ainda pode ser utilizado como um Oracle Home compartilhado para os binários da instalação do Oracle Database.

Vou trazer em mais alguns artigos o uso dos recursos avançados do ACFS.

O ACFS já é um filesystem bem evoluído e tem muitos recursos que em outros Clustered Filesystems como IBM GPFS, Red Hat GFS ou Veritas CFS teriam custo de licenciamento.

Referências:

Oracle Chatbot
Disconnected