August 22, 2016 · EC2

AWS EC2 üzerinde Çalışan Ortamı Başka Bir EC2'ya Taşıma Hikayesi

App Transfer

Arkadaşlarımın arabaların pozisyonunu, ivmelenmesini ve hareket bilgilerini toplayan ve bunu araç sahibine gönderen bir projeleri mevcut. Ürettikleri bu cihaz 150 yakın araca takılı ve araç bilgilerini bu uygulama üzerinden görüntülüyorlar.

2013 yılında m1.small EC2 üzerinde attıkları uygulamanın reserved süresi bitiyordu. Uygulamayı daha ucuz bir instance taşıyabilirmiyiz diye sorduklarında ben bu işin AMI ile basitçe halledebileceğimizi düşünerek kısa zamanda yaparız dedim. Beni tek endişelendiren konu Instance Base bir EC2 ise bunun taşımanın zor olacağı kanısındaydım.

AMI Oluşturma

Mevcut sistem EBS üzerinde olduğu icin bunun direk Snapshot oluşturarak bunun üzerinden bir AMI oluşturdum.

2 tip Virtualization tipi var. ParaVirtual ve HVM. Bu konuyu daha sonra detaylı bir şekilde anlatacağım. Ben öncesinde ParaVirtual AMI oluşturdum ve bundan bir EC2 instance oluşturmak istediğimde sadece karşıma bazı instance türlerinin izin verildiğine gördüm. t2.micro seçeneğinin olmadığını görebilirsiniz.

ParaVirtual

m1.small ve t1.micro'ya bu AMI'den kurulumlar yaptım. t1.micro için sağlıklı bir ortam oluşturabildiğimizi söyleyemem. t1.micro için Instance Status Check sürekli off duruma geçiyordu. Bundan dolayı t1.micro ortamını bıraktım.

StatusCheck

m1.small'dan oluşturduğum instance düzgün bir şekilde oluştu Web , Mobil ve arabalarda cihazda çalışan uygulamalar belli bir Elastic IP yönledirildiği için Elastic IP yeni oluşturduğum m1.small instance yönlendirdiğimde sistemin problemsiz bir şekilde çalıştığını görebildik.

Fakat bizim ihtiyacımız olan t2.micro gibi daha ucuz bir instance taşımaktı. Free Tier Eligable olan olabilir. Bunun için bunu destekleyen HW Virtualization AMI oluşturarak bir t2.micro instance oluşturmaya çalıştım. Sonuçta instance bir türlü ayağa kalkmadı her seferinde stopping olduğu için bu yöntemden de vazgeçtim. Belki bunun bir sebebi 2013 oluşturulan bu instance EC2-Classic Network tanımlanmasının ve bu Network'ün t2.micro desteklememesinden kaynaklanıyordur.

Yeni Bir t2.micro Oluşturup Uygulamaları Üzerine Taşıma

Diğer bir yöntem sıfırdan t2.micro oluşturup bunun üzerine uygulamaları taşımaktı.

Tomcat Kısmının Kurulması

EC2 üzerine detaylı bir şekilde tomcat kurulmasını şu yazımda anlatmıştım

sudo su
yum update
yum install tomcat8-webapps tomcat8-admin-webapps
service tomcat8 start

Tomcat ortamı hazırdı fakat Web uygulamalarının kaynak kodlarının olmaması ve Java6 ile geliştirilmiş olması nedeniyle bu ortamı kullanamadık. Aşağıdaki supported JDK ya baktığınızda Tomcat8 Java 6 desteklemediğini görebilirsiniz.

Tomcat Version

Bunun için mevcut'ta çalışan tomcat6 versiyonu yükledim.

yum install java
yum install tomcat6 tomcat6-webapps tomcat6-admin-webapps
chkconfig tomcat6 on 
service tomcat6 start

Tomcat'de çalışan 2 tane uygulama vardı. Birisinin war dosyası mevcut iken diğerinin war dosyası yoktu. /usr/share/tomcat6/webapps altındaki folderı direk kopyalayınca çalışmayacağı ile ilgili örnek bunun için mevcut folder indirip war şeklinde zipleyip karşı sunucuya manager üzerinden yükleme yapabilirsiniz.

