Skip to main content
NetApp artificial intelligence solutions
Se proporciona el idioma español mediante traducción automática para su comodidad. En caso de alguna inconsistencia, el inglés precede al español.

Protección de bases de datos vectoriales mediante SnapCenter

En esta sección se describe cómo proporcionar protección de datos para la base de datos vectorial mediante NetApp SnapCenter.

Protección de bases de datos vectoriales mediante NetApp SnapCenter.

Por ejemplo, en la industria de producción cinematográfica, los clientes a menudo poseen datos incrustados importantes, como archivos de vídeo y audio. La pérdida de estos datos, debido a problemas como fallas en el disco duro, puede tener un impacto significativo en sus operaciones, poniendo potencialmente en peligro empresas multimillonarias. Hemos encontrado casos en los que se perdió contenido invaluable, lo que causó interrupciones sustanciales y pérdidas financieras. Por lo tanto, garantizar la seguridad e integridad de estos datos esenciales es de suma importancia en esta industria. En esta sección, profundizamos en cómo SnapCenter protege los datos de la base de datos vectorial y los datos de Milvus que residen en ONTAP. Para este ejemplo, utilizamos un depósito NAS (milvusdbvol1) derivado de un volumen NFS ONTAP (vol1) para datos de clientes y un volumen NFS separado (vectordbpv) para datos de configuración del clúster Milvus. Por favor, consulte la"aquí" para el flujo de trabajo de copia de seguridad de SnapCenter

  1. Configure el host que se utilizará para ejecutar los comandos de SnapCenter .

    Figura que muestra el diálogo de entrada/salida o representa contenido escrito

  2. Instalar y configurar el complemento de almacenamiento. Desde el host agregado, seleccione "Más opciones". Navegue hasta el complemento de almacenamiento descargado y selecciónelo desde el"Tienda de automatización de NetApp" . Instale el complemento y guarde la configuración.

    Figura que muestra el diálogo de entrada/salida o representa contenido escrito

  3. Configurar el sistema de almacenamiento y el volumen: agregue el sistema de almacenamiento en “Sistema de almacenamiento” y seleccione SVM (Máquina virtual de almacenamiento). En este ejemplo, hemos elegido "vs_nvidia".

    Figura que muestra el diálogo de entrada/salida o representa contenido escrito

  4. Establecer un recurso para la base de datos vectorial, incorporando una política de respaldo y un nombre de instantánea personalizado.

    • Habilite la copia de seguridad del grupo de consistencia con valores predeterminados y habilite SnapCenter sin consistencia del sistema de archivos.

    • En la sección Huella de almacenamiento, seleccione los volúmenes asociados con los datos del cliente de la base de datos vectorial y los datos del clúster Milvus. En nuestro ejemplo, estos son "vol1" y "vectordbpv".

    • Cree una política para la protección de la base de datos vectorial y proteja el recurso de la base de datos vectorial utilizando la política.

      Figura que muestra el diálogo de entrada/salida o representa contenido escrito

  5. Inserte datos en el depósito NAS S3 mediante un script de Python. En nuestro caso, modificamos el script de respaldo proporcionado por Milvus, concretamente 'prepare_data_netapp.py', y ejecutamos el comando 'sync' para vaciar los datos del sistema operativo.

    root@node2:~# python3 prepare_data_netapp.py
    
    === start connecting to Milvus     ===
    
    
    === Milvus host: localhost         ===
    
    Does collection hello_milvus_netapp_sc_test exist in Milvus: False
    
    === Create collection `hello_milvus_netapp_sc_test` ===
    
    
    === Start inserting entities       ===
    
    Number of entities in hello_milvus_netapp_sc_test: 3000
    
    === Create collection `hello_milvus_netapp_sc_test2` ===
    
    Number of entities in hello_milvus_netapp_sc_test2: 6000
    root@node2:~# for i in 2 3 4 5 6   ; do ssh node$i "hostname; sync; echo 'sync executed';" ; done
    node2
    sync executed
    node3
    sync executed
    node4
    sync executed
    node5
    sync executed
    node6
    sync executed
    root@node2:~#
  6. Verifique los datos en el depósito NAS S3. En nuestro ejemplo, los archivos con la marca de tiempo '2024-04-08 21:22' fueron creados por el script 'prepare_data_netapp.py'.

    root@node2:~# aws s3 ls --profile ontaps3  s3://milvusdbvol1/ --recursive | grep '2024-04-08'
    
    <output content removed to save page space>
    2024-04-08 21:18:14       5656 stats_log/448950615991000809/448950615991000810/448950615991001854/100/1
    2024-04-08 21:18:12       5654 stats_log/448950615991000809/448950615991000810/448950615991001854/100/448950615990800869
    2024-04-08 21:18:17       5656 stats_log/448950615991000809/448950615991000810/448950615991001872/100/1
    2024-04-08 21:18:15       5654 stats_log/448950615991000809/448950615991000810/448950615991001872/100/448950615990800876
    2024-04-08 21:22:46       5625 stats_log/448950615991003377/448950615991003378/448950615991003385/100/1
    2024-04-08 21:22:45       5623 stats_log/448950615991003377/448950615991003378/448950615991003385/100/448950615990800899
    2024-04-08 21:22:49       5656 stats_log/448950615991003408/448950615991003409/448950615991003416/100/1
    2024-04-08 21:22:47       5654 stats_log/448950615991003408/448950615991003409/448950615991003416/100/448950615990800906
    2024-04-08 21:22:52       5656 stats_log/448950615991003408/448950615991003409/448950615991003434/100/1
    2024-04-08 21:22:50       5654 stats_log/448950615991003408/448950615991003409/448950615991003434/100/448950615990800913
    root@node2:~#
  7. Inicie una copia de seguridad utilizando la instantánea del grupo de consistencia (CG) del recurso 'milvusdb'

    Figura que muestra el diálogo de entrada/salida o representa contenido escrito

  8. Para probar la funcionalidad de respaldo, agregamos una nueva tabla después del proceso de respaldo o eliminamos algunos datos del NFS (depósito NAS S3).

    Para esta prueba, imagine un escenario en el que alguien creó una colección nueva, innecesaria o inapropiada después de la copia de seguridad. En tal caso, necesitaríamos revertir la base de datos vectorial a su estado anterior a que se agregara la nueva colección. Por ejemplo, se han insertado nuevas colecciones como 'hello_milvus_netapp_sc_testnew' y 'hello_milvus_netapp_sc_testnew2'.

    root@node2:~# python3 prepare_data_netapp.py
    
    === start connecting to Milvus     ===
    
    
    === Milvus host: localhost         ===
    
    Does collection hello_milvus_netapp_sc_testnew exist in Milvus: False
    
    === Create collection `hello_milvus_netapp_sc_testnew` ===
    
    
    === Start inserting entities       ===
    
    Number of entities in hello_milvus_netapp_sc_testnew: 3000
    
    === Create collection `hello_milvus_netapp_sc_testnew2` ===
    
    Number of entities in hello_milvus_netapp_sc_testnew2: 6000
    root@node2:~#
  9. Ejecute una restauración completa del bucket NAS S3 desde la instantánea anterior.

    Figura que muestra el diálogo de entrada/salida o representa contenido escrito

  10. Utilice un script de Python para verificar los datos de las colecciones 'hello_milvus_netapp_sc_test' y 'hello_milvus_netapp_sc_test2'.

    root@node2:~# python3 verify_data_netapp.py
    
    === start connecting to Milvus     ===
    
    
    === Milvus host: localhost         ===
    
    Does collection hello_milvus_netapp_sc_test exist in Milvus: True
    {'auto_id': False, 'description': 'hello_milvus_netapp_sc_test', 'fields': [{'name': 'pk', 'description': '', 'type': <DataType.INT64: 5>, 'is_primary': True, 'auto_id': False}, {'name': 'random', 'description': '', 'type': <DataType.DOUBLE: 11>}, {'name': 'var', 'description': '', 'type': <DataType.VARCHAR: 21>, 'params': {'max_length': 65535}}, {'name': 'embeddings', 'description': '', 'type': <DataType.FLOAT_VECTOR: 101>, 'params': {'dim': 8}}]}
    Number of entities in Milvus: hello_milvus_netapp_sc_test : 3000
    
    === Start Creating index IVF_FLAT  ===
    
    
    === Start loading                  ===
    
    
    === Start searching based on vector similarity ===
    
    hit: id: 2998, distance: 0.0, entity: {'random': 0.9728033590489911}, random field: 0.9728033590489911
    hit: id: 1262, distance: 0.08883658051490784, entity: {'random': 0.2978858685751561}, random field: 0.2978858685751561
    hit: id: 1265, distance: 0.09590047597885132, entity: {'random': 0.3042039939240304}, random field: 0.3042039939240304
    hit: id: 2999, distance: 0.0, entity: {'random': 0.02316334456872482}, random field: 0.02316334456872482
    hit: id: 1580, distance: 0.05628091096878052, entity: {'random': 0.3855988746044062}, random field: 0.3855988746044062
    hit: id: 2377, distance: 0.08096685260534286, entity: {'random': 0.8745922204004368}, random field: 0.8745922204004368
    search latency = 0.2832s
    
    === Start querying with `random > 0.5` ===
    
    query result:
    -{'random': 0.6378742006852851, 'embeddings': [0.20963514, 0.39746657, 0.12019053, 0.6947492, 0.9535575, 0.5454552, 0.82360446, 0.21096309], 'pk': 0}
    search latency = 0.2257s
    
    === Start hybrid searching with `random > 0.5` ===
    
    hit: id: 2998, distance: 0.0, entity: {'random': 0.9728033590489911}, random field: 0.9728033590489911
    hit: id: 747, distance: 0.14606499671936035, entity: {'random': 0.5648774800635661}, random field: 0.5648774800635661
    hit: id: 2527, distance: 0.1530652642250061, entity: {'random': 0.8928974315571507}, random field: 0.8928974315571507
    hit: id: 2377, distance: 0.08096685260534286, entity: {'random': 0.8745922204004368}, random field: 0.8745922204004368
    hit: id: 2034, distance: 0.20354536175727844, entity: {'random': 0.5526117606328499}, random field: 0.5526117606328499
    hit: id: 958, distance: 0.21908017992973328, entity: {'random': 0.6647383716417955}, random field: 0.6647383716417955
    search latency = 0.5480s
    Does collection hello_milvus_netapp_sc_test2 exist in Milvus: True
    {'auto_id': True, 'description': 'hello_milvus_netapp_sc_test2', 'fields': [{'name': 'pk', 'description': '', 'type': <DataType.INT64: 5>, 'is_primary': True, 'auto_id': True}, {'name': 'random', 'description': '', 'type': <DataType.DOUBLE: 11>}, {'name': 'var', 'description': '', 'type': <DataType.VARCHAR: 21>, 'params': {'max_length': 65535}}, {'name': 'embeddings', 'description': '', 'type': <DataType.FLOAT_VECTOR: 101>, 'params': {'dim': 8}}]}
    Number of entities in Milvus: hello_milvus_netapp_sc_test2 : 6000
    
    === Start Creating index IVF_FLAT  ===
    
    
    === Start loading                  ===
    
    
    === Start searching based on vector similarity ===
    
    hit: id: 448950615990642008, distance: 0.07805602252483368, entity: {'random': 0.5326684390871348}, random field: 0.5326684390871348
    hit: id: 448950615990645009, distance: 0.07805602252483368, entity: {'random': 0.5326684390871348}, random field: 0.5326684390871348
    hit: id: 448950615990640618, distance: 0.13562293350696564, entity: {'random': 0.7864676926688837}, random field: 0.7864676926688837
    hit: id: 448950615990642314, distance: 0.10414951294660568, entity: {'random': 0.2209597460821181}, random field: 0.2209597460821181
    hit: id: 448950615990645315, distance: 0.10414951294660568, entity: {'random': 0.2209597460821181}, random field: 0.2209597460821181
    hit: id: 448950615990640004, distance: 0.11571306735277176, entity: {'random': 0.7765521996186631}, random field: 0.7765521996186631
    search latency = 0.2381s
    
    === Start querying with `random > 0.5` ===
    
    query result:
    -{'embeddings': [0.15983285, 0.72214717, 0.7414838, 0.44471496, 0.50356466, 0.8750043, 0.316556, 0.7871702], 'pk': 448950615990639798, 'random': 0.7820620141382767}
    search latency = 0.3106s
    
    === Start hybrid searching with `random > 0.5` ===
    
    hit: id: 448950615990642008, distance: 0.07805602252483368, entity: {'random': 0.5326684390871348}, random field: 0.5326684390871348
    hit: id: 448950615990645009, distance: 0.07805602252483368, entity: {'random': 0.5326684390871348}, random field: 0.5326684390871348
    hit: id: 448950615990640618, distance: 0.13562293350696564, entity: {'random': 0.7864676926688837}, random field: 0.7864676926688837
    hit: id: 448950615990640004, distance: 0.11571306735277176, entity: {'random': 0.7765521996186631}, random field: 0.7765521996186631
    hit: id: 448950615990643005, distance: 0.11571306735277176, entity: {'random': 0.7765521996186631}, random field: 0.7765521996186631
    hit: id: 448950615990640402, distance: 0.13665105402469635, entity: {'random': 0.9742541034109935}, random field: 0.9742541034109935
    search latency = 0.4906s
    root@node2:~#
  11. Verifique que la colección innecesaria o inapropiada ya no esté presente en la base de datos.

    root@node2:~# python3 verify_data_netapp.py
    
    === start connecting to Milvus     ===
    
    
    === Milvus host: localhost         ===
    
    Does collection hello_milvus_netapp_sc_testnew exist in Milvus: False
    Traceback (most recent call last):
      File "/root/verify_data_netapp.py", line 37, in <module>
        recover_collection = Collection(recover_collection_name)
      File "/usr/local/lib/python3.10/dist-packages/pymilvus/orm/collection.py", line 137, in __init__
        raise SchemaNotReadyException(
    pymilvus.exceptions.SchemaNotReadyException: <SchemaNotReadyException: (code=1, message=Collection 'hello_milvus_netapp_sc_testnew' not exist, or you can pass in schema to create one.)>
    root@node2:~#

En conclusión, el uso de SnapCenter de NetApp para salvaguardar los datos de bases de datos vectoriales y los datos Milvus que residen en ONTAP ofrece beneficios significativos a los clientes, particularmente en industrias donde la integridad de los datos es primordial, como la producción cinematográfica. La capacidad de SnapCenter para crear copias de seguridad consistentes y realizar restauraciones de datos completas garantiza que los datos críticos, como archivos de audio y video integrados, estén protegidos contra pérdidas debido a fallas del disco duro u otros problemas. Esto no sólo evita interrupciones operativas sino que también protege contra pérdidas financieras sustanciales.

En esta sección, demostramos cómo se puede configurar SnapCenter para proteger los datos que residen en ONTAP, incluida la configuración de hosts, la instalación y configuración de complementos de almacenamiento y la creación de un recurso para la base de datos vectorial con un nombre de instantánea personalizado. También mostramos cómo realizar una copia de seguridad utilizando la instantánea del grupo de consistencia y verificar los datos en el depósito NAS S3.

Además, simulamos un escenario en el que se creó una colección innecesaria o inapropiada después de la copia de seguridad. En tales casos, la capacidad de SnapCenter de realizar una restauración completa a partir de una instantánea anterior garantiza que la base de datos vectorial pueda revertirse a su estado anterior a la adición de la nueva colección, manteniendo así la integridad de la base de datos. Esta capacidad de restaurar datos a un punto específico en el tiempo es invaluable para los clientes, brindándoles la seguridad de que sus datos no solo están seguros, sino que también se mantienen correctamente. De este modo, el producto SnapCenter de NetApp ofrece a sus clientes una solución robusta y fiable para la protección y gestión de datos.