Aws ec2 ana bilgisayar adı değiştiğinde veya arttığında nginx akış yukarı sunucu listesini otomatik olarak güncelleme


16

AWS'de otomatik ölçeklendirme ayarlamak istiyorum. Elastik Yük Dengeleyici kullanmak istemiyorum.

Amazon'da otomatik arama, performansı korumak için talep artışlarında sorunsuz bir şekilde EC2 örnekleri oluşturur ve maliyetleri en aza indirmek için talep gecikmeleri sırasında otomatik olarak azalır.

Bu EC2 bulut sunucuları otomatik olarak oluşturulduğundan, ana bilgisayar adları NGINX tarafından bilinmiyor.

Biliyorum ve zaten 10 EC2 örneğine nginx içinde yukarı akış kurulum var.

Otomatik ölçekleme EC2 örneklerini eklediğinde / güncellediğinde / sildiğinde, yukarı akış nginx yapılandırmamda otomatik olarak sunucu adları ekleyebilir / güncelleyebilir / silebilirim .


1
Sorunuzdan "otomatik ölçeklendirme" yi kaldırmanız gerekiyor. Otomatik ölçeklendirme bir AWS terimidir. Ne demek istediğinizi, bir LB gibi davranan nginx'inize daha fazla yukarı akış düğümü ekleyerek otomatik olarak (yatay olarak) ölçeklendirmek istediğinizi düşünüyorum ve yukarı akış düğümleri eklendiğinde / silindiğinde / değiştirildiğinde nginx yapılandırmanızı otomatik olarak nasıl değiştireceğinizi soruyorsunuz. Bu durumda lütfen sorunuzu buna göre düzenleyin.
talonx

aslında, otomatik aramanın ne olduğunu biliyorum ve bunu söylemekten bahsediyorum. İkisini de karıştırmak istiyorum. Soruyu güncelleyeceğim.
Luis Lobo Borobia

1
Soru şu anda, niyetiyle daha açık. Yeniden açmak için oy vermek istedim, ancak bir seçenek göremiyorum - sanırım henüz yeterli temsilcim yok.
talonx

Thank you @talonx Umarım başkaları benim cevabımı bulmak için oy kullanabilir
Luis Lobo Borobia

1
AWS otomatik ölçeklendirme bildirimlerini (SNS kullanılarak teslim edilir) - yeni oluşturulan / sonlandırılmış örneğin ana bilgisayar adını döndürdüğü varsayılarak - ve nginx yapılandırmanızı güncellemek ve yeniden yüklemek için üçüncü taraf nginx API'lerinden birini birleştirebileceğinizi düşünüyorum. Belirsiz olduğum için özür dilerim - Otomatik ölçeklendirme API'sına pek aşina değilim.
talonx

Yanıtlar:


7

