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:
- https://docs.oracle.com/cd/E11882_01/server.112/e18951/whatsnew.htm#OSTMG94051
- a/tech/docs/technical-resources/cloudfs-12c-datasheet.pdf
- a/tech/docs/technical-resources/oracle-cloud-file-system.pdf
- a/tech/docs/technical-resources/oracle-acfs-12.2-whitepaper.pdf
- https://docs.oracle.com/database/121/OSTMG/GUID-C91D3A8E-F329-44BE-97B7-8AB41897D8E1.htm#OSTMG31000
- https://docs.oracle.com/database/121/DBLIC/editions.htm#CIHDDJCJ
- a/tech/docs/technical-resources/acfs-wp-18c.pdf
Franky Weber Faust atua como administrador de banco de dados Oracle e MySQL no PagSeguro, tem 26 anos, é graduado em Tecnologia em Bancos de Dados e iniciou sua carreira trabalhando num projeto internacional da Volkswagen com os bancos de dados DB2 da IBM, SQL Server da Microsoft e também com o Oracle e desde o início direcionou seus estudos para as tecnologias Oracle. É especialista em tecnologias de Alta Disponibilidade como RAC, Dataguard e GoldenGate e compartilha seus conhecimentos no blog loredata.com.br. Possui as certificações OCE SQL, OCA 11g, OCP 12c, OCS RAC 12c e OCS Linux 6.
Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.