"Enter"a basıp içeriğe geçin

Aydın Doyak Yazılar

HA Network ihtiyacı olanlara çözümler – LACP Bonding

Merhabayın.

Bu blog yazısında high-available network ihtiyacı olanlara kernel seviyesinde ağ arayüzlerini nasıl yüksek erişilebilir olarak yapılandırabileceklerinden bahsedeceğim.

Bu günlerde otu boku clusterlamakla uğraştığımdan, bugüne kadar clusterlamadığım tek bir mekanizma olduğu gerçeği kafama dank etti. O da ağ erişilebilirliğinin kendisi.

Cluster mı? HA mı? Ne diyosun diyenlere bir özet geçeyim.

Sistemcilerin büyük dertlerinden biri de verdikleri servislerin failover mekanizmalarının olması ve bu servisleri çeşitli felaket senaryolarına göre ayarlamaktır. Yani bugüne kadar adam akıllı sistem yöneticisi olarak çalışmış herkes bir servis grubunu yüksek bulunur ve otomatik failover mekanizmalarıyla beraber kümelemeye çalışmıştır. Bir senaryo örneği vereceğim basitçe. Bir web servisi koşturuyorsunuz, uygulamanız da veritabanı olarak arkada herhangi bir SQL ve/veya NoSQL veritabanı kullanıyor. Gün geldi oldu ya, web servisinin koştuğu makine bir anda kapandı. Ya da SQL sunucunuzun koştuğu makineye herhangi bir sebepten dolayı ağ üzerinden erişilemez duruma geldi. Ya da oldu ya talih bu, işinizi iyi yapmadınız ve sunucunuzda kök dosya sisteminin bağlı olduğu fiziksel disk doldu sizden habersiz, işletim sisteminiz de I/O gerçekleştirebilecek alan bulamadığından web servisiniz çalışamaz duruma geldi. Bu durumların hepsinde de servis kesintisine uğradınız. Müşteriler mutsuz, patron mutsuz, herkes mutsuz.

İşte bu gibi senaryoları en kısa servis kesintisiyle atlatmak sistem yöneticilerinin en önemli görevlerinden biri. E bunu nasıl yapıyoruz? Benim gözlemlediğim, günümüzde her uygulamanın ya kendi failover mekanizmaları yazılımın kendi içersinde geliştiriliyor ya da bu işi yapmak üzere tasarlanmış, koşturduğunuz uygulamadan bağımsız üçüncü parti clustering ve HA fonksiyonlarını sisteminize entegre edebileceğiniz bir dizi yazılımı düzgün bir şekilde ayarlayarak bu işi yapabiliyoruz. Yukarıdaki senaryo için her bir servis bileşeninizi ayrı-ayrı yüksek bulunur ve failover edebilecek şekilde ayarlamalısınız demek oluyor bu. Yani atıyorum nginx koşturuyorsanız, nginx servislerinizi yine atıyorum 3 ayrı makineye yayıp, öne bir HAProxy, corosync+pacemaker ile bu 3 nginx web servisi için HA ve failover sağlayabilirsiniz. Ya da arkadaki nosql veritabanınız atıyorum mongodb ise, mongodb’nin failover ve HA mekanizmaları için yazılımın kendi içersinde deployment metodları (replika setleri vs) ve bir dizi ayarlar serisi gerektiren bir iş yükünüz var demek oluyor bu. Her bir bileşenin, projenizin sistem ayağında pros/cons değerlendirmesi ve kullanacağınız mekanizmaları seçmek de sizin işiniz bu arada.  Better safe than sorry demişler. İşleri en baştan sağlam tutmak her zaman en iyisidir.

QEMU/KVM Sanallaştırma Sunucularında CPU Optimizasyonları

Merhaba,

Bu teknik yazıyı yazma amacım, özellikle production ortamlarında sanallaştırma sunucusu olarak KVM koşturan kişilerin optimizasyon ihtiyaçlarını bir nebze karşılamak. Belki öntanımlı gelen ayarlarla kullanıp, herhangi bir optimizasyona şu ana kadar ihtiyacı olmamış olanlar olabilir. Ancak Openstack vb. gibi “compute” çok yapılan tabiri caizse “hayvan gibi” (bkz: beast :P) uygulamalarda, eğer sanallaştırma platformunuz KVM ise aşağıda bahsedeceğim CPU iyileştirmelerini denemek isteyebilirsiniz.

Ön Bilgiler

KVM’de hiç bir CPU optimizasyonu yapmamışsanız, oluşturduğunuz sanal makineler öntanımlı olarak genelde o an için sanallaştırma sunucusunda hangi CPU boştaysa onun üzerinde koşmaya başlıyor. Ancak bu en ideal performansında sanal makinelerinizi çalıştırabileceğiniz manasına gelmiyor. Çünkü NUMA mimarisi diye bir mimari var. (lütfen devam etmeden wikipedia içeriğini okuyun)

NUMA mimarisinde bir sanal makineyi daha önceden belirlediğiniz bir NUMA node’una kilitlemek, KVM’in öntanımlı “NUMA node’una bakılmaksızın hangi cpu boştaysa onda çalıştır” policy’sine göre çok daha performanslı oluyor. Çünkü bir sanal makineyi bir NUMA düğümü içersindeki bir (ya da birden çok) CPU’ya kilitlediğinizde, ilgili sanal makinenin sistemden bellek ayırma işlemlerinin her zaman ilgili çalıştığı NUMA düğümünün içersinde kalacağını garanti etmiş oluyorsunuz. Aksi takdirde NUMA düğümleri arasında, hiç gereği olmamasına rağmen cross-node memory transport denilen NUMA düğümleri arası bellek taşınması işlemi de yapılması gerekiyor. E bu da yoğun compute ve memory allocation yapılacak olan sanal makinelerde bir performans kaybına yol açıyor haliyle.

E libvirt’in de NUMA için CPU pinning vb. desteği var, o halde nasıl kullanacağız? Şimdi ona bakalım.

Yenilendik!

Merhaba, Uzun zamandır şu gri, iç karartıcı görüntüden kurtarmak istiyordum şu blogu. Hatta 2 ay önce başlamıştım bile, tamamlamak bugüneymiş. Şunu söylemeliyim ki çok istediğim…

Aptly ile Debian Paket Deposu Yönetimi

Teknik yazıya başlamadan önce biraz gevezelik yapacağım kendi perspektifimden, teknik kısım için bir sonraki başlıktan başlayabilirsiniz okumaya.

Debian GNU/Linux herkesin bildiği gibi dünyada en çok kullanılan Linux tabanlı dağıtımlardan biri. Bir çok diğer dağıtımın da temel aldığı (ki bunlar Mint, Ubuntu vs. başka saymaya gerek yok çok fazlalar) köklü bir işletim sistemi. Arkasında çok ciddi, katı ve sağlam bir community’si de mevcut. Dünyada Özgür Yazılım Kültürünün en büyük dinamolarından biri.
Bir çok projenin de halen geliştiriciliğini yapan bir community’si ve Debian geliştirici topluluğu var. (Örneğin Docker projesinde bir çok eski Debian geliştiricisi çalışmakta)

Aslına bakarsak ben de öğrencilik dönemimde ilk tanıştığım kültür Debian kültürüydü, bunu da büyük bir rastlantısal şans olarak görüyorum ancak hiç bir zaman bundan şikayetçi olmadım. Bir çok konuyu, Debian ile tanışıklığımdan dolayı zorlanmadan anlayabildiğimi düşünüyorum bugüne kadar. Kültürüne yabancı olmadığım bir dağıtım.

Ancak şöyle bir baktığımda yönettiğim sunucuların hiç biri Debian tabanlı değil nerdeyse (iş harici), kendi şahsi makinemde de Arch Linux koşturuyorum yıllardır.

E peki neden Debian paketleme sistemleriyle falan uğraşıyorum? El-Cevap : Pardus

Biliyorsunuz ki ülkemizde açık kaynak kullanımının yaygınlaştırılması projesi kapsamında geliştirilen Pardus İşletim Sistemi Debian tabanlı bir dağıtım olduğundan beri, Pardus kullanan kullanıcıların bilgisayarlarına program paketlerini kurabilmesi için bir paket deposu yönetim sistemi hasıl olageldi. Ben de TÜBİTAK’ta olduğumdan beri bu konuyla ara ara ama sıkça uğraşmak durumunda kaldım. Bu yazıyı da bu konuda biriktirdiğim bilginin bana açıkcası fazla geldiğini düşünerek paylaşma isteğimden dolayı yazdım. Ne kadar Debian kültürünü tanısam da, saygı duysam da, dağıtım savaşlarına girmek istemesem de hiç, her sysadminin gönlünde yatan bir aslan olduğunu söylemek gerekli, e benimkini de bilen biliyor zaten ama bu hiç bir zaman Debian olmadı sunucu dağıtımları arasında 🙂

OpenLDAP’da Gruplamalar

Merhabalar.

Uzun zaman sonra tekrar bir blog yazısı yazma fırsatı buldum. Bu yazıda geyiği kısa kesip (kesemedi…) direkt konuya atlayacağım.

OpenLDAP bildiğiniz gibi özgür dünyaların lightweight directory access protocol yazılımı. Bir sürü özel-kamu vb. kurum
içersinde bu protokolü bir şekilde kullanmaktalar. Ne için peki?

Cevap en az problem kadar basit : kullanıcıların merkezi olarak yönetimi. Yönetmek? Bir kullanıcının nesini yöneteceksiniz ki
diye düşünürseniz özellikle kamuda IT ops özelinde en süslü fantezilerin bu servis etrafında yoğunlaştığını tecrübe ettim.

Özellikle TÜBİTAK’da işe başladığımdan beri neredeyse en çok uğraştığım problemler bu servis özelinde oldu anlam veremediğim
bir şekilde.

Şöyle istekler duydu, gördü bu bünye :

“biz on bin küsür tane kullanıcımızı bir şekilde gruplayıp, sonicbilmem-ne  (a.k.a özgür yazılım olmayan)
firewall’undan bu gruplara özel youtube yasağı koymak istiyoruz” ya da,
“Microsoft Active Directory’den (kamu ağzıyla “aktif dizin” (her ne demekse artık))  bir kaç bin kullanıcıyı linux client’lardan
doğrulatalım ama herkes de login olamasın bir gruplamaya göre bunu yönetelim” lere kadar uzanan bir sürü istek.

Tembel bünyem çok çalışmak zorunda kaldığından size OpenLDAP üzerinde nasıl gruplamalar yapabilirsiniz bunlardan bahsetmek istedim.

Hazırsanız başlıyorum, (hazırdan kasıt slapd servisi kurun işte herhangi bir işletim sistemi üzerine (centos kurun olm)), müzik gelsin.

Redmine’da WYSIWYG Editörü Kullanmak

Merhaba,
Bir süredir blog yazamıyordum. Bunun birden fazla sebebi var ancak bir kaç tanesinden bahsetmem gerekirse şöyle diyebilirim :

İlginç, yazmaya değer bir şeyler bulup, biriktirme eğilimim
İş, güç yoğunluğu ve ruh halim
ve son olarak Akademik Bilişim konferansına eğitmen olarak katılmam

bir süredir blog yazısı yazamamama neden oldu. Ancak sebeplerim makul bence.

Konumuza gelecek olursak, bu blog yazısında Redmine’da What You See Is What You Get (WYS|WYG) editörü nasıl kullanılır,
mevcut  Redmine kurulumunuzda textile formatlı wiki kullanılarak hazırlamış olduğunuz wikilerinizi, iş kayıtlarınızı
nasıl bu editöre uyumlu ve HTML ile görüntüleyebilip, düzeltebileceğinizi anlatacağım.

“Bununla neden uğraştın ki olum?” diyenlerinizi duyuyorum. Aslında ben kendimce wiki’yi, wiki yazmayı hatta syntax’ını bile seviyorum. Ancak
özellikle benim gibi daha önce wiki yazmaya alışmamış, syntaxla uğraşmak istemeyen, “bir tablo için bu kadar pipe’mı dizecem şimdi yav?” diye
mızıklanan personele sistem yönetimi desteğini ancak wiki yerine zengin editör kullandırtarak verebiliyorum 🙂 Tek sebebi budur. Yoksa wikiyi severiz, candır.

Redmine’da bu işi sizin için yapan güzel bir plugin var, adı da CKEditor , bu bir redmine plugini olduğundan öncelikle redmine pluginlerinin redmine’a nasıl
kurulması gerektiğinden bahsetmeliyiz. Blog yazısının goy-goy’unu burada bırakıp, teknik kısmına geçiyorum, ilginizi çekmediyse diye uyarayim.

Docker ile Ruby Uygulamaları Çalıştırmak

Docker bilindiği gibi, bir dosya sisteminde içerisinde sadece çalıştırılmak istenen uygulamanın ihtiyaç duyduğu kod, sistem araçları, sistem kütüphaneleri gibi yapıları barındıran bir sanallaştırma platformudur. Docker’ın bana göre en önemli özelliği çalıştırdığınız Docker kontaynerının her zaman aynı durumda, environment’dan bağımsız bir şekilde çalışacağını garanti etmesi.

Ben de bu blog yazısında Docker ile mini bir wiki uygulaması olan ruby ile yazılmış gollum’un nasıl çalıştırılacağı ve sisteminizde nasıl ve ne şekilde kullanabileceğinizi anlatacağım.

Ön Bilgiler ve Gereksinimler

Ben bu blog yazısında geliştirme ortamı olarak Debian Jessie 8.1 seçtim.
Docker versiyonu olarak : Docker version 1.6.2, build 7c8fca2 kullandım.

Bu blog yazısını takip edilebilmesi ve anlaşılabilmesi için Docker’ın çalışma mantığına hakim olmak, Dockerfile makrolarını bilmek vb. gerekecektir.
Kurulu ve düzgün çalışan docker’ı sisteminize kurmanız yeterli. Blogun devamında Docker’ı düzgün çalıştırdığınızı varsayarak ilerleyeceğim.