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
YAMLYAML
O apliquei
sween@run1:~$ kubectl apply -f deezwatts-volume.yaml -n rivian
persistentvolumeclaim/jiva-iris-volume-claim-mv created
BashBash
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
YAMLYAML
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"
ObjectScriptObjectScript
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
BashBash
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.