Administrar agentes de transferencia

Los agentes del Servicio de transferencia de almacenamiento son aplicaciones que se ejecutan dentro de un contenedor de Docker, que se coordinan con el Servicio de transferencia de almacenamiento para transferencias que involucran sistemas de archivos o almacenamiento compatible con S3.

Si la transferencia no involucra un sistema de archivos o almacenamiento compatible con S3, no es necesario que configures agentes.

En este documento, se describe cómo administrar agentes de transferencia en tus servidores.

Descripción general

  • Los procesos de los agentes son dinámicos. Mientras ejecutas una transferencia, puedes agregar agentes para aumentar el rendimiento. Los agentes recién iniciados se unen al grupo de agentes asignado y realizan trabajos a partir de transferencias existentes. Puedes usar esto con el fin de ajustar la cantidad de agentes que se ejecutan o para adaptar el rendimiento de transferencia a los cambios de demanda de la transferencia.

  • Los procesos de los agentes son un conjunto tolerante a errores. Si un agente deja de ejecutarse, los agentes restantes seguirán en funcionamiento. Si se detienen todos tus agentes y los reinicias, la transferencia se reanudará donde se detuvieron. Esto te permite evitar la supervisión de los agentes, el reintento de las transferencias o la implementación de una lógica de recuperación. Puedes aplicar parches en los grupos de agentes, además de moverlo y escalarlo de forma dinámica sin tiempo de inactividad de transferencia. Para ello, coordina los agentes con Google Kubernetes Engine.

    Por ejemplo, envía dos transferencias mientras se ejecutan dos agentes. Si uno de los agentes se detiene debido a un reinicio de la máquina o un parche del sistema operativo, el agente restante continúa en funcionamiento. Las dos transferencias se siguen ejecutando, pero son más lentas, ya que un solo agente transfiere los datos. Si el agente restante también se detiene, todas las transferencias dejan de avanzar, ya que no hay agentes en ejecución. Cuando reinicias los procesos del agente, las transferencias se reanudan desde donde quedaron.

  • Los procesos de los agentes pertenecen a un grupo. Trasladan los datos de forma colectiva en paralelo. Debido a esto, todos los agentes dentro de un grupo deben tener el mismo acceso a todas las fuentes de datos que deseas transferir.

    Por ejemplo, si transfieres datos desde un sistema de archivos en particular, debes activar el sistema de archivos en cada máquina que aloja agentes en el grupo de agentes. Si algunos agentes de tu grupo pueden acceder a una fuente de datos y otros no, las transferencias desde esa fuente de datos no se realizarán de forma correcta.

Antes de comenzar

Antes de configurar las transferencias, asegúrate de haber configurado el acceso para usuarios y cuentas de servicio.

Si usarás comandos de gcloud, instala la CLI de gcloud.

Instala y ejecuta agentes de transferencia

Recomendamos instalar un mínimo de tres agentes por grupo de agentes, idealmente en máquinas separadas. Para obtener más información sobre cómo determinar cuántos agentes se ejecutarán, consulta Maximiza el rendimiento del agente de transferencia.

No incluyas información sensible, como información de identificación personal (PII) o datos de seguridad en el prefijo de ID del agente. Los nombres de recursos pueden propagarse a los nombres de otros recursos de Google Cloud y se pueden exponer a sistemas internos de Google fuera del proyecto.

Para instalar y ejecutar agentes de transferencia, haz lo siguiente:

Consola de Google Cloud

  1. En la consola de Google Cloud, ve a la página Grupos de agentes.

    Ir a los grupos de agentes

  2. Selecciona el grupo de agentes al que deseas agregar el agente nuevo.

  3. Haz clic en Instalar agente.

  4. Sigue las instrucciones que se muestran para instalar y ejecutar el agente.

    Para obtener más información sobre las opciones de línea de comandos del agente, consulta Opciones de línea de comandos del agente.

gcloud CLI

Para instalar uno o más agentes mediante la CLI de gcloud, ejecuta gcloud transfer agents install:

gcloud transfer agents install --pool=POOL_NAME --count=NUM_AGENTS \
  --mount-directories=MOUNT_DIRECTORIES

La herramienta te guía a través de los pasos necesarios para instalar los agentes. Con este comando, se instalan NUM_AGENTS agentes en tu máquina, asignados al nombre del grupo especificado como POOL_NAME, y autentica al agente con tus credenciales gcloud. El nombre del grupo debe existir o se mostrará un error.

