Anasayfa » Amazon Web Services AWS Elastic Beanstalk ile WordPress Kurulumu – Bölüm 2

Makaleyi Paylaş

3. Parti Yazılımlar / Uncategorized

Amazon Web Services AWS Elastic Beanstalk ile WordPress Kurulumu – Bölüm 2

Yazımın ilk bölümünde; relational database servisi olarak MySQL yapılandırmasını,Elastic Beanstalk ile wordpress uygulamamızın ilk sürümünün kurulumunu tamamlamıştık. Geldiğimiz noktayı aşağıdaki şekilde ifade edebiliriz.

        Ziyaretçi web adresini Internet Browser ile açmaya çalışır

        DNS sağlayıcısı, web adresinin ip adresine yönledirme yapar(AWS Elastic IP)

        Elastic Load Balancer, listener’a gelen talebi içeride çalışan sağlıklı instance’a aktarır

Sponsor

        Sağlıklı instance’ın kaynakları yetersiz kaldığında üretilecek alarm’dan dolayı auto-scaling devreye girerek VPC içine yeni bir instance açar. Mevcut instance ve yeni açılacak instance’lar Elastic Block Storage’de tutulurlar

        Sistem yatay olarak(horizontal) genişler

        Bu genişleme ile birlikte bazı problemlerle karşılaşılır

WordPress web uygulaması Elastic Beanstalk ile kurulurken en az bir instance açılır. Yapılan tüm konfigürasyon bu instance üzerinde tutulmaktadır. Auto-scaling’den dolayı ortama yeni instance’lar eklenirse ve/veya yine auto-scaling’den dolayı mevcut instance terminate edilirse yapılandırma kaybolur.

Auto-scaling ile birden çok sunuculu sistemin avantajından faydalanmak için web server’ların stateless mimaride çalışması gerekir. Varsayılan yapılandırması ile wordpress, kullanıcıların upload ettiği veriyi(image vb.) lokal dosya sisteminde saklar. Dolayısıyla bu açıdan stateless değildir. Yazının ilerleyen aşamalarında static content(image,javascript dosyaları,style shhet vb.)’in AWS S3 üzerinde tutulması ve CloudFront ile hizmete açılmasından bahsediyor olacağım.

Veritabanı perspektifinden yaklaştığımızda; veritabanı yükünün yoğun olduğu ortamlar için okuma ağırlıklı iş yükünün optimize edilmesi ve geçikmenin düşmesi için kullanabileceğiniz bir başka servisten, AWS ElastiCache’den, bahsedeceğim.

Bu aşamaya kadar bir kaç farklı servisten bahsetmiş oldum.

        Cloudfront

        ElastiCache

        Static content’in S3 üzerinde durması

Elastic Beanstalk ile önceki yazımda tamamladığım wordpress uygulaması kurulumu üstteki sistemle entegre etmek için W3 Total Cache plugin’i kullanılıyor.

ElastiCache yapılandırması ile başlayayım.ElastiCache’e genel bakış için kaynaklar kısmında youtube adresi paylaştım.

ElastiCache istenen bilgiyi daha hızlı olan in-memory cache’den alan, disk tabanlı veritabanı sisteminden veri almaya göre web uygulamasının performansını arttıran amazon web servisidir. Yapılandırılması genel olarak aşağıdaki gibidir. Bu yazımda Memcached cluster ile ilerliyorum.

ElastiCache Cluster kurulumuna geçmeden önce Subnet Group yapılandırınız. ElastiCache Cluster kurulumunda subnet group seçmeniz gerekiyor.ElastiCache cluster ve detaylarının yapılandırılması için aşağıdaki menüden giriş yapıyoruz.

clip_image002

Subnet group için aşağıdaki adımlar ile devam edebilirisiniz.

clip_image004

Cache Subnet Group detayları üstteki gibidir. İçinde çalıştığınız VPC’deki subnet’lere bağlı kalarak availability zone’ları seçiyorsunuz. Ardından cluster kurulumuna geçelim.

clip_image006

Memcached seçimi ile devam ediyorum.

clip_image008

Cluster ismini belirledim. Sayıca iki adet cluster node olacak. Node type kısmında seçtiğim instance type’ına dikkat ediniz. Free Tier usage kapsamından çıkmış oldum. Yani bu elasticache cluster’ı çalıştırdığım sürece ücret ödeyeceğim J

clip_image010

