Montando um bucket do OCI como um filesystem no Oracle DB System

Neste artigo demonstrarei o processo de criação de um filesystem a partir de um bucket do OCI, utilizando o s3fs-fuse. 

O processo será realizado em um DB System com Oracle Linux 7.9. Porém vale destacar que é possível executar em qualquer Sistema Operacional Linux, macOS e FreeBSD.

O primeiro passo será criar um bucket no Object Storage do OCI. Para isso deve-se navegar no menu principal do OCI, Object Storage & Archive Storage e selecionando Buckets. Depois clicar em create bucket.

Neste exemplo será criado um bucket chamado s3fsbucket no compartiment lamim. 


Feita a criação do bucket, devemos clicar nele para acessar as informações do bucket name e namespace, que serão utilizados no arquivo de configuração do s3fsbucket.


Os próximos passos são a criação do usuário, grupo e policy no OCI. Para isso deve-se navegar no menu principal do OCI, Identify & Security, users, clicar em create user, selecionar IAM User e criar o usuário s3fsuser.



Será necessário salvar algumas informações do usuário criado para que sejam utilizadas na configuração do s3fs-fuse. Deve-clicar no usuário s3fsuser, selectionar a opção customer secret keys e generate secret key. Guardar a generated key pois ela nao será exibida novamente.




Após gerar a secret key, é necessário a access key, que também será usada na configuração do s3fs.


Feita a criação do usuário, será criado o grupo s3fsgroup, acessando o menu do OCI, Identify & Security, Groups, create group. Ao final da criação do grupo, adicionar o usuário s3fsuserao grupo s3fsgroup recém criado.





Por último devem ser criada as politica para permitir que o grupo criado possa ter acesso ao bucket do object storage, que criamos anteriormente. Acessando o menu do OCI, Identify & Security,  Policies, create policy e crie a police s3fspolice.

Allow group [group_name] to read buckets in compartment [nome_do_compartment]
Allow group [group_name] to manage objects in compartment [nome_do_compartment]



Agora iremos instalar o s3fs-fuse. O s3fs-fuse é um aplicativo que permite montar buckets da AWS. Como o Object Storage do OCI é compatível com as APIs do S3, podemos utiliza-lo sem problemas e necessidade de configurações adicionais.

Para poder instar o aplicativo via yum, basta editar o arquivo /etc/yum.repos.d/public-yum-ol7.repo procurando por  ol7_developer_EPEL e alterar o parâmetro enabled=0 para 1. Caso o yum não esteja configurado, o artigo a seguir pode ajudar: artigo.

[ol7_developer_EPEL]
name=Oracle Linux $releasever Development Packages ($basearch)
baseurl=https://yum.oracle.com/repo/OracleLinux/OL7/developer_EPEL/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1 
enabled=1       
   

Agora basta executar um yum install s3fs-fuse.

[root@lamimdb /]# yum install s3fs-fuse
Loaded plugins: versionlock
ol7_UEKR5                                                                                                                                        | 3.0 kB  00:00:00
ol7_developer_EPEL                                                                                                                               | 3.6 kB  00:00:00
ol7_latest                                                                                                                                       | 3.6 kB  00:00:00
(1/8): ol7_developer_EPEL/x86_64/group_gz                                                                                                        |  88 kB  00:00:00
(2/8): ol7_UEKR5/x86_64/updateinfo                                                                                                               | 335 kB  00:00:00
(3/8): ol7_latest/x86_64/updateinfo                                                                                                              | 3.5 MB  00:00:00
(4/8): ol7_developer_EPEL/x86_64/primary_db                                                                                                      |  16 MB  00:00:00
(5/8): ol7_developer_EPEL/x86_64/updateinfo                                                                                                      | 819 kB  00:00:00
(6/8): ol7_latest/x86_64/group_gz                                                                                                                | 136 kB  00:00:00
(7/8): ol7_latest/x86_64/primary_db                                                                                                              |  43 MB  00:00:00
(8/8): ol7_UEKR5/x86_64/primary_db                                                                                                               |  61 MB  00:00:01
Excluding 95 updates due to versionlock (use "yum versionlock status" to show them)
Resolving Dependencies
--> Running transaction check
---> Package s3fs-fuse.x86_64 0:1.91-1.el7 will be installed
--> Processing Dependency: fuse >= 2.8.4 for package: s3fs-fuse-1.91-1.el7.x86_64
--> Running transaction check
---> Package fuse.x86_64 0:2.9.4-1.0.9.el7 will be installed
--> Finished Dependency Resolution
--> Finding unneeded leftover dependencies
Found and removing 0 unneeded dependencies

Dependencies Resolved

========================================================================================================================================================================
 Package                              Arch                              Version                                     Repository                                     Size
========================================================================================================================================================================
Installing:
 s3fs-fuse                            x86_64                            1.91-1.el7                                  ol7_developer_EPEL                            257 k
Installing for dependencies:
 fuse                                 x86_64                            2.9.4-1.0.9.el7                             ol7_latest                                     88 k

Transaction Summary
========================================================================================================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 345 k
Installed size: 860 k
Is this ok [y/d/N]: y
Downloading packages:
(1/2): fuse-2.9.4-1.0.9.el7.x86_64.rpm                                                                                                           |  88 kB  00:00:00
(2/2): s3fs-fuse-1.91-1.el7.x86_64.rpm                                                                                                           | 257 kB  00:00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                   1.4 MB/s | 345 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Installing : fuse-2.9.4-1.0.9.el7.x86_64                                                                                                                          1/2
  Installing : s3fs-fuse-1.91-1.el7.x86_64                                                                                                                          2/2
  Verifying  : s3fs-fuse-1.91-1.el7.x86_64                                                                                                                          1/2
  Verifying  : fuse-2.9.4-1.0.9.el7.x86_64                                                                                                                          2/2

Installed:
  s3fs-fuse.x86_64 0:1.91-1.el7

Dependency Installed:
  fuse.x86_64 0:2.9.4-1.0.9.el7

Complete!
[root@lamimdb /]#

Apos a instalação do s3fs-fuse, será necessário ajustar a permissão do arquivo /usr/bin/fusermount e criar um arquivo com as credenciais (Access Key ID e Secret Access Key) do nosso usuário sf3fsuer. Irei um diretório abaixo do / para colocar o arquivo, porém ele pode ser armazenado no local que achar melhor.

Substituir ACCESS_KEY_ID e SECRET_ACCESS_KEY no arquivo criado.
[root@lamimdb ~]#
[root@lamimdb ~]# chmod +x /usr/bin/fusermount
[root@lamimdb ~]#
[root@lamimdb ~]# mkdir /s3fsfuse
[root@lamimdb ~]# cat /s3fsfuse/.s3fsfuse.key
[root@lamimdb ~]# ACCESS_KEY_ID:SECRET_ACCESS_KEY

Ajuste der permissão do arquivo.

[root@lamimdb ~]#
[root@lamimdb ~]# chmod 600 /s3fsfuse/.s3fsfuse.key
[root@lamimdb ~]#
criar o ponto de montagem que será usado no linux. Nesse exemplo estaremos criando como /mnt/ocibucket.
[root@lamimdb ~]# mkdir /mnt/ocibucket
[root@lamimdb ~]#
Para montar o bucket no ponto de montagem criado acima, será necessário passar algumas informações no comando de montagem, como o nome do bucket, diretório de montagem, namespace, região do OCI ( que pode ser consultada no link https://docs.oracle.com/en-us/iaas/Content/General/Concepts/regions.htm).

Sintaxe para montagem da unidade:
s3fs [NOME_DO_BUCKET] [DIRETORIO_MONTAGEM] -o endpoint=[REGIAO_OCI] -o passwd_file=/home/opc/.passwd-s3fs -o url=https://[NAMESPACE].compat.objectstorage.[REGION_IDENTIFIER].oraclecloud.com/ -onomultipart -o use_path_request_style -o allow_other
Montando o filesystem:
[root@lamimdb ~]# df -h /mnt/ocibucket
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/vg00-root  9.6G  2.9G  6.3G  32% /
[root@lamimdb ~]#
[root@lamimdb ~]# s3fs s3fsbucket /mnt/ocibucket -o endpoint=sa-saopaulo-1 -o passwd_file=/s3fsfuse/.s3fsfuse.key -o url=https://gr...srp.compat.objectstorage.sa-saopaulo-1.oraclecloud.com/ -onomultipart -o use_path_request_style -o allow_other
[root@lamimdb ~]#
[root@lamimdb ~]# df -h /mnt/ocibucket
Filesystem      Size  Used Avail Use% Mounted on
s3fs             16E     0   16E   0% /mnt/ocibucket
[root@lamimdb ~]#

Estarei criando um arquivo para validar a criação do mesmo no bucket.

[root@lamimdb ~]#
[root@lamimdb ~]# echo "teste de gravação no bucket do OCI" > /mnt/ocibucket/lamimteste.txt
[root@lamimdb ~]#

Uma copia de um arquivo de 10G para esta unidade montada levou 56 segundos a uma taxa de 38,2 MB/s. Para validar a taxa de transferência foi usado o comando dd para coletar as métricas.

time dd if=/dev/zero of=/mnt/ocibucket/testelamim.img bs=10G count=1 oflag=dsync

O teste acima foi realizado com uma VM.Standard.E4.Flex com 1 OCPU. Posteriormente aumentei para 4 OCPUs e executei novamente o teste e para validar se o shape influenciava na performance com o object storage. Porém o resultado teve muito pouca diferença.

Por fim será configurado o fstab para que a unidade /mnt/ocibucket seja montada automaticamente, adicionando ao arquivo /etc/fstab o comando abaixo:

s3fs [DIRETORIO_MONTAGEM] fuse.s3fs _netdev,allow_other,bucket=[NOME_DO_BUCKET],endpoint=[REGIAO_OCI],use_path_request_style,use_cache=/tmp/cache,passwd_file=[ARQUIVO_DE_CREDENCIAIS],url=https://[NAMESPACE].compat.objectstorage.[REGION_IDENTIFIER].oraclecloud.com/ 0 2


Fonte: Oracle Cloud Infrastructure - How to Mount an ObjectStorage Bucket as Filesystem in Oracle Linux 7 (Doc ID 2577407.1)

Comentários