Artigo
· Jul. 12 6min de leitura

Base de Dados Multivolume: um molho assombroso!

 

IS Comunidade de Desenvolvedores, Eu 👑 você.

Base de Dados Multivolume

Eu obtive essa explicação diretamente da documentação, mas suponhamos que eu tenha perguntado a uma LLM para evitar dizer que a copiei :)

Por defeito, sua base de dados em IRIS usa um único arquivo IRIS.DAT. Você pode configurar sua base de dados para que se expanda automaticamente em volumes adicionais (IRIS-0001.VOL, IRIS-0002.VOL, e assim sucessivamente)  ao alcançar um limite de tamanho específico. Também pode expandir deliberadamente sua base de dados em volumes adicionais. Os volumes adicionais podem residir no mesmo diretório que IRIS.DAT e/ou em um conjunto de diretórios adicionais.

estou passando rapidamente por essa característica e estou a colocando em prova, mas o que quero fazer é estabelecer um limite pequeno e revisar a operação de expansão em múltiplos volumes em um PVC alternativo (diretório). Sem dúvida, as ramificações em respeito a Mirroring, Rendimento (farra!) e Gestão são enormes e o seguinte que necessito é um meio simples para entendê-las, então aqui está. A solução mais direta considera se há um "callback" onde possamos por exemplo portar um novo volume na nuvem antes que a expansão chegue ao tamanho limite.

Ambiente

Tenho um deploy em execução em 2024.1 (Build 263U) com um PVC OpenEBS de 50 GiB para o meu $ISC_DATA_DIRECTORY, o configurei há aproximadamente um mês.

Adicionei um PVC OpenEBS adicional ao meu namespace:

#kind: PersistentVolumeClaim
#apiVersion: v1
#metadata:
#  name: jiva-iris-volume-claim
#spec:
#  storageClassName: openebs-jiva-csi-default
#  accessModes:
#    - ReadWriteOnce
#  resources:
#    requests:
#      storage: 50Gi
#--
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: jiva-iris-volume-claim-mv
spec:
  storageClassName: openebs-jiva-csi-default
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi

O apliquei

sween@run1:~$ kubectl apply -f deezwatts-volume.yaml -n rivian
persistentvolumeclaim/jiva-iris-volume-claim-mv created

O juntei e apliquei no meu deploy através do meu container init:

<snips>
volumes:
   - name: task-pv-storage
        persistentVolumeClaim:
            claimName: jiva-iris-volume-claim
        - name: task-pv-storage-mvd
          persistentVolumeClaim:
            claimName: jiva-iris-volume-claim-mv
<snips>
volumeMounts:
    - name: task-pv-storage
   mountPath: /data
    - name: task-pv-storage-mvd
   mountPath: /data-mvd

Agora estamos configurando outro volume para a expansão multinível para `/data-mvd`.



Configuração

Aqui está a forma rápida na qual o fiz, disfarçando-me de Administrador de Sistemas (Advertência: modo escuro não ativado 🕶️)

Vamos criar a base de dados no volume principal para a instância e revisar as novas propriedades da operação.

Criando a base de dados "mvd" no volume principal, as novidades são as seguintes:

O limite do novo volume é onde planejamos as coisas inicialmente para o gatilho de expansão. Há outros lugares para configurar o lugar onde se criarão os arquivos .DAT de transbordamento. É claro, preste atenção ao texto de ajuda que aparece abaixo do parâmetro de configuração, receberá de imediato uma lição sobre as melhores práticas 💯💯.

Coloque o valor zero para desabilitar a criação automática de novos volumes. Se colocar um valor diferente de zero, quando o IRIS.DAT se expandir para além desse limite, se criará um novo arquivo de volume chamado IRIS-0001.VOL. Quando a expansão fizer crescer esse arquivo para além desse limite, se criará IRIS-0002.VOL, e assim sucessivamente. Para valores diferentes de zero, se recomenda um mínimo d e1 terabyte para evitar um número excessivo de arquivos. Cada base de dados está limitada a 200 volumes.

Agora, monte a nova base de dados. Não poderá configurá-la posteriormente até que esteja montada.

Encontrará na lista de bases de dados a coluna de volumes.

Aqui é onde se configura o lugar alternativo para a base de dados que queremos expandir volumes múltiplos.



Expandir

Com o limite da base de dados sendo bastante pequeno, me confundi um pouco com a ordem das coisas, mas valeu a pena mostrar.

Para gerar um esgotamento de espaço em IRIS.DAT, adicionei um namespace em cima da base de dados:

Uma vez que tive o namespace configurado, configurei o administrador de pacotes ZPM e instalei algumas coisas do openexchange.
 

irisowner@iris-deezwatts-deployment-7b9bfcff8f-dssln:~$ irissession IRIS

Node: iris-deezwatts-deployment-7b9bfcff8f-dssln, Instance: IRIS

USER>zn "MVD"
MVD>zn "%SYS" d ##class(Security.SSLConfigs).Create("z") s r=##class(%Net.HttpRequest).%New(),r.Server="pm.community.intersystems.com",r.SSLConfiguration="z" d r.Get("/packages/zpm/latest/installer"),$system.OBJ.LoadStream(r.HttpResponse.Data,"c")

Load started on 06/04/2024 13:43:08
Loading file /data/IRIS/mgr/Temp/z9mu1CvnPnaGbA.xml as xml
Imported class: %ZPM.Installer
Compiling class %ZPM.Installer
Compiling routine %ZPM.Installer.1
Load finished successfully.

%SYS>zpm

=============================================================================
|| Welcome to the Package Manager Shell (ZPM). version 0.7.1               ||
|| Enter q/quit to exit the shell. Enter ?/help to view available commands ||
|| Current registry https://pm.community.intersystems.com                  ||
=============================================================================
zpm:%SYS>install "zpm-registry"

Agora podemos ver o "molho" de base de dados multivolume na interface de usuário da base de dados:

E também na estrutura de pastas do pod:

irisowner@iris-deezwatts-deployment-7b9bfcff8f-dssln:/data-mvd$ ls -ltr /data-mv*
total 5140
drwxrwxrwx 2 irisowner irisowner   16384 Jun  4 11:56 lost+found
-rw-rw---- 1 irisowner irisowner      20 Jun  4 12:11 iris.dbdir
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:25 IRIS-0022.VOL
irisowner@iris-deezwatts-deployment-7b9bfcff8f-dssln:/data-mvd$ ls -ltr /data/IRIS/mgr/mvd
total 164
drwxrwxrwx 2 irisowner irisowner    4096 Jun  4 11:15 stream
-rw-rw---- 1 irisowner irisowner      63 Jun  4 12:01 iris.lck
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0001.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0002.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0003.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0004.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0005.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0006.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0007.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0008.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0009.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0010.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0012.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0015.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0018.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0016.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0019.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0020.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0017.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0014.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0013.VOL
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 12:11 IRIS-0011.VOL
-rwxrwxrwx 1 irisowner irisowner 5242880 Jun  4 13:08 IRIS.DAT
-rw-rw---- 1 irisowner irisowner 5242880 Jun  4 13:08 IRIS-0021.VOL

Acho que tenho um novo brinquedo para me entreter!


Conclusão

Definitivamente isso foi uma publicação rápida e tenho que voltar ao trabalho. Provavelmente deveria ter convertido em uma discussão em lugar de artigo, mas espero com ansiedade futuras experiências e ações compartilhadas da comunidade com essa característica a medida que seja adotada.

Discussão (0)1
Entre ou crie uma conta para continuar