Cloud Computing

Amazon EC2 -Elastic Compute Cloud Servisi Bölüm 4

Bu uygulamamızda yapacaklarımız;

  • Amazon EC2’da oluşturduğumuz Ubuntu Server’ın Snapshot’ını alacağız.
  • Alığımız Snapshot üzerinden private Amazon Macine Image(AMI) oluşturacağız
  • Oluşturduğumuz AMI’ı kullanrak yeni bir ınstance oluşturacağız.
  • AMI’ ile kurduğumuz sunucuyla bilrikte Elastic Load Balancer (ELB) konfigüre ederek nasıl çalıştığını göreceğiz.
  • Son olarak EC2 AutoScaling’i ortamımıza uygulayacağız.
  • Snapshot dediğimiz işlem bir makinenin o andaki bire bir kopyasını alma işlemidir. Snapshot alırken dikkat etmemiz gereken en önemli konu eğer root diskin snapshotını alacaksak EC2 instance stop etmemiz gerekiyor çünkü snapshot aldığımızda instance çalışıyorsa bir update veya bir işlem devam ediyorken alırsanız o snapshot ile kuracağınız sistemin açılmama durumu çok yüksektir. Bu nedenle EC2 instance için snapshot alırken instance durduruyoruz. Volume’lerin snapshotını alırkende bağlı olduğu sunucudan Deattach ederek alıyoruz. Şimdi UbuntuServer1 instance Actions’tan Instance Status gelip stop edelim.
  • EC2-UbuntuServer’ı durdurmuş olduk. Şimdi Elastic Block Store (EBS) altında Snapshots seçiyoruz ve Create Snapshot diyoruz.
  • Create Snapshot ekranında öncelikle Select Source Type kısmında Volume ve Instance seçeneklerinden hangisinin snapshotını alacaksak onu seçiyoruz biz Instance’ın alacağımız için Istance diyoruz. Instane ID de EC2-UbuntuServer1 instancenın ID’sini yazıyoruz yada liseden seçiyoruz. Description kısmına snapshotla ilgli açıklamyı giriyoruz. Tags olarakta Name: EC2-UbuntuServer1 First Snapshot dedikten sonra Create Snapshot diyerek snapshotı oluşturuyoruz.
  • Snapshotımız oluşuyor ve oluştu 🙂
  • Snapshotın Actions kısmında, Delete ile oluşurduğumuz snapshotı silebiliriz, Create Volume ile almı olduğumuz snapshotan bir volume oluşturup bunu istediğimiz Instance’a Attach edebiliriz, Manage Fast Snapshot Restore ile istedeğimiz spnapshoto aldığıız Region’ın içindeki bir Availability Zone’a hızlıca restore edebilirz olası bir root disk arızalarında kullanılabilir, Create Image ile bu snapshotı kullanarak bir AMI oluşturabiliriz, Copy ile bu snapshotı farklı Regionlara kopyalayıp kullanabiliriz. Biz AMI seçerek kendi imaj dosyamızı oluşturacağız.
  • Create Image from EBS Snapshot; Name ile imajımıza bir isim veriyoruz örneğimizden hareketle EC2-ubuntuServer-Base olarak adlandırdık. Description kısmına sunucumuz bizim websitemizi host ettiği için Ubuntu20.04+Nginx Webserver Base olarak belirttik. Diğer seçenklere dokunmyoruz çünkü WebServerımızla bire bir aynı olmasını istiyoruz. Dilersek root volume genişletebilir veya yeni volumeler ekleyebiliriz. Create diyerek AMI oluşturuyoruz.
  • AMI oluşturduğumuza göre IMAGES altında AMIs gelerek oluşturuduğumuz AMI Private images filitresini seçerek görüntüleyebiliriz. Artık bu AMI kullanarak web sayfamızı yayınladığımız sunucudan bire bir aynısını kurabilir ve kullabilirz.
  • Şimdi bu AMI’ı kullanarak ikinci bir web server kuracağız ve sayfamızın çalışıp çalışmadığını kontrol edeceğiz. Burada Launch Instance adımlarını tek tek göstermeyeceğim sadece kendi oluşturduğumuz AMI’ı seçtiğimiz ekranını gösterip Instance’ı kuracağım. Instances gelerek Launch Instance diyoruz. My AMIs altında bizim snapshot ile oluşturduğumuz imaj dosyamız görünüyor kurulumu yapıp Web Sayfamıza erişmeyi deneyelim. Başka hiçbir uygulama kurulumu veya dosya kopyalama işlemi yapmaycağız çünkü aldığımız snapshot bizim sunucumuzun tüm kurulumları ve web sayfası dosyalarının yüklenmiş haliyle alınmıştı.
  • EC2-UbuntuServ-AMI adında instance kurulmuş oldu. EC2-UbuntuServer1 hala kapalı durumda. Şimdi yeni sunucunun 52.215.79.199 IP adresini kullanarak web sayfamıza erişmeyi deneyelim. Erişim sağlarsak sağlıklı bir AMI oluşturmuş ve tüm ayarlarızın çalışır durumda olacağını anlayacağız.
  • Evet gördüğünüz gibi yeni instance ait Public IP ile web sayfamıza erişim sağladık. Şimdi diğer EC2-UbuntuServer1 Instance’ını çalıştırarak her ikisinden de erişelim.
  • EC2-UbuntuServer1 Instance’ı açıldı ve Public IP adresi 54.171.246.127. Bu IP adresi üzerinde de erişim sağlayalım.
  • 54.171.246.127 Public IP’si ile sayfamıza erişim sağladık. Böylece sunuculardan birine birşey olması durumunda hemen kuruluma hazır bir AMI var ve kısa bir süre içinde sunucuyu ayağa kaldırabileceğiz ancak bizim istediğimiz iki sunucununda çalışıp bir yük dağılımı yapması ve birine birşey olması durumunda diğerinin çalışmaya devam etmesini istiyoruz işte burada ELB ( Elastic Load Balancer) kullanacağız ve ayarlarını yapacağız.
  • ELB için EC2 yönetim konsolundan LOAD BALANCING geliyoruz ve burada Load Balancers seçiyoruz. Create Load Balancer diyerek load balancerı sitemiz için kurmaya başlıyoruz.
  • Create Load Balancer altında bize 3 seçenecek sunuluyor. Classic Load Balancer AWS’nin vermiş olduğu en eski load balancer hizmet genelde artık kullanılmıyor, Network Load Balacer ise dışardan erişime açık olmayan durumlar için TCP-UDP ve TLS protokolleriyle load balance işlemi yapar, Appalication Load Balancer ise uygulama seviyesinde load balance işlemi yapar. Biz web sayfamıza erişim için HTTP ve HTTPS kullandığımız için Application Load Balancerı seçip Create diyoruz.
  • Step 1: Configure Load Balancer: Name kısmında Load Balancera bir isim veriyoruz biz WebServe-LoadBalancer olarak belirledik. Scheme kısndan internet-facing ve internal seçeneklerinden internet-facing seçiyoruz çünkü web sayfamıza dışarıdan erişim sağlanacak,şayet VPC içinde bir trafiği load balance edecek olsaydık internal seçecektik.IP address type’ta IPv4 seçiyoruz Dualstack seçersek IPv6 taleplerinede cevap verir. Listeners kısmı uygulamamız hangi portlarda çalışıyorsa ve load balancerın bu portlardan hangilerini dinlemesini istiyorsak o portları ekliyoruz bizim senaryoda HTTP 80 dinlemesi yeterli, sertifika yüklemiş olsaydık HTTPS 443 eklerdik. Availability Zone(AZ) ise load balancer hangi AZ’lerde bulunan instancelara trafiği yönlendirsin onu seçiyoruz,bizim senaryoda bir VPC kurmadığımız için tüm AZ’leri seçiyoruz. Tags kısmında dilersek etiket belirtebiliyoruz.
  • Step 2: Configure Security Settings: Uygulamamız secure bir porttan dinleme yapmadığı için AWS bizi secure bir port belirlememiziçin uyarıyor ancak sertifika yüklü olmadığı için next ile devam ediyoruz
  • Step 3: Configure Security Groups: Daha önce oluşturduğumuz EC2-Sec-Grup1 grununu seçerek devam ediyoruz.
  • Step 4: Configure Routing: Load balancerın dinlediği trafiği içeride hangi hedeflere nasıl dağıtacağını ayarladığımız kısıdır. Target Group olmadığı için New Target Group seçiyoruz. Name kısmında target grubumuza bir isim veriyoruz. Target type kısmında Instance seçersek yükü belirlediğimiz Instancelara dağıtır biz bunu kullanacağız, IP seçersek trafiği berlittiğimiz intance IP adreslerine veya host edilen herhangi bir RealIP yönlendirir, Lambda function ise bir Lambda fonksiyonuna trafiği yönlendirir. Protokol ise içeride instancelerin hangi portlarına trafiği yönlendireceğimizi seçiyoruz, dışardan HTTP 80 dinlediğimiz için içeride de HTTP 80’e yönlendireceğiz. Health checks ise yükü dağıtırken sunucuların sağlıklı çalılşıp çalışmadığını kontrol edeceği protoklü ve path seçiyoruz, biz HTTP 80 portunu “/” dizinini kontrol etmesini istiyoruz, / dizininde index.html bulunduğu çin buraya erişip erişemediğini kontrol edecektir, eğer http://www.hepsinerede.com/control.html gibi bir control sayfamız olsaydı “/control.html” olarak tanımlayacaktı, “/” sağlıklı bir şekilde erişemezse trafiği hedef gruptaki diğer instance veya instancelara yönlendirecek. Advance health check setting ksımıda ise bu sağlıklı mı değil mi kontrolünü nasıl yapacağını belirliyoruz. Health threshold gönderilen 5 sorugudan “/” kök dizine erşimden 5’inde de sağlıklı bir şekilde erişirse sunucunun sağlıklı olduğuna karar verecek, Unhealty threshold gönderilen 5 sorugudan 2 tanesi olumsuz cevap dönerse bu sunucunun sağlıklı olmadığına karar verecek. Timeout bağlantı sırasında sorun oluştu bunu bağlantı sorunu kabul etmesi için timeout süresi 5 saniye olarak kabul ediyor. Interval sağlıklı her deneme arasında kaç saniye geçmesi gerektiğini belirtiyoruz defaulta 30 saniye belirlenmiş. Success codes ise HTTP Protokolünün sağlıklı olduğunu 200 kodunu göndererek doğrular. Kısaca 30 saniye aralıklarla 5 kez 200 kodu cevabını alırsa sunucu sağlıklıdır diyerek trafik yönlendirecektir.
  • Step 5: Register Targets: Oluşturduğumuz target gruba trafiğin yönleneceği Instance’ları seçiyoruz ve Add to Registered diyoruz.
  • Step 6: Review: Tanımlarımızı gözden geçirip Create diyerek Load Balancerımızı tanımlamış oluoruz.
  • Load Balancer artık çalışıyor, artık web sayfamıza Load Balancerın Public DNS adresi üzerinden erişeceğiz. Load Balancerlara Public IP adresi üzerinden erişilmez ve bu bilgi herhangi bir yerde bulunmaz. Load Balancerlar DNS üzerinden yük dağıtımını yaparlar.
  • Bizim DNS adresimiz WebServer-LoadBalancer-254900109.eu-west-1.elb.amazonaws.comşimdi bu adres üzerinden web sayfamıza erişimi sağlayalım.Sitemize DNS üzerinden başarılı bir şekilde eriştik artık Load Balancer arkasında bulunan 2 Instance üzerinden sayfamız hizmet veriyor.
  • LOAD BALANCING menüsünün altında Target Groups seçtiğimizde oluşturulmuş hedef gruplarımızı görebilir ve bu gruplardaki instanceların health durumlarını kontrol edebilir veya Register targets seçeneği ile yeni instance ekleyebiliriz.
  • Son olarak AutoScaling konusunu uygularacağız ve EC2 servisini tamamlamış olacağız. Load Balancer uygulamasında gördüğümüz gibi aslıdan Load Balancer içerideki instancelara sağlılı şekilde yük dağıtıyor ancak instanceların tamamı erişilemez duruma geldiği veya trafiğin yoğun olma durumunda hizmetin cevap verememesi sorunumuza çözüm bulamıyor. İşte burada AutoScaling devreye giriyor. Kısaca şöyle bir sistem düşünün sürekli çalışır durumda olacak instance sayısı belirlediğiniz ve yükün artış ve azalışına göre ortama otomatik olarak instance ekleyip çıkartacak, sunucuların tamamı erişilemez duruma gelirse minimum belirtiğimiz kadar instance sürkeli erişimde tutacak bir sistemden baksediyoruz. AutoScaling tüm bu işleri yapmamızı sağlıyor.
  • EC2 Yönetim Konsolunda AUTO SCALING menüsünden Launch Configurations seçiyoruz. Ve Create Launch configuration diyerek işlemi başlatıyoruz.
  • Launch Configuration bize Autoscaling’in kullanacağı instance kurulum templateni oluşturmamızı sağlar. Buradaki adımlar Instance kurulum adımları ile aynı olduğu için sadece farklı olan adımlar için ekran görüntüsü paylaşacağım. İlk adımda oluşturduğumuz AMI seçerek devam ediyoruz. Choose Instance Type’ta t2.micro seçerek devam ediyoruz.
  • Create Launch Configuration: Lounch config için bir isim verip ilgili IAM Rolünü seçerek devam ediyoruz
  • Add Storage kısmı değiştirmiyoruz 8GB root disk ile devam ediyoruz,Configure Security Group’ta oluşturduğumuz EC2-Sec-Grup1 seçiyoruz, Erişim için awskaratekin private key dosyasını kullanacağımızı belirteren Create Launch Configration diyoruz.
  • Launch Configuration yaptıktan sonra menüden Auto Scaling Groups’u seçiyoruz ve Create Auto Scaling Group diyoruz.
  • Oluşturduğumuz Launch Configuration seçip next diyoruz.
  • Configure Auto Scaling group details: Group name bir isim belirlioruz biz AS-WebServ-GR1 olarak belirledik. Group size kısmında kaç instance ile başlamasını istediğimizi belirtiyoruz biz burada 2 dedik. VPC kurmadığımız için default VPC için tüm local subnetleri seçiyoruz. Advanced Details’te trafiğin Load Balancerdan geleceğini geliriyor ve load balancerda oluşturduğumzu Target Group’u seçiyoruz. Health Check işlemini Elastic Load Balancer üzerinden yapmasını istiyoruz ve devam ediyoruz
  • Configure scaling policies: Keep this group at its intial size seçeneğini kullandığımızda her şartta iki tane sunucuyu ayakta tutacak ancak biz bunu istemiyoruz bizim istediğimiz yük durumuna göre instance sayısını artırması ve yük ortadan kalktığında tekrar 2 instance düşmesi. Bunun için Use scaling policies to adjust the capacity of this group’u seçiyoruz
  • Use scaling policies to adjust the capacity of this group’u seçtiğimizde Scale beween kısmında minimum ve maximum bulunmasını istediğimiz instance değerlerini giriyoruz biz minumum 2 max 4 seçiyoruz. Burada Metric Type kısmında hangi durumlarda instance ekleyeceğini belirliyoruz biz Average CPU Utilization seçiyoruz ve Value olarak %30 seçiyoruz. Bu ayarla minumum 2 sunucumuz çalışıyorken eğer iki instanceda CPU yükü ortalamada %30 geçerse ortama yeni bir instance ekleyecek. Yük ortadan kalktıktan sonra eklediği instanceları terminate ederek ortamda 2 instance kalmasını sağlayacak.
  • Configure Tags: Name AS-Isntance etiketini kullanarak yeni ekleyeceği sunuclarda bu isimle başlatmasını istiyoruz.
  • Review: Tanımlarımızı kontrol ettikten sonra Create Auto Scaling Group diyerek oluşturuyoruz.
  • Auto Scaling çalışıyor ve CPU yükümüzü artırdığımız için ortama 2 instance daha ilave ederek 4 instance çalışır duruma getirdi. Böylece EC2 servisiyle ilgili konularımızı tamamlamış oldu.

İlgili Makaleler

2 Yorum

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu