Windows Azure platformuna geçiş #1 - SQL Server

Mayıs 2013 | Hakan Köse, İnternet Girişimcisi
Daha önceki iki duyuru yazımda bahsettiğim gibi geçtiğimiz hafta sunucularımızı Windows Azure platformuna taşıdık. Şu an itibari ile inploid bulut bilişim üzerinde çalışıyor. Bu tecrübeyi Türkiye'de yaşayan bir çok insan vardır belki ancak inploid gibi geniş bir yapıya sahip projeler için sanırım yaşadığımız tecrübenin başka insanlar için bir ederi olacaktır diye düşünüyorum ve burada olabildiğince net bir aktarım ile bu işin zor ve kritik noktalarını anlatmaya çalışacağım.

Öncelikle tüm bunları anlatmaya başlamadan önce kısaca Azure'ün avantaj ve dezavantajları konusunda bazı bilgiler verelim.

SQL Azure tarafından (henüz) desteklenmeyen bazı özelliklerin uzunca listeleri yayınlanmış durumda aslında:msdn.microsoft.com/en-us/library/ff394115.aspx
msdn.microsoft.com/en-us/library/ee336253.aspx
ya da ayrıca
stackoverflow.com/questions/3235164/what-is-the-difference-b...

Benim en çok dikkat ettiğim unsur ise Full Text Search özelliğinin henüz desteklenmemesi. Üstelik ne zaman destekleneceği konusunda bir tarih verilmiyor. Sırf bunun yüzünden (kısa sürede destekleneceğini düşündüğümüz için) geçişimizi 3 ay bekletmiştik ve sonunda ertelemek istemediğimiz için başka çözümler geliştirdik. Bu konuda önerilen bazı yazılımsal modüller var (LuceneNet gibi) ama ben incelediğim kadarı ile önermiyorum, sizin tercihiniz. Full Text Search özelliği ve bazı limitasyonlar dolayısıyla SQL Azure yerine Azure üzerinde SQL Server Virtual Machine oluşturmayı tercih ettik.

Bu kez dökümantasyon çok tatmin edici yapılmış onu belirteyim. Azure üzerinde bir SQL sanal makineyi nasıl oluşturursunuz: windowsazure.com/en-us/manage/windows/common-tasks/install-s...

Benzer şekilde Windows Server sanal makine için: windowsazure.com/en-us/manage/windows/tutorials/virtual-mach...

Veritabanı taşıma işlemi web uygulamanızı taşıma işleminden çok daha zor bir işlem, çünkü veritabanınızın boyutu, hizmetinizi kesmemeniz (bu çok mümkün olmuyor maalesef), Azure üzerinde veritabanı sunucusunun hazır hale getirilmesi ve devreye sokma işlemleri cidden çok zaman alıyor çünkü özellikle dosya transferi konusunda (sanal makine için söylüyorum) ciddi efor sarfetmeniz gerekiyor.