Daha önce yapılandırmış olduğum security group’u seçtim. Bu grupta inbound yönde tcp 11211 portu izinlidir.

clip_image012

ElastiCache Memcached Cluster hazırlandı. Detayları üstteki gibidir.Nodes linkine tıklarsanız cluster node’larınızı görebilirsiniz. O node’ların isimleri(web url) ileride w3 total cache plugin’ini yapılandırırken kullanılacak!

ElastiCache Cluster yapılandırması tamamlandı. CloudFront servisinin yapılandırması ile devam edeceğim. Amazon CloudFront içerik dağıtım servisidir.Diğer amazon servisleri ile entegre çalışır,  içeriğin son kullanıcıya düşük geçikme ve yüksek aktarım hızı ile dağıtılmasını sağlar. CloudFront; AWS EC2,S3,ELB,Route 53 servisleri ile optimize şekilde çalışır. Yazımda Route 53 servisini kullanmadım. Godaddy DNS yönetim konsolundan faydalandım.

clip_image014

CloudFront için bir distribution(dağıtım noktası diyebiliriz) oluşturuyorum. Bu konsole’da yaptığınız değişikliklerin geçerli hale gelmesi en az 15 dakika sürüyor! Distribution oluşturuken origin kısmına ElasticBeanstalk web adresini ve Elastic Load Balancer adresini yazdım. Daha sonra S3 bucket’ın web adresini yazacağım.

clip_image015

AWS whitepaper’ları arasında bu konuyu ele alan güzel dokumlar var. CloudFront distribution’ın detayları için oradaki dokumanları inceleyebilirsiniz. Kaynaklar kısmında paylaştım.

ELB: awseb-e-w-AWSEBLoa-1JSXNRZEV7RIA-1259909768.eu-west-1.elb.amazonaws.com

Elastic Beanstalk: barisbeansappwp-env.elasticbeanstalk.com

clip_image017

Oluşturduğunuz distribution’ın özelliklerinden cache behavior ekliyorsunuz. CloudFront belirlediğiniz pattern’leri belirlediğiniz origin ile eşleştiriyor. CloudFront distribution’ının oluşturulup devreye girmesi 15+ dakika sürecektir. Ardından CloudFront domain ismi ile wordpress uygulamanıza erişebilirsiniz.Önceki yazımda bıraktığım noktaya gelmiş oldum J

Artık wordpress’i yapılandıralım/kuralım.

clip_image019

Yetkili kullanıcı ismi,parola vb. bilgileri belirleyerek kurulumu tamamlayınız.

clip_image021

WordPress admin paneline giriş yapalım ve w3 total cache plugin’ini kurup yapılandıralım. W3 total cache plugin’i ile S3,ElastiCache,CloudFront entegrasyonu yapacağımızı belirtmiştim. Özetle stateless web uygulaması mimarisini yapılandıracağız.

Öncelikle wordpress web sitemizin URL’ini değiştirelim. URL’i cloudfront domain name ile değiştirdim.

clip_image022

Web site url’ini daha sonra değiştirebilirsiniz. W3 total cache plugin’ini yüklüyoruz.

clip_image024

Plugin’in ayarlarından gerekli işlemleri yapaıyoruz. Database cache özelliğini devreye alıyoruz.

clip_image026

Aşağıdaki kısmından da görüleceği üzere memcached cluster node’larının isimlerini ilgili kutucuğa yazıyoruz. Hatırlarsanız iki node’lu cluster kurmuştum.

clip_image028

clip_image030

Content Delivery Network’ü devreye alıyoruz.

clip_image032

CDN type olarak Amazon CloudFront seçtim.CloudFront distribution’ını daha önce yapılandırmıştım! Static content’ın barınacağı yeri yapılandırma aşamasına geldik. Static content S3 üzerinde barınacak. S3 üzerinde barınacak bu içerik için bir bucket açmıştım. Bucket’ın ismi bcakova001 ’dir. Bucket’a erişim için AWS IAM user belirlemiştim. User’ın Access key ID’sinin bir kısmı aşağıda görünüyor.User’a ait Secret key ise ikinci kutudadır.

clip_image034

Bucket’a erişim için cloudfront domain ismini ayarladım. W3 total cache plugin’inde yaptığınız her işlemden sonra “save” etmeyi unutmayınız. Plugin’in özelliğini kullanarak ilgili içeriği S3’e export ediniz.

clip_image036

