EC2 Anexar armazenamento de instâncias no início

1

Estou almoçando uma instância para hospedar um nó do Cassandra e estou testando alguns scripts de desligamento e inicialização. A instância foi lançada da datastax PV AMI 'ami-8932ccfe'. Eu adicionei 8GB de armazenamento SSD EBS para root e o iniciei. Na inicialização inicial, o Instance Store (unidade efêmera) estava conectado e tudo estava bem. Parei a instância e a reiniciei novamente, e a loja de instâncias desapareceu e a seguinte mensagem de erro foi exibida ao fazer login:

ERROR mount -a:

Em seguida terminei a instância, relançou a mesma AMI e configuração, depois fiz uma AMI de instantâneo e adicionei o Instance Store na tentativa de "assá-la" na instância. No entanto, quando paramos e começamos, recebo o mesmo problema.

Meu problema é que eu só tenho permissão para parar e iniciar instâncias, não posso criá-las sozinho, então tenho que continuar incomodando uma faculdade para me ajudar a lançá-las. Eu quero ser capaz de parar a instância no final do dia e reiniciá-lo de manhã, ou seja, durante o horário de trabalho para reduzir os custos. O servidor em questão é apenas uma instância de desenvolvimento e por isso não estou preocupado com a perda de dados, tudo que eu preciso executar na inicialização são alguns scripts para criar as tabelas. No entanto, como o armazenamento de instâncias não é anexado automaticamente na inicialização, o Cassandra não instala.

Alguém pode me dizer como criar uma instância de modo que o armazenamento de instâncias seja anexado automaticamente depois de uma parada e início?

Depois de iniciar a instância, usei o seguinte para obter alguns metadados, se isso ajudar:

curl http://169.254.169.254/latest/meta-data/block-device-mapping/
ami
ephemeral0
root

curl http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0
sdb

Felicidades, Alexei Blue.

    
por Alexei Blue 10.07.2014 / 11:36

2 respostas

1

Os volumes do armazenamento de instâncias são excluídos sempre que a instância é interrompida. Não tenho certeza de qual datastax de distribuição está sendo executado, mas a maneira correta de fazer isso é criar um script de inicialização que:

  1. verifique se está montado
  2. se não, obtenha as informações da unidade ephemeral0 a partir dos meta-dados
  3. se não, formate o volume e monte-o

Se você não quiser criar um script de inicialização para fazer isso, poderá inserir algumas linhas em /etc/rc.local para realizar o mesmo. Algo como:

mount | awk '{print $3}' | grep -sq /mnt
test $? && exit 0
curl -s http://169.254.169.254/latest/meta-data/block-device-mapping/ | grep -sq ephemeral0
test $? && DEV='curl -s http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0'
test -n "$DEV" && mkfs -t ext4 /dev/$DEV
test $? && mount /dev/$DEV /mnt

Este script é muito sobre trilhos e não pode se desviar devido a erros. Você pode querer escrever um mais robusto.

    
por 11.07.2014 / 17:16
0

@ O script do dialtOne leva-me a uma nova pesquisa e encontrei este script no github.

Essencialmente, minha instância está usando uma convenção de esquema de dispositivo diferente xvdb

Uma coisa que eu tive que mudar nesse script é a linha 62:

mdadm --create --verbose /dev/md0 --level=0 -c256 --raid-devices=$ephemeral_count $drives

Também o seguinte:

mdadm --create --verbose /dev/md0 --level=0 -c256 --force --raid-devices=$ephemeral_count $drives

Se a sua instância tiver uma unidade efêmera como a minha, use --force para executar o comando.

Após o script terminar, fiquei muito satisfeito em ver isso:

df -h
...
/dev/md0  30G  173M  28G  1%  /mnt

Obrigado mais uma vez pela sua resposta @dialtOne.

Felicidades, Alexei Blue

    
por 12.07.2014 / 01:22