Os agentes do Serviço de transferência de armazenamento são aplicações executadas num contentor da Open Container Initiative (OCI) que coordenam com o Serviço de transferência de armazenamento para transferências que envolvem sistemas de ficheiros ou armazenamento compatível com S3.
Por predefinição, o serviço de transferência de armazenamento usa o Docker para criar e executar contentores OCI.
O serviço de transferência de armazenamento também suporta o Podman para a gestão de contentores. Tem de
instalar os agentes através do comando podman run
para usar o Podman.
Se a sua transferência não envolver um sistema de ficheiros ou um armazenamento compatível com S3, não precisa de configurar agentes.
Este documento descreve como administrar agentes de transferência nos seus servidores.
Vista geral
Os processos do agente são dinâmicos. Enquanto estiver a executar uma transferência, pode adicionar agentes para aumentar o desempenho. Os agentes iniciados recentemente juntam-se ao conjunto de agentes atribuído e realizam tarefas de transferências existentes. Pode usar esta opção para ajustar o número de agentes em execução ou para adaptar o desempenho das transferências à procura de transferências em constante mudança.
Os processos de agentes são um coletivo tolerante a falhas. Se um agente deixar de ser executado, os restantes agentes continuam a trabalhar. Se todos os agentes pararem, quando adicionar novos agentes, a transferência é retomada no ponto em que os agentes pararam. Isto permite-lhe evitar a monitorização de agentes, a repetição de transferências ou a implementação de lógica de recuperação. Pode aplicar patches, mover e dimensionar dinamicamente os seus conjuntos de agentes sem tempo de inatividade de transferência coordenando os agentes com o Google Kubernetes Engine.
Por exemplo, envia duas transferências enquanto dois agentes estão em execução. Se um dos agentes parar devido a um reinício da máquina ou a um patch do sistema operativo, o agente restante continua a funcionar. As duas transferências continuam a ser executadas, mas mais lentamente, uma vez que um único agente está a mover dados. Se o agente restante também parar, todas as transferências param de progredir, uma vez que não existem agentes em execução. Quando reinicia os processos do agente, as transferências são retomadas no ponto em que foram interrompidas.
Os processos do agente pertencem a um conjunto. Movem os seus dados em paralelo. Por este motivo, todos os agentes num conjunto têm de ter o mesmo acesso a todas as origens de dados que quer transferir.
Por exemplo, se estiver a transferir dados de um sistema de ficheiros específico, tem de montar o sistema de ficheiros em todas as máquinas que alojam agentes no seu conjunto de agentes. Se alguns agentes no seu conjunto conseguirem alcançar uma origem de dados e outros não, as transferências dessa origem de dados não vão ser bem-sucedidas.
Antes de começar
Antes de configurar as transferências, certifique-se de que configurou o acesso: para utilizadores e contas de serviço.
Se vai usar comandos gcloud
,
instale a CLI gcloud.
Instale e execute agentes de transferência
Recomendamos a instalação de, pelo menos, três agentes por conjunto de agentes, idealmente em máquinas separadas. Para mais informações sobre como determinar o número de agentes a executar, consulte o artigo Maximizar o desempenho dos agentes de transferência.
Não inclua informações confidenciais, como informações de identificação pessoal (IIP) ou dados de segurança, no prefixo do ID do agente. Os nomes dos recursos podem ser propagados para os nomes de outros Google Cloud recursos e podem ser expostos a sistemas internos da Google fora do seu projeto.Para instalar e executar agentes de transferência:
Google Cloud consola
Na Google Cloud consola, aceda à página Pools de agentes.
Selecione o conjunto de agentes ao qual quer adicionar o novo agente.
Clique em Instalar agente.
Siga as instruções para instalar e executar o agente.
Para mais informações sobre as opções de linha de comandos do agente, consulte o artigo Opções de linha de comandos do agente.
CLI gcloud
Para instalar um ou mais agentes através da CLI gcloud, execute o seguinte comando
gcloud transfer agents install
:
gcloud transfer agents install --pool=POOL_NAME --count=NUM_AGENTS \
--mount-directories=MOUNT_DIRECTORIES
A ferramenta apresenta-lhe todos os passos necessários para instalar os agentes. Este comando instala NUM_AGENTS agentes na sua máquina, mapeados para o nome do conjunto especificado como POOL_NAME, e autentica o agente através das suas credenciais gcloud
. O nome do conjunto tem de existir ou é devolvido um erro.
A flag --mount-directories
é opcional, mas vivamente recomendada. O valor é uma lista separada por vírgulas de diretórios no sistema de ficheiros aos quais conceder acesso ao agente.
A omissão desta flag monta todo o sistema de ficheiros no contentor do agente. Consulte
a
gcloud
referência
para mais detalhes.
Fontes compatíveis com S3
Quando instala agentes para usar com uma origem compatível com S3,
tem de fornecer credenciais da AWS como variáveis de ambiente, como os
valores de AWS_ACCESS_KEY_ID
e AWS_SECRET_ACCESS_KEY
, ou armazenadas como
credenciais predefinidas nos ficheiros de configuração do seu 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
Use uma chave de conta de serviço
Para executar agentes com uma chave de conta de serviço, use a opção --creds-file
:
gcloud transfer agents install --pool=POOL_NAME --count=NUM_AGENTS \
--creds-file=/relative/path/to/service-account-key.json
Mais informações
Para ver uma lista completa de flags opcionais, execute o comando
gcloud transfer agents install --help
ou leia a
referência gcloud transfer
.
Docker
Antes de usar o Docker para instalar agentes, siga as instruções para instalar o Docker.
O comando docker run
instala um agente. Para aumentar o número de agentes
no seu conjunto, execute este comando as vezes que forem necessárias.
Quando instala agentes, pode optar por fazer a autenticação através das gcloud
credenciais predefinidas ou com uma conta de serviço.
Credenciais predefinidas
Para permitir que o contentor Docker se autentique com as suas gcloud
credenciais predefinidas, crie um volume Docker que contenha um ficheiro com as suas credenciais
predefinidas da aplicação executando o seguinte comando:
sudo docker run -ti --name gcloud-config google/cloud-sdk gcloud auth application-default login
Em seguida, use o seguinte comando para instalar um agente, usando a flag --volumes-from
para montar o volume de credenciais 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
Autenticação da conta de serviço
Para instalar e executar agentes de transferência docker run
com credenciais da conta de serviço, especifique o caminho para a chave da conta de serviço no formato JSON com a flag --creds-file
.
O caminho tem de ter o prefixo da string /transfer_root
.
Consulte o artigo Crie e faça a gestão de chaves de contas de serviço para mais informações sobre as chaves de contas de serviço.
sudo docker run --ulimit memlock=64000000 -d --rm \ -v HOST_DIRECTORY:CONTAINER_DIRECTORY \ -v PATH/TO/KEY.JSON:/etc/gcloud/key.json:ro \ gcr.io/cloud-ingest/tsop-agent:latest \ --project-id=PROJECT_ID \ --creds-file=/etc/gcloud/key.json \ --hostname=$(hostname) \ --agent-pool=POOL_NAME
Opções e flags
Substitua as variáveis nos exemplos acima pelas seguintes informações:
HOST_DIRECTORY
é o diretório na máquina anfitriã a partir do qual pretende copiar. Pode usar mais do que uma flag-v
para especificar diretórios adicionais a partir dos quais copiar.CONTAINER_DIRECTORY
é o diretório mapeado no contentor do agente. Tem de ser igual aHOST_DIRECTORY
.PROJECT_ID
é o ID do projeto que está a alojar a transferência.POOL_NAME
é o nome do conjunto de agentes no qual instalar este agente. Se omitir esta flag, o agente é instalado no conjuntotransfer_service_default
do seu projeto.
O comando docker run
suporta flags adicionais.
--enable-mount-directory
monta todo o sistema de ficheiros no diretório/transfer_root
no contentor. Se--enable-mount-directory
for especificado, as restrições de diretório que usam a flag-v
não são aplicadas.--creds-file=/etc/gcloud/key.json
especifica o caminho para o ficheiro de credenciais da conta de serviço no formato JSON no contentor. Este ficheiro é montado pela flag-v <var>HOST_PATH/TO/KEY.JSON</var>:/etc/gcloud/key.json:ro
no comando.--enable-s3
especifica que este agente se destina a transferências a partir de armazenamento compatível com S3. Não é possível usar agentes instalados com esta opção para transferências de sistemas de ficheiros POSIX.Se a transferência for do AWS S3 ou de armazenamento compatível com o S3, transmita o ID da chave de acesso e a chave secreta através de variáveis de ambiente:
sudo docker run --ulimit memlock=64000000 -d --rm \ -v HOST_DIRECTORY:CONTAINER_DIRECTORY \ -v PATH/TO/KEY.JSON:/etc/gcloud/key.json:ro \ -e AWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID \ -e AWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY \ gcr.io/cloud-ingest/tsop-agent:latest \ --project-id=PROJECT_ID \ --creds-file=/etc/gcloud/key.json \ --hostname=$(hostname) \ --agent-pool=POOL_NAME
--gcs-api-endpoint=storage.LOCATION.rep.googleapis.com
especifica um ponto final regional do Cloud Storage. Quando é especificado um ponto final regional do Cloud Storage, todo o tráfego de transferência de dados através do agente permanece nessa Google Cloud região. Consulte o artigo Pontos finais regionais para ver detalhes.--env HTTPS_PROXY=PROXY
especifica um proxy de encaminhamento na sua rede. O valor dePROXY
é o URL HTTP e a porta do servidor proxy. Certifique-se de que especifica o URL HTTP e não um URL HTTPS para evitar o encapsulamento duplo de pedidos na encriptação TLS. Os pedidos com encapsulamento duplo impedem que o servidor proxy envie pedidos de saída válidos.--agent-id-prefix=ID_PREFIX
especifica um prefixo opcional que é adicionado ao ID do agente para ajudar a identificar o agente ou a respetiva máquina na Google Cloud consola. Quando é usado um prefixo, o ID do agente é formatado comoprefix + hostname + Docker container ID
.--log-dir=LOGS_DIRECTORY
modifica o diretório para o qual o agente escreve registos. O diretório predefinido é/tmp/
.Se não tiver especificado
--enable_mount_directory
, tem de prefixar este caminho com/transfer_root
. Por exemplo,/transfer_root/logs
.--max-physical-mem=MAX_MEMORY
: os agentes usam, por predefinição, um máximo de 8 GiB de memória do sistema. Se o valor predefinido não se adequar ao seu ambiente, pode especificar uma utilização máxima de memória relevante nos seguintes formatos:Valor: max-physical-mem
Definição de memória máxima 6g
6 gigabytes 6gb
6 gigabytes 6GiB
6 gibibytes --network=DOCKER_NETWORK
: especifique a rede Docker para este contentor. A especificação de--network=host
pode melhorar o desempenho ao reduzir a sobrecarga da rede, mas permite que o recipiente tenha acesso total à rede do anfitrião.
Podman
Antes de usar o Podman para instalar agentes, instale o Podman:
sudo apt-get update
sudo apt-get -y install podman
Quando instala agentes, pode optar por fazer a autenticação através das gcloud
credenciais predefinidas ou com uma conta de serviço.
Credenciais predefinidas
Para permitir que o contentor do agente faça a autenticação com as credenciais predefinidas da CLI do Google Cloud, crie um volume que contenha um ficheiro com as credenciais predefinidas da aplicação executando o seguinte comando:
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
Em seguida, use o seguinte comando para instalar um agente, usando a flag --volumes-from
para montar o volume de credenciais gcloud-config
.
O comando instala um agente. Para aumentar o número de agentes no seu conjunto, execute este comando novamente as vezes que forem necessárias.
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
Autenticação da conta de serviço
Para instalar e executar agentes de transferência através de credenciais da conta de serviço, tem de disponibilizar a chave da conta de serviço no formato JSON no contentor. Para isso:
- Monte a localização do anfitrião da chave em qualquer caminho no contentor. Por
exemplo:
-v $HOME/.config/gcloud/credentials.json:/key.json:ro
. Isto especifica que a chave está localizada na máquina anfitriã em$HOME/.config/gcloud/credentials.json
e deve ser montada como/key.json
no contentor. O símboloro
indica que o ficheiro é disponibilizado como só de leitura para o contentor. - Especifique o caminho do contentor da chave como o valor de
--creds-file
. No exemplo do passo anterior, especifique--creds-file=/key.json
.
Consulte o artigo Crie e faça a gestão de chaves de contas de serviço para mais informações sobre as chaves de contas de serviço.
sudo podman run --ulimit memlock=64000000 -d --rm \ -v HOST_DIRECTORY:CONTAINER_DIRECTORY \ -v HOST_PATH/TO/KEY.JSON:/etc/gcloud/key.json:ro \ gcr.io/cloud-ingest/tsop-agent:latest \ --project-id=PROJECT_ID \ --creds-file=/etc/gcloud/key.json \ --hostname=$(hostname) \ --agent-pool=POOL_NAME
Opções e flags
Substitua as variáveis nos exemplos acima pelas seguintes informações:
HOST_DIRECTORY
é o diretório na máquina anfitriã a partir do qual pretende copiar. Pode usar mais do que uma flag-v
para especificar diretórios adicionais a partir dos quais copiar.CONTAINER_DIRECTORY
é o diretório mapeado no contentor do agente. Tem de ser igual aHOST_DIRECTORY
.PROJECT_ID
é o ID do projeto que está a alojar a transferência.POOL_NAME
é o nome do conjunto de agentes no qual instalar este agente. Se omitir esta flag, o agente é instalado no conjuntotransfer_service_default
do seu projeto.
O comando podman run
suporta flags adicionais.
--enable-mount-directory
monta todo o sistema de ficheiros no diretório/transfer_root
no contentor. Se--enable-mount-directory
for especificado, as restrições de diretório que usam a flag-v
não são aplicadas.--creds-file=/etc/gcloud/key.json
especifica o caminho para o ficheiro de credenciais da conta de serviço no formato JSON no contentor. Este ficheiro é montado pela flag-v <var>HOST_PATH/TO/KEY.JSON</var>:/etc/gcloud/key.json:ro
no comando.--enable-s3
especifica que este agente se destina a transferências a partir de armazenamento compatível com S3. Não é possível usar agentes instalados com esta opção para transferências de sistemas de ficheiros POSIX.Se a transferência for do AWS S3 ou de armazenamento compatível com o S3, transmita o ID da chave de acesso e a chave secreta através de variáveis de ambiente:
-e AWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID \ -e AWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY ```
--env HTTPS_PROXY=PROXY
especifica um proxy de encaminhamento na sua rede. O valor dePROXY
é o URL HTTP e a porta do servidor proxy. Certifique-se de que especifica o URL HTTP e não um URL HTTPS para evitar o encapsulamento duplo de pedidos na encriptação TLS. Os pedidos com encapsulamento duplo impedem que o servidor proxy envie pedidos de saída válidos.--agent-id-prefix=ID_PREFIX
especifica um prefixo opcional que é adicionado ao ID do agente para ajudar a identificar o agente ou a respetiva máquina na Google Cloud consola. Quando é usado um prefixo, o ID do agente é formatado comoprefix + hostname + OCI container ID
.--log-dir=LOGS_DIRECTORY
modifica o diretório para o qual o agente escreve registos. O diretório predefinido é/tmp/
.Se não tiver especificado
--enable_mount_directory
, tem de prefixar este caminho com/transfer_root
. Por exemplo,/transfer_root/logs
.--max-physical-mem=MAX_MEMORY
: os agentes usam, por predefinição, um máximo de 8 GiB de memória do sistema. Se o valor predefinido não se adequar ao seu ambiente, pode especificar uma utilização máxima de memória relevante nos seguintes formatos:Valor: max-physical-mem
Definição de memória máxima 6g
6 gigabytes 6gb
6 gigabytes 6GiB
6 gibibytes --network=DOCKER_NETWORK
: especifique a rede Docker para este contentor. A especificação de--network=host
pode melhorar o desempenho ao reduzir a sobrecarga da rede, mas permite que o recipiente tenha acesso total à rede do anfitrião.
Resolução de problemas
Se a sua configuração do SELinux exigir que sejam colocadas etiquetas no conteúdo do volume montado num contentor, adicione a flag :Z
ao volume:
sudo podman run --ulimit memlock=64000000 -d --rm \
-v HOST_DIRECTORY:CONTAINER_DIRECTORY:Z \
-v HOST_PATH/TO/KEY.JSON:/etc/gcloud/key.json:ro \
gcr.io/cloud-ingest/tsop-agent:latest \
--project-id=PROJECT_ID \
--creds-file=/etc/gcloud/key.json:ro \
--hostname=$(hostname) \
--agent-pool=POOL_NAME
Sem uma etiqueta, o sistema de segurança pode impedir que os processos em execução no contentor usem o conteúdo. Por predefinição, o Podman não altera as etiquetas definidas pelo SO.
Confirme as associações de agentes
Para confirmar que os agentes estão ligados:
Na Google Cloud consola, aceda à página Pools de agentes.
São apresentados os seus conjuntos de agentes, com o número de agentes ligados.
Selecione um conjunto de agentes para ver detalhes sobre os agentes associados.
Se um novo agente não aparecer na página do conjunto de agentes no prazo de 10 minutos após a sua criação, consulte o artigo Os agentes não estão ligados.
Monitorize a atividade dos agentes
Pode usar o Cloud Monitoring para monitorizar a atividade do agente.
A monitorização está disponível nas dimensões project
, agent_pool
e agent_id
.
Com estes dados de monitorização, pode configurar alertas para receber notificações sobre potenciais problemas com a sua transferência. Para o fazer, crie um alerta numa das seguintes métricas Google Cloud :
Nome da métrica | O que descreve | Usos sugeridos |
---|---|---|
storagetransfer.googleapis.com/agent/transferred_bytes_count | Mede a rapidez com que um agente específico move os dados em todas as tarefas que serve num determinado momento. | Alerta para quedas no desempenho. |
storagetransfer.googleapis.com/agent/connected | Um valor booleano que é Verdadeiro para cada agente que Google Cloud recebeu uma mensagem de sinal de vida recente. |
|
Pare um agente
Para parar um agente, execute docker stop
no ID do contentor Docker do agente. Para encontrar o ID e parar o agente:
Na Google Cloud consola, aceda à página Pools de agentes.
Selecione o conjunto de agentes que contém o agente a parar.
Selecione um agente na lista. Use o campo Filtrar para pesquisar por prefixos, estado do agente, idade do agente e muito mais.
Clique em Parar agente. É apresentado o comando
docker stop
com o ID do contentor específico.Execute o comando na máquina na qual o agente está a ser executado. Um comando
docker stop
bem-sucedido devolve o ID do contentor.
Depois de parado, o agente é apresentado na lista de conjuntos de agentes como Desligado.
Reinicie um agente
Não é possível reiniciar os agentes parados. Em alternativa, instale novos agentes no conjunto de agentes.
Elimine um agente
Para eliminar agentes específicos, liste os agentes que estão a ser executados no seu computador:
docker container list --all --filter ancestor=gcr.io/cloud-ingest/tsop-agent
Em seguida, transmita os IDs dos agentes para transfer agents delete
:
gcloud transfer agents delete --ids=id1,id2,…
Para eliminar todos os agentes em execução na máquina, use o comando --all
ou o comando --uninstall
. Ambas as flags eliminam todos os agentes na máquina;
a flag --uninstall
desinstala adicionalmente a imagem do Docker do agente.
gcloud transfer agents delete --all
gcloud transfer agents delete --uninstall
Detalhes da transferência do sistema de ficheiros
Transferências incrementais
O Serviço de transferência de armazenamento inicia todas as transferências calculando os dados presentes na origem e no destino para determinar que ficheiros de origem são novos, foram atualizados ou foram eliminados desde a última transferência. Fazemos isto para reduzir a quantidade de dados que enviamos das suas máquinas, para usar a largura de banda de forma eficaz e para reduzir os tempos de transferência.
Para detetar se um ficheiro foi alterado, verificamos a hora da última modificação e o tamanho do ficheiro de origem, e comparamos esses dados com a hora da última modificação e o tamanho registados quando o ficheiro foi copiado pela última vez. Quando detetamos um ficheiro novo ou alterado, copiamos o ficheiro completo para o destino. Para mais informações sobre a atualidade dos ficheiros, consulte os Detalhes da consistência dos dados.
Por predefinição, detetamos, mas não tomamos medidas em relação aos ficheiros eliminados na origem. Se escolher a opção de sincronização Eliminar ficheiros de destino que também não estejam na origem quando criar ou editar, a transferência elimina o objeto correspondente no destino.
Se escolher a opção de sincronização Eliminar ficheiros de destino que também não estão na origem, os ficheiros eliminados acidentalmente na origem também são eliminados no destino. Para evitar a perda de dados devido a eliminações acidentais, recomendamos que ative a criação de versões de objetos no seu contentor de destino se optar por usar esta opção. Em seguida, se eliminar um ficheiro acidentalmente, pode restaurar os seus objetos no Cloud Storage para uma versão mais antiga.
Detalhes da consistência dos dados
Uma operação de transferência bem-sucedida transfere todos os ficheiros de origem que existiam e não foram modificados durante todo o tempo de execução da operação. Os ficheiros de origem que foram criados, atualizados ou eliminados durante uma transferência podem ou não ter essas alterações refletidas no conjunto de dados de destino.
O Serviço de transferência de armazenamento usa a hora e o tamanho da última modificação de um ficheiro para determinar se este foi alterado. Se um ficheiro for atualizado sem alterar a hora da última modificação nem o tamanho, e ativar a opção delete-objects-from-source
, pode perder dados dessa alteração.
Quando usar a funcionalidade delete-objects-from-source
, recomendamos vivamente que
congele as gravações na origem durante a transferência para se proteger
contra a perda de dados.
Para congelar as gravações na sua origem, faça uma das seguintes ações:
- Clone o diretório que pretende transferir e, em seguida, use o diretório clonado como origem da transferência.
- Interrompa as aplicações que escrevem no diretório de origem.
Se for importante captar as alterações ocorridas durante uma transferência, pode voltar a executar a transferência ou definir o sistema de ficheiros de origem como só de leitura enquanto a operação está em execução.
Uma vez que o Cloud Storage não tem a noção de diretórios, os diretórios de origem vazios não são transferidos.