La marca --mount-directories es opcional, pero es muy recomendable. Su valor es una lista de directorios separados por comas en el sistema de archivos a los que se debe otorgar acceso al agente. Si omites esta marca, se activa todo el sistema de archivos en el contenedor del agente. Consulta la referencia de gcloud para obtener más detalles.

Fuentes compatibles con S3

Cuando instalas agentes para usarlos con una fuente compatible con S3, debes proporcionar credenciales de AWS como variables de entorno como los valores de AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY, o almacenadas como credenciales predeterminadas en los archivos de configuración de tu sistema.

export AWS_ACCESS_KEY_ID=ID
export AWS_SECRET_ACCESS_KEY=SECRET
gcloud transfer agents install --pool=POOL_NAME \
  --creds-file=/relative/path/to/service-account-key.json

Usa una clave de cuenta de servicio

Para ejecutar agentes mediante una clave de cuenta de servicio, usa la opción --creds-file:

gcloud transfer agents install --pool=POOL_NAME --count=NUM_AGENTS \
   --creds-file=/relative/path/to/service-account-key.json

More info

Para obtener una lista completa de las marcas opcionales, ejecuta gcloud transfer agents install --help o lee la referencia de gcloud transfer.

docker run

Antes de usar docker run a fin de instalar agentes, sigue las instrucciones para instalar Docker.

El comando docker run instala un agente. Para aumentar la cantidad de agentes en tu grupo, vuelve a ejecutar este comando tantas veces como sea necesario.

Cuando instalas agentes, puedes elegir autenticarte con tus credenciales predeterminadas de gcloud o con una cuenta de servicio.

Credenciales predeterminadas

Para permitir que el contenedor de Docker se autentique con tus credenciales predeterminadas gcloud, crea un volumen de Docker que contenga un archivo con las credenciales predeterminadas de tu aplicación mediante la ejecución del siguiente comando:

sudo docker run -ti --name gcloud-config google/cloud-sdk gcloud auth application-default login

Luego, usa el siguiente comando a fin de instalar un agente, con la marca --volumes-from para activar el volumen de credenciales gcloud-config:

sudo docker run --ulimit memlock=64000000 -d --rm \
--volumes-from gcloud-config \
-v HOST_DIRECTORY:CONTAINER_DIRECTORY \
gcr.io/cloud-ingest/tsop-agent:latest \
--project-id=PROJECT_ID \
--hostname=$(hostname) \
--agent-pool=POOL_NAME

Autenticación de la cuenta de servicio

Para instalar y ejecutar los agentes de transferencia docker run con las credenciales de la cuenta de servicio, especifica la ruta a la clave de la cuenta de servicio con formato JSON con la marca --creds-file.

La ruta de acceso debe tener el prefijo /transfer_root.

Para obtener más información sobre este tema, consulta Cómo crear y administrar claves de cuenta de servicio.

sudo docker run --ulimit memlock=64000000 -d --rm \
-v HOST_DIRECTORY:CONTAINER_DIRECTORY \
-v PATH/TO/KEY.JSON:PATH/TO/KEY.JSON \
gcr.io/cloud-ingest/tsop-agent:latest \
--project-id=PROJECT_ID \
--creds-file=/transfer_root/PATH/TO/KEY.JSON
--hostname=$(hostname) \
--agent-pool=POOL_NAME

Opciones y marcas

Reemplaza las variables en los ejemplos anteriores por la siguiente información:

  • HOST_DIRECTORY es el directorio en la máquina anfitrión desde el que deseas copiar. Puedes usar más de una marca -v para especificar directorios adicionales desde los que se copiará.
  • CONTAINER_DIRECTORY es el directorio asignado dentro del contenedor del agente. Debe ser igual a HOST_DIRECTORY.
  • PROJECT_ID es el ID del proyecto que aloja la transferencia.
  • POOL_NAME es el nombre del grupo de agentes en el que se instalará este agente. Si omites esta marca, el agente se instala en el grupo transfer_service_default de tu proyecto.