webfoldercopy

Bu yüklemeleri yaptıktan sonra uygulamanın çalışabilmesi için user/share/tomcat6/lib altındaki dosyaları kopyalamayı unutmayın. /conf/server.xml BasicAuth ile ilgili Realm tanımlanmış ise bu dosyayıda ilgili tomcat altına taşıyarak uygulama sunucunuzu restart etmeniz. gerekir.

 service tomcat6 restart 
MySQL kurulması ve SQL Dump'ının Taşınması

MySQL kurulumunu şu yazımda anlatmıştım. Diğer makinede phpMyAdmin ile Export altından sql dump aldık. Bu dump 600MB boyutunda bunu USA'de olan bir sunucudan local'e indermek yerine aynı region ve aynı availability zone'dan çok çok daha hızlı olacaktır.

Yeni oluşturduğumuz makinenin içerisinde upload şeklinde bir folder oluşuturup bu dosyanın dışarıdan erişilebilirliğini açmamız gerekiyor. Ve mevcut EC2 instance dump scp ile yeni makinenin uploads kısmına taşıyacağız.

 mkdir uploads
 chmod 777  uploads
 scp -i xxx.pem dump.sql  ec2-user@ec2IP:/home/ec2-user/uploads/

Daha sonrasında Webmin kullanarak DB oluşturup bu dump Execute edilmesini sağlatarak veritabanın yeni EC2 instance üzerinde oluşmasını sağlyabilirsiniz.

Uygulamaların veritabanına erişim için kullandıkları kullanıcı ve şifrelerini oluşturmak gerekiyor. Bunları webmin ekranından yapabilirsiniz. Root kullanıcısının şifresini

//Root'ta ilk kez şifre atıyorsanız.
$ mysqladmin -u root password newpass

//Root şifresini güncellemek istiyorsanız
$ mysqladmin -u root -p oldpassword newpass

//Herhangi bir kullanıcının şifresini güncellemek için
mysqladmin -u user-name -p oldpassword newpass

Veritabanı ve kullanıcılarımız hazır. Config dosyalarında tanımlı user ve password'lerin çalışıp çalışmadığını anlamak için CommandLine'dan connectionları bir check etmenizi öneririm.

//Connection Test
$ mysql -u USERNAME -pPASSWORD HOSTNAME DBNAME

Süper veritabanlarıda tamam.

Sensör Bilgilerini Dinleyen Uygulama

Bunun direk sh hazır olduğu için çalıştırılması çok kolay oldu..

//Run SensorListener
$ sh CarListener.sh 

Daha sonra dışarıdan bu makineye telnet çekerek ve netstat ilgili socketi dinleyerek giden gelen veriyi görebilirsiniz.

ElasticIP Yeni T2.micro'nun Atanması ve Yeni EC2 Test edilmesi

Artık herşey hazır sadece ElasticIP eski EC2 instance disassociate ederek yeni instance associate etmem yeterli olacaktı fakat Associate etmek istediğimde bir türlü gözükmedi sonradan anladımki EC2-Classic ve EC2-VPC şeklinde 2 tür network ağ tanımlaması varmış ve EIP-EC2 ile tanımlanmış bir Elastic IP ile VPC'de tanımlanmış bir EC2 IP ataması yapamıyormuşuz.

EC2-VPC

EC2-Classic t2.micro gibi EC2 instance türleri tanımlanamıyor.

Bundan dolayı ElasticIP'den birtane daha tanımlayarak tabiki EIP-VPC olacak şekilde bu static IP DNS üzerinden A* Record yönlendirmesi yaparak sorunu giderdik.

Sonuç

Sonuç başarılı oldu sunucu üzerindeki uygulamaları diğer bir instance taşıdım ama düşündüğümden çok daha zor oldu. Bunun bir kaç nedeni var.

Not

Kullanıcı olarak MySQL root kullanıcısını silerseniz. MySQL WebMin SQL Server arayüzü gidiyor. MySQL kaldırıp tekrar kurmak için aşağıdaki komutları sonra Webmin arayüzünü kullanabilirsiniz.

yum remove mysql-server
killall mysqld; killall mysqld_safe
  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket
Comments powered by Disqus