Theme file için export işlemini üstte görüldüğü üzere geçrekleştirdim.S3 üzerinde açtığınız bucket’ın içine baktığınızda plugin ile export ettiğiniz content’i görebilirsiniz.

clip_image038

Theme klasörü wp-content içinde olduğu için ayrıca bir klasör şeklinde görünmüyor. Bu yapılandırmadan beklentimiz şudur:

        CloudFront’a gelen static content talebi S3(Simple Storage Service)’deki bucket’a aktarılsın.

        Web sitesinde tıklanan image’lar S3’teki bucket’tan alınsın,upload edilen image’lar S3’teki bucket’a aktarılsın.

Bu amaca yönelik son bir işlem kaldı J CloudFront’daki distribution’a bir adet origin ve cache behavior eklemek!

Yapılandırmalar aşağıdaki gibidir.

clip_image039

Eklediğim Cache behavior’lar üstteki gibidir.

clip_image040

Eklediğim origin(bcakova001.s3.amazonwa.com) de üstteki gibidir. CloudFront distribution’ının doğru ayarlanması konusunda bazı denemeler yapmanız yada bir kaç dokuman incelemeniz gerekebilir.

Topolojik ve mimari açıdan geldiğimiz nokta aşağıdaki gibidir.

clip_image042

Üstteki şemada görülen servislerden route 53 dışındakileri kullanmış olduk. wp-content/* ve wp-include/* içerikleri S3’te barınıyor.Upload edilen içeriğin bir kısmı aşağıdaki gibidir.

clip_image044

 wp-admin/* , wp-login.php , default(*) pattern’ları ile eşleşen içerik ELB’den geçerek AWS EC2 instance’larında(web tier’a) barınacak. Web uygulaması yapısı stateless hale geldiği için auto-scaling’den de faydalanmış oluyoruz.

WordPress admin panelinde w3 total cache plugin’inde bazı değişiklik yaptık. Bu değişiklikler henüz sadece çalışmakta olan EC2 instance’ında(sanal sunucusunda) mevcut. Auto-Scaling sistemi yeni bir sunucu açtığı zaman bu değişiklikler o sunucuya aktarılmayacak. Çünkü değişiklikleri içeren wordpress dosyalarını yeni sürüm şeklinde Elastic Beanstalk ile update/deploy etmedim. Elastic Beanstalk’da önceki yazımda deploy ettiğim sürüm mevcut!

WinSCP yazılımı ile çalışan EC2 instance’ına bağlanarak aşağıdaki dosyaları ve klasörleri local sisteminize aktarınız. Zip dosyası şeklinde paketleyiniz.

clip_image046

Paketlediğiniz dosyayı Elastic Beanstalk ile sisteme yükleyiniz.

Dosya, sisteme yüklendikten sonra web uygulamanızın yeni değişikleri içeren ikinci sürümü çalışmaya başlamış oldu J Dolayısıyla auto-scaling’den dolayı yeni açılacak instance’larda bu ayarlar geçerli olacak.Elastic Beanstalk kontrol panelinden gerekli hallerde web application’ın önceki sürümlerine geri dönebilirsiniz.Sürümler aşağıdaki gibidir.

clip_image048

Şu an çalışan sürüm bilgisi aşağıdaki gibidir.

clip_image050

Auto-scaling’i test etmek için çalışan instance’a stress testi uygulamıştım. Aşağıda görüldüğü üzere iki adet yeni instance açıldı. Daha sonra yük azaldığı için biri kapanıyor. Daha sonra diğeri de kapanacak. “desired state” olan bir instance çalışmaya devam edecek. Kaynak yetersizliği anında bu döngü devam edecek.

clip_image052

Yapılandırdığımız EC2, ElastiCache, CloudFront, Elastic Beanstalk, Elastic Load Balancer servislerinin gözlemi için Amazon Cloudwatch servisini kullanarabilirsiniz.

Herkese sorunsuz ve neşeli günler dilerim.

 

Kaynaklar:

http://aws.amazon.com/whitepapers/

http://www.cyberciti.biz/faq/stress-test-linux-unix-server-with-stress-ng/

https://www.youtube.com/watch?v=8eD2eNljURE

http://www.memcached.org

http://aws.amazon.com/cloudfront

http://aws.amazon.com/elasticache

http://www.cyberciti.biz/faq/mysql-command-to-show-list-of-databases-on-server

https://www.pantz.org/software/mysql/mysqlcommands.html

Makaleyi Paylaş

Cevap bırakın