El comando docker run admite marcas adicionales.

  • --enable-mount-directory activa todo el sistema de archivos en el directorio /transfer_root del contenedor. Si se especifica --enable-mount-directory, no se aplican las restricciones de directorios que usan la marca -v.

  • --creds-file=CREDENTIAL_FILE especifica la ruta a un archivo de credenciales de cuenta de servicio con formato JSON. A menos que uses --enable_mount_directory, debes hacer lo siguiente:

    1. Activa el archivo de credenciales con la marca -v.
    2. Agrega el prefijo /transfer_root a la ruta de acceso a --creds-file.

    Por ejemplo:

    -v /tmp/key.json:/tmp/key.json \
    --creds-file=/transfer_root/tmp/key.json
    
  • --enable-s3 especifica que este agente es para transferencias desde el almacenamiento compatible con S3. Los agentes instalados con esta opción no se pueden usar para transferencias desde sistemas de archivos POSIX.

  • Si tu transferencia es desde un almacenamiento compatible con AWS S3 o S3, pasa el ID de tu clave de acceso y la clave secreta con variables de entorno:

    -e AWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID \
    -e AWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY
    
  • --env HTTPS_PROXY=PROXY especifica un proxy de reenvío en la red. El valor de PROXY es la URL HTTP y el puerto del servidor proxy. Asegúrate de especificar la URL HTTP, y no una URL HTTPS, para evitar la duplicación de solicitudes en la encriptación TLS. Las solicitudes unidas dobles evitan que el servidor proxy envíe solicitudes de salida válidas.

  • --agent-id-prefix=ID_PREFIX especifica un prefijo opcional que se antepone al ID del agente para ayudar a identificar el agente o su máquina en la consola de Google Cloud. Cuando se usa un prefijo, el ID del agente tiene el formato prefix + hostname + Docker container ID.

  • --log-dir=LOGS_DIRECTORY modifica el directorio en el que el agente escribe registros. El directorio predeterminado es /tmp/.

    Si no especificaste --enable_mount_directory, debes usar /transfer_root como prefijo para esta ruta de acceso. Por ejemplo, /transfer_root/logs.

  • --max-physical-mem=MAX_MEMORY: De forma predeterminada, los agentes usan un máximo de 8 GiB de memoria del sistema. Si el valor predeterminado no se ajusta a tu entorno, puedes especificar un uso máximo de memoria adecuado en los siguientes formatos:

    Valor max-physical-mem Configuración del uso máximo de memoria
    6g 6 gigabytes
    6gb 6 gigabytes
    6GiB 6 gibibytes

Confirma las conexiones del agente

Si creaste tus agentes con gcloud CLI o docker run, los agentes no se mostrarán como conectados hasta que hayas creado los recursos necesarios de Pub/Sub. Puedes crear estos recursos de las siguientes dos maneras:

  • Crea una transferencia con este grupo de agentes. El Servicio de transferencia de almacenamiento crea los recursos necesarios de Pub/Sub de forma automática.

  • Sigue las instrucciones para instalar un agente con la consola de Cloud. Cuando llegues a la pantalla Instalar agentes, busca la sección que dice Si aún no lo hiciste, haz clic para crear las suscripciones y los temas requeridos de Cloud Pub/Sub y haz clic en Crear.

Para confirmar que los agentes estén conectados, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Grupos de agentes.

    Ir a los grupos de agentes

    Se muestran tus grupos de agentes con la cantidad de agentes conectados.

  2. Selecciona un grupo de agentes para ver los detalles de los agentes conectados.

Si un agente nuevo no aparece en la página del grupo de agentes en un plazo de 10 minutos después de su creación, consulta Los agentes no están conectados.

Supervisar la actividad del agente

Puedes usar alertas de Cloud Monitoring para supervisar la actividad del agente.

Monitoring está disponible en las dimensiones project, agent_pool y agent_id.

Con estos datos de supervisión, puedes configurar alertas para recibir notificaciones de posibles problemas con la transferencia. Para hacerlo, crea una alerta en cualquiera de las siguientes métricas de Google Cloud:

Nombre de la métrica Qué describe Usos sugeridos
storagetransfer.googleapis.com/agent/transferred_bytes_count Mide la rapidez con la que un agente específico transfiere datos (en todos los trabajos a los que brinda servicio) en un momento determinado. Alerta de caídas en el rendimiento.
storagetransfer.googleapis.com/agent/connected Un booleano que es verdadero para cada agente del que Google Cloud recibió un mensaje reciente de señal de supervisión de funcionamiento.
  • Alerta para agentes con fallas
  • Hay una cantidad de agentes menor que la considerada necesaria para un rendimiento razonable
  • Indica un problema con máquinas de agentes