İşlemleri kısaca sıralarsak:

  1. Önemli: Yayında olan web sitenizi durdurun ve bir bakım yazısı asın. Bakımdayız yazısını asarken sakın "no-cache" koymayı unutmayın ve ayrıca header bilgisine ek olarak arama motorları için http 503 eklemeyi unutmayın. Bu ikisini unutursanız, yayına geçtiğinizde o esnada siteye gelmiş olan kişiler bunu farkedemez, çünkü sayfa cache'lenmiştir. Benzer şekilde bakım esnasında botlar gelirse onlara daha sonra yeniden gelmeleri için bir not bırakmış olacaksınız. Bununla ilgili bilgiler için:googlewebmastercentral.blogspot.com/2011/01/how-to-deal-with... veya googlewebmastercentral.blogspot.com/2011/01/how-to-deal-with... veya stackoverflow.com/questions/14263835/how-to-create-503-respo...
  2. Veritabanınızı yedekleyin (full backup)
  3. Veritabanınızı Azure üzerinde oluşturduğunuz SQL makineye aktarın.
    Bunun Remote Desktop bağlantısı ile yapabilirsiniz veya bin bir uğraş verip FTP bağlantısı oluşturabilir ve FileZilla gibi bir program ile dosyalarınızı (veritabanı veya diğer) transfer edebilirsiniz. Önemli bilgi: Remote Desktop bağlantısı için Azure Yönetim panelinden sunucuya "Connect" linkine tıkladığınızda size bir dosya indirtiyor. Açıklamalar şurada: windowsazure.com/en-us/manage/windows/how-to-guides/log-on-a... Bu dosyaya çift tıklayıp bağlanıyorsunuz normalde. Ancak, dosyayı indirdikten sonra sağ tıklayıp özellikler kısmında dosyayı UnLock etmeniz gerekiyor. Yoksa dakikalarca uğraşırsınız "hata nedir" diye.. Ayrıca FileZilla ile bağlantı kuracaksanız şu adımları uygulamanız gerekiyor: huberyy.wordpress.com/2012/08/03/set-up-a-ftp-server-in-wind...
  4. Veritabanını Azure VM üzerine aktardıktan sonra SQL Server Management Studio ile "Restore Database" yapabilirsiniz ve bu database üzerinde Login hesaplarını belirleyerek veritabanını kullanıma hazır hale getirmiş olursunuz. Azure SQL VM üzerinde SQL Server 2012 bulunuyor ve varsayılan ayarları ile kullanımınıza sunuluyor. Dolayısıyla SQL Server ayarlarından Local & Remote Login ayarlamasını açmanız ve Firewall üzerinden SQL haberleşmesi için bir porta izin vermeniz gerekiyor. Bu ayarları sisteminizi kapatmadan önce gerçekleştirip, bir test database'ine uzaktan bağlantınızı başardıktan sonra işlemlere başlamanız yerinde olur.
  5. Web uygulamanızı Azure SQL ile çalışır halde yeniden Publish edin: Artık SQL taşıma işleminiz gerçekleşti ve uygulamanızın ConnectionString bilgilerini değiştirerek artık Azure SQL VM ile çalışmasını sağlayabilirsiniz.
Burada önceden yapmanız gereken bir tercih var aslında, 2 aşamada taşınma veya tek seferde taşınma. 2 aşamada taşınma yukarıdaki gibi SQL sunucunuzu taşıdıktan sonra sitenizi yeni SQL sunucu ile çalışır halde açmak ve ardından web sunucunuzu Azure'e taşıma işlemine başlamak. Bu esnada siteniz açık olacak ve kullanıcılarınız bazı yavaşlamalar dışında bir sorun yaşamayacaklar. Diğer tercih ise, bakıma devam etmek ve siteyi kapalı tutarak kalan işlemleri de gerçekleştirip siteyi açmak. Her ikisine de hazı olun, çünkü SQL taşıması düşündüğünüzden daha uzun sürerse ve kapalı kalmak istemez iseniz diğer planı devreye sokarsınız.

Biz 2 aşamaya mecbur kaldık çünkü beklediğimizden çok daha uzun süren bir SQL macerası yaşadık maalesef, üstelik aynı işlemi bir kaç gün öncesinden deneme amaçlı aynen test etmemize rağmen beklemediğimiz sorunlar ortaya çıktı.

Son olarak bu işin fiyatı hakkında da bilgi sahibi değil iseniz belirteyim, her türlü fiyat/performans anlamında Windows Azure çok daha avantajlı oluyor. Çünkü, sunucularınız Small konfigürasyonda bile olsa performans anlamında x2 fark var ve fiyat olarak daha ucuza geliyor.
SQL tarafında yapılacaklar için bazı linkleri tekrar buraya not düşüyorum ve diğer bir yazıda sonraki aşamaları ayrıntılandıracağım az sonra.

Service Unavailable Page
googlewebmastercentral.blogspot.com/2011/01/how-to-deal-with...
stackoverflow.com/questions/14263835/how-to-create-503-respo...

Windows Azure VM oluşturma
windowsazure.com/en-us/manage/windows/common-tasks/install-s...

Windows Azure Install SQL Server (All Steps)windowsazure.com/en-us/manage/windows/common-tasks/install-s...

Windows Azure VM Remote Desktop & File Transfer with FTP windowsazure.com/en-us/manage/windows/how-to-guides/log-on-a...
huberyy.wordpress.com/2012/08/03/set-up-a-ftp-server-in-wind...

Windows Azure VM Pricing
windowsazure.com/en-us/pricing/calculator/?scenario=virtual-...