Artículo
· 3 jul, 2024 Lectura de 6 min

Base de Datos Multivolumen ¡una salsa asombrosa!

 

IS Comunidad de Desarrolladores, I 👑 you.

Base de Datos Multivolumen

He obtenido esta explicación directamente de la documentación, pero supongamos que lo he preguntado a una LLM para evitar decir que la he copiado :)

Por defecto, vuestra base de datos en IRIS utiliza un único archivo IRIS.DAT. Podéis configurar vuestra base de datos para que se expanda automáticamente en volúmenes adicionales (IRIS-0001.VOL, IRIS-0002.VOL, y así sucesivamente) al alcanzar un umbral de tamaño especificado. También podéis expandir deliberadamente vuestra base de datos en volúmenes adicionales. Los volúmenes adicionales pueden residir en el mismo directorio que IRIS.DAT y/o en un conjunto de directorios adicionales.

Estoy pasando rápidamente por esta característica y la estoy poniendo a prueba, pero lo que quiero hacer es establecer un umbral pequeño y revisar la operación de expansión en múltiples volúmenes en un PVC alternativo (directorio). Sin duda, las ramificaciones en cuanto a Mirroring, Rendimiento (¡juerga!) y Gestión son enormes y lo siguiente que necesito es un medio simple para entenderlo, así que aquí está. La solución más directa considera si hay un "callback" donde podamos por ejemplo portar un nuevo volumen en la nube sobre la marcha antes de la expansión por llegar al umbral tamaño.

Entorno

Tengo un despliegue en ejecución en 2024.1 (Build 263U) con un PVC OpenEBS de 50 GiB para mi $ISC_DATA_DIRECTORY, lo configuré hace aproximadamente un mes.

He añadido un PVC OpenEBS adicional a mi 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

Lo he aplicado

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

Lo adjunté y he "parcheado" mi despliegue a través de mi contenedor 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

Ahora estamos configurando otro volumen para la expansión multinivel hacia `/data-mvd`.



Configuración

Aquí está la forma rápida en la que lo he hecho disfrazándome de Administrador de Sistemas (Advertencia: Modo Oscuro no activado 🕶️)

Cread la base de datos en el volumen principal para la instancia y revisad las nuevas propiedades de la operación.

Creando la base de datos "mvd" en el volumen principal, las novedades son las siguientes:

El umbral del nuevo volumen es donde planeáis las cosas inicialmente desencadenar la expansión, hay otros lugares para configurar la ubicación donde se crearán los archivos .DAT de desbordamiento. Por supuesto, prestad atención al texto de ayuda que aparece debajo del parámetro de configuración, recibiréis de inmediato una lección sobre las mejores prácticas 💯💯.

Poned el valor cero para deshabilitar la creación automática de nuevos volúmenes. Si ingresáis un valor distinto de cero, cuando IRIS.DAT se expanda más allá de este umbral, se creará un nuevo archivo de volumen llamado IRIS-0001.VOL. Cuando la expansión haga crecer ese archivo más allá del umbral, se creará IRIS-0002.VOL, y así sucesivamente. Para valores distintos de cero, se recomienda un mínimo de 1 terabyte para evitar un número excesivo de archivos. Cada base de datos está limitada a 200 volúmenes.

Ahora, montad la nueva base de datos. No podréis configurarla posteriormente hasta que esté montada.

Encontraréis en la lista de bases de datos la columna de Volúmenes.

Aquí es donde se configura la ubicación alternativa para la base de datos en la que queremos expandir múltiples volúmenes.



Expandir

Con el umbral de la base de datos siendo bastante pequeño, me confundí un poco con el orden de las cosas, pero valió la pena mostrarlo.

Para generar agotamiento de espacio en IRIS.DAT, añadí un namespace encima de la base de datos:

Una vez que tuve el namespace configurado, configuré el gestor de paquetes ZPM e instalé algunas cosas de 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"

Y ahora le podemos echar un vistazo a la "salsa" de base de datos multivolumen en la interfaz de usuario de la base de datos:

Y también en la estructura de carpetas del 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

¡Creo que tengo un nuevo juguete con el que entretenerme!

Conclusión
Definitivamente esto ha sido una publicación rápida, y tengo que volver al trabajo. Probablemente debería haberla convertido en una discusión en lugar de un artículo, pero espero con ansias futuras experiencias y acciones compartidas de la comunidad con esta característica a medida que se produzca la adopción.

Comentarios (0)1
Inicie sesión o regístrese para continuar