Come migrare un'istanza standard EC2 + EBS per individuare l'istanza?

Sto giocando con istanze spot EC2, con l'ultimo scopo di migrare un'istanza standard che ospita un sito web ad un'istanza a livello (sì, sono ben consapevole che questo non è proprio quello che riguarda i casi, ma in questo caso io sono abbastanza disposto a scambiare il prezzo per la disponibilità).

Tuttavia, sono stato un po 'sorpreso di scoprire che quando la soglia di prezzo viene attraversata, l'istanza spot viene interrotta, non arrestata, e anzi che è semplicemente imansible interrompere un'istanza di posto, solo per terminare.

  • Come utilizzare l'archiviazione di volumi di archivio di istanze in Amazon EC2?
  • Come consentire il bilanciatore di carico elastico attraverso la port 80 nei gruppi di sicurezza?
  • Come creare un nuovo AMI pubblico per le windows con una password random?
  • non può iniziare a giocare! server su ec2 (play! framework)
  • Come affrontare un'istanza EC2 sia dal datacenter sia all'interno che all'esterno?
  • PHP installare su Amazon Linux AMI pulito
  • Quindi: esiste un metodo (consigliato) per get le istanze generate da richieste istantanee di spot per semplicemente associarsi a un particolare volume EBS durante la creazione, in modo che lo stato macchina completo possa essere semplicemente rovesciato in una serie di istanze spot? O devo fondamentalmente fraintendere quali sono le istanze spot?

    3 Solutions collect form web for “Come migrare un'istanza standard EC2 + EBS per individuare l'istanza?”

    Innanzitutto, mi permetta di chiarire alcuni punti. Come ha sottolineato, le istanze spot non sono destinate a essere eseguite 24 ore su 24, 7 giorni su 7 – sono destinati a fornire una capacità di calcolo supplementare per un breve lasso di tempo a un costo inferiore. In sostanza, sono destinati a compiti che possono essere suddivisi in piccoli pezzi, quindi un'istanza terminata non avrà un impatto significativo sull'attività complessiva.

    Detto questo, ho precedentemente eseguito un'istanza utilizzando il model di richiesta spot – il suo solito tempo di utilizzo è stato di circa 3 mesi – e in genere avrei superato di circa 15 volte il prezzo medio di mercato. Mentre questo era un approccio abbastanza conveniente, ho scoperto che mentre più persone impiegavano la stessa tecnica, la volatilità dei prezzi è aumentata fino al punto che non era più vantaggiosa per un'istanza riservata.

    Il prezzo spot medio tende a spostarsi intorno al costo orario di un'istanza riservata di utilizzo medio. Facendo la math in base ai prezzi spot attuali rispetto alle istanze di utilizzo pesante, è ansible get quanto segue:

    +-------------+-----------------------------+------------------------------+----------+ | | 1 year | 3 year | Spot | +-------------+-----------------------------+------------------------------+----------+ | Small | $0.016/h + $195 = $0.0383/h | $0.013/h +$300 = $0.0244/h | $0.027/h | | Medium | $0.032/h + $390 = $0.0765/h | $0.026/h+$600 = $0.0488/h | $0.038/h | | Large | $0.064/h + $780 = $0.153/h | $0.052/h + $1200 = $0.0977/h | $0.108/h | | Extra Large | $0.128/h + $1560 = $0.306/h | $0.104/h + $2400 = $0.195/h | $0.216/h | +-------------+-----------------------------+------------------------------+----------+ 

    È evidente che in molti casi l'istanza di utilizzo pesante di 3 anni esegue un ritardo inferiore all'attuale prezzo spot (sobject a volatilità). Dalla mia esperienza, il prezzo effettivo medio effettivo tende ad essere alless il 50% superiore al valore di mercato di base, in quanto non sono rari i picchi significativi.

    Ora, per provare e rispondere alla tua domanda:

    Sei corretto che le istanze spot non possono essere fermate – in qualche modo che concorda con l'intera premessa dietro le istanze spot. Tradizionalmente, un'istanza creerà i volumi EBS che utilizza da istantanee, ma è ansible scrivere il process di albind un volume EBS. Ho usato per usare questo script per impostare 2 volumi EBS in un RAID0 (sono abbastanza sicuro che ho modificato da qualche script che ho trovato, ma non riesco a trovare l'originale al momento):

     #! /bin/sh # # /etc/init.d/mountec2vol # # chkconfig: 234 20 50 # description: Assigns an EC2 EBS Volume to a device and mounts the device # # To add this as a service run: # /sbin/chkconfig --add mountec2vol # # VARS # VOL1="vol-xxxxxxxa" VOL2="vol-xxxxxxxb" DEV1="/dev/sdh1" DEV2="/dev/sdh2" MOUNT_POINT="/raid" export PS1="[\T] [\W]# " export JAVA_HOME=/usr/java/jre1.6.0_16 export EC2_HOME=/etc/ec2/apitools export PATH=$PATH:$EC2_HOME/bin export EC2_PRIVATE_KEY=/root/.ec2/pk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem export EC2_CERT=/root/.ec2/cert-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem MAX_TRIES=10 # start/stop functions for OS start() { touch /var/lock/subsys/mountec2vol INSTANCE=`curl http://169.254.169.254/latest/meta-data/instance-id 2> /dev/null` CTR=0 /bin/echo "Mounting Elastic Block Store Volumes." ec2-attach-volume $VOL1 -i $INSTANCE -d $DEV1 while [ ! -e "$DEV1" ]; do /bin/sleep 1 CTR=`expr $CTR + 1` if [ $CTR -eq $MAX_TRIES ] then /bin/echo "WARNING: Cannot attach volume $VOL1 to $DEV1 -- Giving up after $MAX_TRIES attempts" exit 1 fi done ec2-attach-volume $VOL2 -i $INSTANCE -d $DEV2 while [ ! -e "$DEV2" ]; do /bin/sleep 1 CTR=`expr $CTR + 1` if [ $CTR -eq $MAX_TRIES ] then /bin/echo "WARNING: Cannot attach volume $VOL2 to $DEV2 -- Giving up after $MAX_TRIES attempts" exit 1 fi done depmod -a modprobe raid0 mdadm --assemble --verbose /dev/md0 /dev/sdh1 /dev/sdh2 if [ ! -d $MOUNT_POINT ]; then mkdir $MOUNT_POINT fi /bin/mount /dev/md0 $MOUNT_POINT } stop() { /bin/echo "Unmounting Elastic Block Store Volumes." rm -f /var/lock/subsys/mountec2vol /bin/umount $MOUNT_POINT mdadm -S /dev/md0 ec2-detach-volume $VOL1 ec2-detach-volume $VOL2 } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 5 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac exit 0 

    Questo è stato per CentOS, ma immagino che sarebbe abbastanza facile adattarsi alla maggior parte degli altri Linux. Modificare la versione Java e rimuovere gli attributi RAID (e modificare il punto di assembly) e sarai bene andare. Questo verrà quindi configurato come script init per l'esecuzione all'avvio dell'istanza. Un modo alternativo per farlo sarebbe quello di passare gli ID del volume EBS come dati utente di istanza, che consentirebbe una maggiore flessibilità.

    Va notato che questo, ovviamente, non functionrà per il volume EBS di origine – questa impostazione presuppone un volume di root prevalentemente fisso, con i dati mantenuti su un mount-point separato. È sempre ansible impostare il volume radice EBS da ec2-request-spot-instances --block-device-mapping utilizzando il parametro di --block-device-mapping .

    Quello che stai cercando può essere realizzato utilizzando l'API , non credo sia ansible utilizzare l'automazione fornita da Amazon per farlo. Devi scrivere per te. È interamente ansible scrivere uno script per creare una nuova istanza spot e associare un volume specifico EBS ad esso.

    Quello che non sarà ansible eseguire è la migrazione dello stato macchina completo, dovrai comunque causare interruzioni per creare nuove istanze spot.

    Controlla https://github.com/atbranchs/ec2-spotter

    Dal README:

    EC2-Spotter è un'utilità che raggruppa il meglio di entrambi i mondi – Spot Pricing con la semplicità (file system persistente EBS) di On Demand e istanze riservate. Questo suona come truffare, ma a quanto pare non è vietato dal Amazon Terms Of Service.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.