Les agents du service de transfert de stockage sont des applications exécutées dans un conteneur Open Container Initiative (OCI) qui se coordonnent avec le service de transfert de stockage pour les transferts impliquant des systèmes de fichiers ou un espace de stockage compatible S3.
Par défaut, service de transfert de stockage utilise Docker pour créer et exécuter des conteneurs OCI.
Le service de transfert de stockage est également compatible avec Podman pour la gestion des conteneurs. Vous devez installer vos agents à l'aide de la commande podman run
pour utiliser Podman.
Si le transfert n'implique pas de système de fichiers ni de stockage compatible S3, vous n'avez pas besoin de configurer d'agents.
Ce document explique comment administrer les agents de transfert sur vos serveurs.
Présentation
Les processus d'agent sont dynamiques. Lors d'un transfert, vous pouvez ajouter des agents pour améliorer les performances. Les agents nouvellement lancés rejoignent le pool d'agents et effectuent des tâches à partir des transferts existants. Cela vous permet d'ajuster le nombre d'agents en cours d'exécution ou d'adapter les performances de transfert en fonction de la demande.
Les processus d'agent constituent une entité collective tolérante aux pannes. Si un agent cesse de s'exécuter, les agents restants continuent leur travail. Si tous vos agents s'arrêtent, le transfert reprend là où ils ont été arrêtés dès que vous les redémarrez. Ainsi, vous n'avez pas besoin d'exploiter des agents de surveillance, de relancer les transferts ni de mettre en œuvre une logique de récupération. Vous pouvez corriger, déplacer et effectuer un scaling dynamique de votre pool d'agents sans que vos transferts ne subissent de temps d'arrêt en coordonnant les agents avec Google Kubernetes Engine.
Imaginons par exemple que vous lanciez deux transferts pendant que deux agents sont en cours d'exécution. Si l'un des agents s'arrête en raison d'un redémarrage de la machine ou d'un correctif du système d'exploitation, l'agent restant continue de fonctionner. Les deux transferts sont toujours en cours d'exécution, mais à une vitesse réduite, car un seul agent déplace les données. Si l'agent restant s'arrête aussi, tous les transferts cessent de progresser, car aucun agent n'est en cours d'exécution. Lorsque vous redémarrez les processus d'agent, les transferts reprennent là où ils s'étaient arrêtés.
Les processus d'agent appartiennent à un pool. Ils déplacent collectivement vos données en parallèle. Pour cette raison, tous les agents d'un pool doivent disposer du même accès à toutes les sources de données que vous souhaitez transférer.
Par exemple, si vous transférez des données à partir d'un système de fichiers spécifique, vous devez installer le système de fichiers sur chaque machine hébergeant des agents dans votre pool d'agents. Si certains agents de votre pool peuvent accéder à une source de données et que d'autres ne le peuvent pas, les transferts à partir de cette source de données échoueront.
Avant de commencer
Avant de configurer vos transferts, assurez-vous d'avoir configuré l'accès : pour les utilisateurs et les comptes de service.
Si vous prévoyez d'utiliser les commandes gcloud
, installez la CLI gcloud.
Installer et exécuter des agents de transfert
Nous vous recommandons d'installer au moins trois agents par pool d'agents, idéalement sur des machines distinctes. Pour savoir comment déterminer le nombre d'agents à exécuter, consultez la section Optimiser les performances de l'agent de transfert.
N'incluez pas d'informations sensibles telles que des informations permettant d'identifier personnellement l'utilisateur ou des données de sécurité dans le préfixe de votre ID d'agent. Les noms de ressources peuvent être propagés aux noms d'autres ressources Google Cloud et peuvent être exposés à des systèmes internes à Google en dehors de votre projet.Pour installer et exécuter des agents de transfert:
Console Google Cloud
Dans la console Google Cloud, accédez à la page Pools d'agents.
Sélectionnez le pool d'agents auquel ajouter le nouvel agent.
Cliquez sur Installer l'agent.
Suivez les instructions pour installer et exécuter l'agent.
Pour en savoir plus sur les options de ligne de commande de l'agent, consultez la section Options de ligne de commande de l'agent.
CLI gcloud
Pour installer un ou plusieurs agents à l'aide de la CLI gcloud, exécutez la commande gcloud transfer agents install
:
gcloud transfer agents install --pool=POOL_NAME --count=NUM_AGENTS \
--mount-directories=MOUNT_DIRECTORIES
L'outil vous guide tout au long du processus d'installation des agents. Cette commande installe le ou les agents NUM_AGENTS sur votre ordinateur, mappés au nom du pool spécifié en tant que POOL_NAME et authentifie l'agent à l'aide de vos identifiants gcloud
. Si le nom du pool n'existe pas, une erreur est renvoyée.
L'option --mount-directories
est facultative, mais vivement recommandée. Sa valeur est une liste de répertoires du système de fichiers, séparés par une virgule, auxquels accorder l'accès à l'agent.
Si vous omettez cet indicateur, l'ensemble du système de fichiers est installé sur le conteneur de l'agent. Pour en savoir plus, consultez la documentation de référence sur gcloud
.
Sources compatibles S3
Lorsque vous installez des agents à utiliser avec une source compatible avec S3, vous devez fournir les identifiants AWS, qui vont être des variables d'environnement utilisées comme valeurs pour AWS_ACCESS_KEY_ID
et AWS_SECRET_ACCESS_KEY
, ou bien qui vont être stockés en tant qu'identifiants par défaut dans les fichiers de configuration de votre système.
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
Utiliser une clé de compte de service
Pour exécuter des agents à l'aide d'une clé de compte de service, utilisez l'option --creds-file
:
gcloud transfer agents install --pool=POOL_NAME --count=NUM_AGENTS \
--creds-file=/relative/path/to/service-account-key.json
Plus d'infos
Pour obtenir la liste complète des options facultatives, exécutez gcloud transfer agents install --help
ou consultez la documentation de référence sur gcloud transfer
.
Docker
Avant d'utiliser Docker pour installer des agents, suivez les instructions pour installer Docker.
La commande docker run
installe un agent. Pour augmenter le nombre d'agents dans votre pool, exécutez cette commande autant de fois que nécessaire.
Lorsque vous installez des agents, vous pouvez choisir de vous authentifier à l'aide de vos identifiants par défaut gcloud
ou avec un compte de service.
Identifiants par défaut
Pour que le conteneur Docker puisse s'authentifier avec vos identifiants par défaut gcloud
, créez un volume Docker contenant un fichier qui inclut les identifiants par défaut de l'application en exécutant la commande suivante:
sudo docker run -ti --name gcloud-config google/cloud-sdk gcloud auth application-default login
Utilisez ensuite la commande suivante pour installer un agent, en utilisant l'option --volumes-from
pour monter le volume d'identifiants 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
Authentification par compte de service
Pour installer et exécuter des agents de transfert docker run
à l'aide d'identifiants de compte de service, spécifiez le chemin d'accès à votre clé de compte de service au format JSON à l'aide de l'indicateur --creds-file
.
Le chemin d'accès doit être précédé de la chaîne /transfer_root
.
Pour en savoir plus sur les clés de compte de service, consultez la page Créer et gérer des clés de compte de service.
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
Options et indicateurs
Remplacez les variables des exemples ci-dessus par les informations suivantes:
HOST_DIRECTORY
est le répertoire de la machine hôte à partir duquel vous souhaitez effectuer la copie. Vous pouvez utiliser plusieurs options-v
pour spécifier d'autres répertoires à partir desquels effectuer la copie.CONTAINER_DIRECTORY
est le répertoire mappé dans le conteneur de l'agent. Elle doit être identique àHOST_DIRECTORY
.PROJECT_ID
correspond à l'ID du projet qui héberge le transfert.POOL_NAME
correspond au nom du pool d'agents dans lequel installer cet agent. Si vous omettez cet indicateur, l'agent est installé dans le pooltransfer_service_default
de votre projet.
La commande docker run
accepte des options supplémentaires.
--enable-mount-directory
installe l'ensemble du système de fichiers dans le répertoire/transfer_root
du conteneur. Si--enable-mount-directory
est spécifié, les restrictions de répertoire utilisant l'indicateur-v
ne sont pas appliquées.--creds-file=CREDENTIAL_FILE
spécifie le chemin d'accès à un fichier d'identifiants de compte de service au format JSON. Sauf si vous utilisez--enable_mount_directory
, vous devez:- Montez le fichier d'identifiants à l'aide de l'indicateur
-v
. - Ajoutez le préfixe
/transfer_root
au chemin d'accès à--creds-file
.
Exemple :
-v /tmp/key.json:/tmp/key.json \ --creds-file=/transfer_root/tmp/key.json
- Montez le fichier d'identifiants à l'aide de l'indicateur
--enable-s3
spécifie que cet agent est destiné aux transferts à partir d'un espace de stockage compatible S3. Les agents installés avec cette option ne peuvent pas être utilisés pour les transferts à partir de systèmes de fichiers POSIX.Si votre transfert provient d'un stockage AWS S3 ou compatible S3, transmettez votre ID de clé d'accès et votre clé secrète à l'aide de variables d'environnement:
-e AWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID \ -e AWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY
--env HTTPS_PROXY=PROXY
spécifie un proxy de transmission sur votre réseau. La valeur dePROXY
correspond à l'URL et au port HTTP du serveur proxy. Veillez à spécifier l'URL HTTP, et non une URL HTTPS, afin d'éviter l'encapsulation en double des requêtes dans le chiffrement TLS. Les requêtes encapsulées en double empêchent le serveur proxy d'envoyer des requêtes sortantes valides.--agent-id-prefix=ID_PREFIX
spécifie un préfixe facultatif ajouté à l'ID de l'agent pour aider à identifier l'agent ou sa machine dans la console Google Cloud. Lorsqu'un préfixe est utilisé, l'ID de l'agent possède le format suivant :prefix + hostname + Docker container ID
.--log-dir=LOGS_DIRECTORY
modifie le répertoire dans lequel l'agent écrit les journaux. Le répertoire par défaut est/tmp/
.Si vous n'avez pas spécifié
--enable_mount_directory
, vous devez ajouter le préfixe/transfer_root
à ce chemin d'accès. Exemple :/transfer_root/logs
.--max-physical-mem=MAX_MEMORY
: les agents utilisent par défaut 8 Gio de mémoire système au maximum. Si la valeur par défaut ne correspond pas à votre environnement, vous pouvez spécifier une utilisation de mémoire maximale appropriée en utilisant les formats suivants :Valeur max-physical-mem
Paramètre de mémoire maximale 6g
6 gigaoctets 6gb
6 gigaoctets 6GiB
6 gibioctets
Podman
Avant d'utiliser Podman pour installer des agents, installez Podman:
sudo apt-get update
sudo apt-get -y install podman
Lorsque vous installez des agents, vous pouvez choisir de vous authentifier à l'aide de vos identifiants par défaut gcloud
ou avec un compte de service.
Identifiants par défaut
Pour autoriser le conteneur de l'agent à s'authentifier avec vos identifiants par défaut Google Cloud CLI, créez un volume contenant un fichier avec les identifiants par défaut de votre application en exécutant la commande suivante:
gcloud auth print-access-token | podman login -u oauth2accesstoken --password-stdin gcr.io
sudo podman pull gcr.io/google.com/cloudsdktool/google-cloud-cli:stable
sudo podman run -ti --replace --name gcloud-config gcr.io/google.com/cloudsdktool/google-cloud-cli:stable gcloud auth application-default login
```
Then use the following command to install an agent, using the
`--volumes-from` flag to mount the `gcloud-config` credentials volume.
The command installs one agent. To increase the number of agents in your
pool, re-run this command as many times as required.
```sh
sudo podman 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
```
Authentification par compte de service
Pour installer et exécuter des agents de transfert à l'aide d'identifiants de compte de service, spécifiez le chemin d'accès à votre clé de compte de service au format JSON à l'aide de l'indicateur --creds-file
.
Le chemin d'accès doit être précédé de la chaîne /transfer_root
.
Pour en savoir plus sur les clés de compte de service, consultez la page Créer et gérer des clés de compte de service.
sudo podman 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
Options et indicateurs
Remplacez les variables des exemples ci-dessus par les informations suivantes:
HOST_DIRECTORY
est le répertoire de la machine hôte à partir duquel vous souhaitez effectuer la copie. Vous pouvez utiliser plusieurs options-v
pour spécifier d'autres répertoires à partir desquels effectuer la copie.CONTAINER_DIRECTORY
est le répertoire mappé dans le conteneur de l'agent. Elle doit être identique àHOST_DIRECTORY
.PROJECT_ID
correspond à l'ID du projet qui héberge le transfert.POOL_NAME
correspond au nom du pool d'agents dans lequel installer cet agent. Si vous omettez cet indicateur, l'agent est installé dans le pooltransfer_service_default
de votre projet.
La commande podman run
accepte des options supplémentaires.
--enable-mount-directory
installe l'ensemble du système de fichiers dans le répertoire/transfer_root
du conteneur. Si--enable-mount-directory
est spécifié, les restrictions de répertoire utilisant l'indicateur-v
ne sont pas appliquées.--creds-file=CREDENTIAL_FILE
spécifie le chemin d'accès à un fichier d'identifiants de compte de service au format JSON. Sauf si vous utilisez--enable_mount_directory
, vous devez:- Montez le fichier d'identifiants à l'aide de l'indicateur
-v
. - Ajoutez le préfixe
/transfer_root
au chemin d'accès à--creds-file
.
Exemple :
-v /tmp/key.json:/tmp/key.json \ --creds-file=/transfer_root/tmp/key.json
- Montez le fichier d'identifiants à l'aide de l'indicateur
--enable-s3
spécifie que cet agent est destiné aux transferts à partir d'un espace de stockage compatible S3. Les agents installés avec cette option ne peuvent pas être utilisés pour les transferts à partir de systèmes de fichiers POSIX.Si votre transfert provient d'un stockage AWS S3 ou compatible S3, transmettez votre ID de clé d'accès et votre clé secrète à l'aide de variables d'environnement:
-e AWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID \ -e AWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY
--env HTTPS_PROXY=PROXY
spécifie un proxy de transmission sur votre réseau. La valeur dePROXY
correspond à l'URL et au port HTTP du serveur proxy. Veillez à spécifier l'URL HTTP, et non une URL HTTPS, afin d'éviter l'encapsulation en double des requêtes dans le chiffrement TLS. Les requêtes encapsulées en double empêchent le serveur proxy d'envoyer des requêtes sortantes valides.--agent-id-prefix=ID_PREFIX
spécifie un préfixe facultatif ajouté à l'ID de l'agent pour aider à identifier l'agent ou sa machine dans la console Google Cloud. Lorsqu'un préfixe est utilisé, l'ID de l'agent possède le format suivant :prefix + hostname + OCI container ID
.--log-dir=LOGS_DIRECTORY
modifie le répertoire dans lequel l'agent écrit les journaux. Le répertoire par défaut est/tmp/
.Si vous n'avez pas spécifié
--enable_mount_directory
, vous devez ajouter le préfixe/transfer_root
à ce chemin d'accès. Exemple :/transfer_root/logs
.--max-physical-mem=MAX_MEMORY
: les agents utilisent par défaut 8 Gio de mémoire système au maximum. Si la valeur par défaut ne correspond pas à votre environnement, vous pouvez spécifier une utilisation de mémoire maximale appropriée en utilisant les formats suivants :Valeur max-physical-mem
Paramètre de mémoire maximale 6g
6 gigaoctets 6gb
6 gigaoctets 6GiB
6 gibioctets
Dépannage
Si votre configuration de SELinux exige que des libellés soient placés sur le contenu du volume installé dans un conteneur, ajoutez l'indicateur :Z
au volume:
sudo podman run --ulimit memlock=64000000 -d --rm \
-v HOST_DIRECTORY:CONTAINER_DIRECTORY:Z \
-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
Sans libellé, le système de sécurité peut empêcher les processus exécutés dans le conteneur d'utiliser le contenu. Par défaut, Podman ne modifie pas les libellés définis par l'OS.
Confirmer les connexions des agents
Pour vérifier que vos agents sont bien connectés, procédez comme suit :
Dans la console Google Cloud, accédez à la page Pools d'agents.
Vos pools d'agents s'affichent, avec le nombre d'agents connectés.
Sélectionnez un pool d'agents pour afficher les détails des agents connectés.
Si un nouvel agent n'apparaît pas sur la page du pool d'agents dans les dix minutes suivant sa création, consultez la section Les agents ne sont pas connectés.
Surveiller l'activité des agents
Vous pouvez surveiller l'activité des agents à l'aide de Cloud Monitoring.
La surveillance est disponible avec les dimensions project
, agent_pool
et agent_id
.
À l'aide de ces données de surveillance, vous pouvez configurer des alertes pour vous avertir des problèmes potentiels avec votre transfert. Pour ce faire, créez une alerte sur l'une des métriques Google Cloud suivantes :
Nom de la métrique | Description | Suggestions d'utilisation |
---|---|---|
storagetransfer.googleapis.com/agent/transferred_bytes_count | Mesure la vitesse à laquelle un agent spécifique déplace des données (parmi toutes les tâches qu'il traite) à un instant donné. | Alerte en cas de baisses de performances |
storagetransfer.googleapis.com/agent/connected | Valeur booléenne correspondant à True si un agent a récemment envoyé un message de pulsation à Google. |
|
Arrêter un agent
Pour arrêter un agent, exécutez docker stop
sur son ID de conteneur Docker. Pour trouver cet ID et arrêter l'agent, procédez comme suit:
Dans la console Google Cloud, accédez à la page Pools d'agents.
Sélectionnez le pool d'agents contenant l'agent à arrêter.
Sélectionnez un agent dans la liste. Utilisez le champ Filtre pour rechercher suivant un préfixe, l'état de l'agent, l'âge de l'agent, etc.
Cliquez sur Arrêter l'agent. La commande
docker stop
s'affiche avec l'ID de conteneur spécifique.Exécutez la commande sur la machine sur laquelles s'exécute l'agent. Si la commande
docker stop
réussit, l'ID du conteneur est renvoyé.
Une fois arrêté, l'agent apparaît dans la liste des agents du pool comme étant déconnecté.
Supprimer un agent
Pour supprimer des agents spécifiques, répertoriez ceux qui sont en cours d'exécution sur votre ordinateur :
docker container list --all --filter ancestor=gcr.io/cloud-ingest/tsop-agent
Transmettez ensuite les ID d'agent à transfer agents delete
:
gcloud transfer agents delete --ids=id1,id2,…
Pour supprimer tous les agents exécutés sur la machine, utilisez l'option --all
ou l'option --uninstall
. Les deux options suppriment tous les agents de la machine. L'option --uninstall
désinstalle également l'image Docker de l'agent.
gcloud transfer agents delete --all
gcloud transfer agents delete --uninstall
Détails du transfert du système de fichiers
Transferts incrémentiels
Le service de transfert de stockage commence tous les transferts en calculant les données présentes à la source et à la destination afin de déterminer quels fichiers sources sont nouveaux, mis à jour ou supprimés depuis le dernier transfert. Nous procédons ainsi afin de réduire la quantité de données envoyées depuis vos machines, d'utiliser efficacement la bande passante et de réduire les temps de transfert.
Pour détecter si un fichier a changé, nous vérifions la date et l'heure de la dernière modification et la taille du fichier source, et les comparons à celles enregistrées date de la dernière copie du fichier. Lorsque nous détectons un fichier nouveau ou modifié, nous copions l'intégralité de ce fichier vers sa destination. Pour en savoir plus sur la fraîcheur des fichiers, consultez la section Détails sur la cohérence des données.
Par défaut, nous détectons, mais n'agissons pas sur, les fichiers supprimés sur la source. Si vous choisissez l'option de synchronisation Supprimer les fichiers de destination qui n'existent pas également dans la source lors de la création ou de la modification, le transfert supprime l'objet correspondant dans la destination.
Si vous choisissez l'option de synchronisation Supprimer les fichiers de destination qui n'existent pas également dans la source, les fichiers supprimés accidentellement dans la source le sont également dans la destination. Pour éviter toute perte de données due à des suppressions accidentelles, nous vous recommandons d'activer la gestion des versions d'objets dans votre bucket de destination. Par la suite, si vous supprimez accidentellement un fichier, vous pouvez restaurer une ancienne version de vos objets dans Cloud Storage.
Détails sur la cohérence des données
Une opération de transfert réussie transfère tous les fichiers sources existants et n'ayant pas été modifiés pendant toute la durée d'exécution de l'opération. Les fichiers sources qui ont été créés, mis à jour ou supprimés pendant un transfert pourraient ne pas refléter ces modifications dans l'ensemble de données de destination.
Le service de transfert de stockage utilise la date et l'heure de la dernière modification d'un fichier ainsi que sa taille pour déterminer s'il a été modifié. Si un fichier est mis à jour sans modifier sa date ou sa taille de dernière modification, et que vous activez l'option delete-objects-from-source
, vous risquez de perdre les données de cette modification.
Lorsque vous utilisez la fonctionnalité delete-objects-from-source
, nous vous recommandons vivement de geler les écritures sur la source pendant la durée du transfert afin d'éviter toute perte de données.
Pour geler les écritures sur votre source, effectuez l'une des opérations suivantes :
- Clonez le répertoire que vous souhaitez transférer, puis utilisez le répertoire cloné en tant que source de transfert.
- Arrêtez les applications qui écrivent dans le répertoire source.
S'il est important de capturer les modifications survenues lors d'un transfert, vous pouvez relancer le transfert ou définir le système de fichiers source en lecture seule pendant l'exécution de l'opération.
Étant donné que Cloud Storage n'a pas la notion de répertoires, les répertoires sources vides ne sont pas transférés.