Bu, SNS, EC2 ve Otomatik Ölçeklendirme hizmetini kullanarak Amazon SDK (neredeyse onunla yaptım, github'a koyacağım) kullanılarak elde edilebilir.

Bunu başarmak için aşağıdaki adımları izledim:

  1. HTTP bildirimini etkinleştir ve web sunucuma abone ol.
  2. Sunucuyu sonlandırmak için otomatik ölçeklendirme grubuma 1 dakikalık kalp atışı (sonlandırmadan önce 1 dakika beklemek) ile bir yaşam döngüsü kancası eklendi
  3. İletinin ne tür bir ileti olduğunu algılamak üzere ayrıştırmak için bir dizin dosyası oluşturuldu (örn. Başlat veya Sonlandır)
  4. Olay türü karar verildikten sonra, örneğin özel ipini almak için EC2'yi sorguladım
  5. Başlatma durumunda, başlık 200 alınana kadar bekleyin ve ip'i nginx yapılandırmasına ekleyin ve yeniden yükleyin
  6. Sonlandırma durumunda IP'yi yapılandırmadan kaldırın ve nginx'i yeniden yükleyin

Lütfen betiği burada bulabilirsiniz https://github.com/singhupendra/aws-autoscale


Bunu github'da yayınlama şansın var mı? Aynı şeyi yapmaya çalışıyorum ve herhangi bir yardım takdir edilecektir.
Aaron


2

Teşekkürler @talonx, Bazı araştırmalar yaptım, Amazon Autoscale'in mevcut otomatik ölçeklendirme grubu durumunu sorgulamak için bir API'si var ve üyelerini numaralandırıyor. Örnek kimliği ( http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/api_requests.html#query-example ) döndürür , ardından sunucu adını ( http: // docs) almak için açıklama araçlarını kullanabilirsiniz .aws.amazon.com / AWSEC2 / latest / CommandLineReference / ApiReference-cmd-DescribeInstances.html ) ve son olarak akış yukarı içerme dosyasını yeniden oluşturun. Bu görevleri yerine getiren bir işlemi başlatmak için Otomatik Ölçeklendirme bildirimlerini algılayabilirim.

Hala uygulamadı ama gitmek için bir yol.

SNS ile Otomatik Hesaplama da kullanılabilir http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/ASGettingNotifications.html


Temelde bunu yaptım. Her N dakikada bir çalışan yakut bir senaryo yazdım. AWS SDK'yı kullanarak ASG üyelerini sorgular ve bir ERB şablonu kullanarak yeni bir yapılandırma oluşturur. Yeni yapılandırma geçerli yapılandırmadan farklıysa, yerine kopyalar ve arka plan programına (benim durumumda haproxy) yapılandırmasını yeniden yüklemesini söyler. Örneklerin, sonlandırıldıktan sonra ASG'de bir süre kaldığını unutmayın, bu nedenle instance.status ==: çalışıyor olduğundan emin olun. Ayrıca, örneğin, isteklerin sunulması için örnek başlatıldıktan sonra N dakika sürüyorsa, şu ana kadar kullanmadığını unutmayın> instance.launch_time + N
Mark Wagner

Teşekkürler @MarkWagner. Bu senaryoyu bir yerlerde paylaşma ihtimaliniz var mı? Gist, github? Teşekkürler!
Luis Lobo Borobia

Bu senaryoda hiç şansın oldu mu? Github'da veya başka bir yerde bir örnek var mı?
Aaron

Hayır ama şu anda nginx-plus (ücretli sürüm) buna daha fazla izin veriyor.
Luis Lobo Borobia

1

Henüz kendimi bu uygulanmadı, ama ben kullanarak içine arıyorum Tekrar Yapılandırma On-the-fly ait Nginx Plus'ın . AMI veya bir Otomatik Ölçekleme Grubu örneği oluşturan yapılandırma yönetiminin (Kukla, Tuz veya benzeri) NGiNX yeniden yapılandırma API'sına (belki de dahili bir Route53 etki alanı adı aracılığıyla erişebileceğini düşünüyorum) kullanılması gerekir) ve ters proxy için kendisini yukarı akış kümesine ekleyin. Bundan sonra NGiNX'in yerleşik sağlık kontrolü bu [eklenen] örnek için devralacak ve kullanılamaz duruma gelmesi durumunda bırakacaktır. Bu en temiz çözüm gibi görünüyor ve örneği eklemede gecikme yok ve NGiNX Plus bant dışı sağlık kontrolü içerdiğinden, düşürmede neredeyse hiç gecikme yok.

Bu yaklaşım, daha küçük kurulumlar için hem kurulum / yönetim hem de gerekli EC2 örnekleri açısından genellikle çok fazla yük gibi görünen bir otomatik keşif sistemi (Consul, Serf veya benzeri) kurmaya ihtiyaç duymaz. Örneğin Konsolos, en az üç vakanın kararlı olmasını gerektiriyor. Serf belki de ASG örneklerinin kendileri üzerinde çalışabilir, ancak hala bunu sürdürmenin ek yükü vardır ve ASG bir veya iki örneğe ölçeklenirse, çekirdeği kaybedersiniz.

Son olarak, bu otomatik ölçeklendirme grubu değişikliklerinin, belki de yük dengeleme için kullanılan NGiNX sunucularında otomatik bildirimi ile birleştirilebilir. Bu bildirimle tetiklenen bir dinleyici (Upendra'nın da bahsettiği bu olabilir), anında anında anında değişiklik API'sı aracılığıyla yeni örneği NGiNX'e ekleyebilir. NGiNX Plus'ın maliyetinin yanı sıra, neden ilk etapta herkes Elastik Yük Dengeleyiciyi neden kullanacaktır diye merak ediyor.

Düzenleme 2015/12/07: ngx_openresty 'ın dengeleyici-by-lua ( bu GitHub iplik bakınız ) teklifleri a / eklerken Nginx memba grubundan sunucularını kaldırmak için başka bir olası açık kaynak çözümü. Henüz bunu kendim denemedim, ancak bu yazıda tökezleyen herkes için bir söz eklemek istedim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.