Detén un agente

Para detener un agente, ejecuta docker stop en su ID de contenedor de Docker. Para encontrar el ID y detener el agente, sigue estos pasos:

  1. En la consola de Google Cloud, ve a la página Grupos de agentes.

    Ir a los grupos de agentes

  2. Selecciona el grupo de agentes que contiene el agente que deseas detener.

  3. Selecciona un agente de la lista. Usa el campo Filtro para buscar prefijos, estado del agente, antigüedad del agente, etcétera.

  4. Haz clic en Detener agente. Se muestra el comando docker stop con el ID del contenedor específico.

  5. Ejecuta el comando en la máquina en la que se ejecuta el agente. Un comando docker stop exitoso muestra el ID del contenedor.

Una vez que el agente se detiene, aparece en la lista de grupos de agentes como Desconectado.

Borra un agente

Para borrar agentes específicos, obtén una lista de los agentes que se ejecutan en tu máquina:

docker container list --all --filter ancestor=gcr.io/cloud-ingest/tsop-agent

Luego, pasa los ID de agente a transfer agents delete:

gcloud transfer agents delete --ids=id1,id2,…

Para borrar todos los agentes que se ejecutan en la máquina, usa la marca --all o la marca --uninstall. Ambas marcas borran todos los agentes de la máquina; la marca --uninstall también desinstala la imagen de Docker del agente.

gcloud transfer agents delete --all
gcloud transfer agents delete --uninstall

Detalles de transferencia del sistema de archivos

Transferencias incrementales

El Servicio de transferencia de almacenamiento comienza todas las transferencias mediante el cálculo de los datos presentes en el origen y el destino para determinar qué archivos de origen son nuevos, cuáles fueron actualizados y cuáles quitados con respecto a la última transferencia. Hacemos esto para reducir la cantidad de datos que enviamos desde tus máquinas, para usar el ancho de banda de manera eficaz y para reducir los tiempos de transferencia.

Para detectar si un archivo ha cambiado, usamos un algoritmo similar a gsutil rsync: verificamos la última hora de modificación y el tamaño del archivo de origen y comparamos esos datos con la última hora de modificación y el tamaño registrados cuando se copió el archivo por última vez. Cuando detectamos un archivo nuevo o modificado, copiamos todo el archivo en su destino. Para obtener más información sobre la actualización de archivos, consulta Detalles de coherencia de datos.

De forma predeterminada, detectamos los archivos borrados en la fuente, pero no actuamos. Si eliges la opción de sincronización Eliminar archivos de destino que no están en la fuente al crear o editar, tu transferencia eliminará el objeto correspondiente del destino.

Si eliges la opción de sincronización Eliminar archivos de destino que no están también en la fuente, los archivos que se eliminan accidentalmente en la fuente también se eliminan en el destino. Para evitar la pérdida de datos por eliminaciones accidentales, recomendamos habilitar las versiones de objetos en el bucket de destino si eliges usar esta opción. Entonces, si eliminas un archivo accidentalmente, puedes restaurar sus objetos en Cloud Storage a una versión anterior.

Detalles de coherencia de datos

Una operación de transferencia correcta transferirá todos los archivos de origen que existían y no se modificaron durante todo el tiempo de ejecución de la operación. Los archivos de origen que se crearon, actualizaron o borraron durante una transferencia pueden o no tener esos cambios reflejados en el conjunto de datos de destino.

El Servicio de transferencia de almacenamiento usa la última hora de modificación y el tamaño de un archivo para determinar si cambió. Si se actualiza un archivo sin cambiar la última hora de modificación o tamaño, y habilitas la opción delete-objects-from-source, es posible que pierdas datos de ese cambio.

Cuando uses la función delete-objects-from-source, te recomendamos que suspendas las escrituras en la fuente durante la transferencia para protegerte contra la pérdida de datos.

Para inmovilizar las escrituras en tu fuente, realiza una de las siguientes acciones:

  • Clona el directorio que deseas transferir y, luego, usa el directorio clonado como fuente de la transferencia.
  • Detén las aplicaciones que escriben en el directorio de origen.

Si es importante capturar los cambios que se produjeron durante una transferencia, puedes volver a ejecutar la transferencia o configurar el sistema de archivos de origen en modo de solo lectura mientras se ejecuta la operación.

Dado que Cloud Storage no tiene la noción de directorios, los directorios de origen vacíos no se transfieren.