BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Spotify abre o código do cstar: sua ferramenta de orquestração Cassandra

Spotify abre o código do cstar: sua ferramenta de orquestração Cassandra

O Spotify recentemente abriu o código do cstar, sua ferramenta de orquestração Cassandra. Cstar é uma ferramenta de linha de comando para execução de scripts em todos os hosts de um cluster Cassandra.

O cstar surgiu da necessidade de executar comandos shell em nós Cassandra. Esses comandos shell normalmente estão relacionados a performance, segurança, consistência, atualizações, etc.

De acordo com o Spotify, durante 2017, eles chegaram a ter 3000 nós Cassandra, então a necessidade de ter uma solução segura e eficiente para executar comandos shell se tornou urgente. Um exemplo de tarefa que se tornou um pesadelo era a atualização de todos os nós Cassandra, que exigiu as seguintes etapas:

  • Limpar todos snapshots, para ter espaço em disco suficiente para terminar o upgrade;
  • Criar um novo snapshot, para poder realizar rollback;
  • Desabilitar puppet runs automatizados;
  • Parar o Cassandra;
  • Executar o puppet de uma branch personalizado do git, a fim de atualizar o pacote;
  • Iniciar o Cassandra novamente;
  • Atualizar o system.schema_columnfamilies para o formato JSON;
  • Executar `nodetool upgradesstables`, que dependendo da quantidade de dados do nós, poderia demorar horas para finalizar;
  • Remover o snapshot de rollback.

Além disso, há uma série de outros problemas relacionados ao lidar com os nós do Cassandra, como falhas de rede, interrupções de conexão ssh, operações intensivas da CPU, reiniciar processos e nós do Cassandra sem afetar desempenho e disponibilidade, ou execução parcialmente concluída (tarefa executada com sucesso somente em alguns nós).

No início do Spotify, a maneira mais comum de executar comandos nos nós Cassandra era simplesmente digitar o comando em vários terminais.

O cstar visa resolver estes problemas. Para usar o cstar, todas máquina envolvidas devem estar executando algum tipo de sistema UNIX, como o OSX ou Linux, e a máquina executando o cstar deve ter o Python 3.

O cstar é executado através do comando cstar, da seguinte maneira:

# cstar COMMAND [HOST-SPEC] [PARAMETERS]

O HOST-SPEC especifica em quais nós executar o script. Existem três formas de especificar um HOST-SPEC:

  • --seed-host diz ao cstar para conectar em um específico host e obter a topologia completa dele, e então executar o script em todos os nós do cluster;
  • --host especifica uma lista exata de hosts;
  • --host-file aponta para um arquivo contendo uma lista separada de hosts.

O cstar salva automaticamente a saída padrão, erros e o status de saída de cada comando executado em um host Cassandra. Os resultados (job status) ficam disponíveis no diretório home do usuário em .cstar/jobs/JOB_ID/HOSTNAME na máquina no qual o ctar está em execução.

Abaixo alguns exemplos de comandos em um cluster:

# cstar run --command='service cassandra restart' --seed-host some-host
# cstar puppet-upgrade-cassandra --seed-host some-host --puppet-branch=cass-2.2-upgrade

Abaixo um exemplo de um script que atualiza um cluster Cassandra executando puppet em uma branch diferente, então reinicia o nó e finalmente atualiza os stables:

# !/usr/bin/env bash
# C* cluster-parallel: true                                                                                                                                                                                    
# C* dc-parallel: true                                                                                                                                                                                         
# C* strategy: topology                                                                                                                                                                                        
# C* description: Upgrade one or more clusters by switching to a different puppet branch                                                                                                                       
# C* argument: {"option":"--snapshot-name", "name":"SNAPSHOT_NAME", "description":"Name of pre-upgrade snapshot", "default":"preupgrade"}                                                                      
# C* argument: {"option":"--puppet-branch", "name":"PUPPET_BRANCH", "description":"Name of puppet branch to switch to", "required":true}                                                                       

nodetool snapshot -t $SNAPSHOT_NAME
sudo puppet --branch $PUPPET_BRANCH
sudo service cassandra restart
nodetool upgradesstables

A lista completa dos comandos cstar e mais detalhes podem ser encontrados no repositório do cstar.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT