23 Temmuz 2013 Salı

Yakından Eğitim Projem Nagios Exchange'de Yer Aldı

Nagios Exchange Nagios için yazılan belgeler, eklentiler, Nagios ile birlikte çalışan uygulamaların yer aldığı resmi sistesi. Kaan ile birlikte üzerinde çalıştığım Yakından Eğitim projesi olan nagios-couchbase-plugin'in Nagios Exchange'de yer alması için dün istekte bulundum ve bugün Nagios Exchange'den proje kabul edildi maili aldım :)

 Eklenti eğer resmi sayfada yer alırsa daha çok kullanılır ve daha yararlı olur diye düşündüm. Projenin linkine buradan ulaşabilirsiniz.

12 Temmuz 2013 Cuma

Chef Server'ın Oluştuğu Bileşenler

Chef Server'da cookbookları depolayabiliriz demiştik, her  cookbook'un kendi içeriğindeki dosyalara göre de sunucuları yapılandırabiliriz. Chef istemcileri de Chef sunucusundan nasıl davranması gerektiği bilgisini alır ve ona göre sunucuyu yapılandırır. Chef Server Erlang kullanılarak yazılmıştır ve Chef Server'ın sağladığı hizmetler aşağıdaki bileşenlerle sağlanır:

Bookshelf: Bookshelf ile cookbook dosyalarının depolanması ve workstationdaki cookbookların Chef sunucusuna gönderilmesi sağlanır. Eğer farklı cookbooklar aynı dosyayı içeriyorsa ya da aynı cookbookun farklı sürümlerinde aynı dosyalar varsa Bookshelf bu dosyaları sadece bir kez depolar.

WebUI: Ruby on Rails ile kodlanmış, Chef Server için bir arayüzdür.

Erchef (Erlang API Server): Chef Server için bir API'dir. Bu API hala orjinal Ruby tabanlı Chef Server için uyumludur.

Mesaj Kuyruğu: Mesajlar search indexlerine gönderilirler. RabbitMQ Chef Server'da mesaj kuyruğu olarak için kullanılır.

Nginx: Chef Server için yük dengeleyici (front end load balancer) olarak kullanılan bir sunucudur. Chef Server Api'sine gelen tüm istekler Nginx sayesinde yönlendirilirler.

PostgreSQL: Verileri tutmak için kullanılan depodur.



11 Temmuz 2013 Perşembe

Chef Server'da Knife Kullanımı

Geçen hafta Chef Server kullanımı, cookbook kavramı, cookbookların içerdikleri dosyalar, cookbook kullanma gereksinimi gibi kavramlara baktım. Stajın 4. gününden sonra baya bir hastalandım. Bu sefer midem değil ama ofis biraz serindi sanırım ondan kusma, ateşlenme meydana geldi. Bir kaç gün izin aldım Kaanlardan.

Bu haftada knife ile Chef istemcisi oluşturma, data bag, roller gibi kavramlara baktım. Burada Chef sunucusunu knife eklentisi kullanarak yönetmeden bahsetmiş. İlk önce kendi makinem üzerinde vagrant ile bir sanal makine açıp onun Amazon'daki Chef sunucumuz için bir istemci olmasını sağladık.

Oluşturduğumuz istemci üzerinde bir kaç cookbook çalıştırmak için workstation üzerinde roller tanımladım. Kullanmak istediğimiz cookbook'u "knife cookbook site install cookbook_name" şeklinde workstationdaki Chef deposuna (chef dizini) indirebiliriz. Daha sonra chef/roles içine çalıştırmak istediğimiz cookbooklar içindeki recipe'leri run_list'e ekliyoruz. Bu şekilde istediğimiz kadar istemciye istediğimiz şeyleri tek seferde yaptırabiliriz. İndirdiğimiz cookbookları aynı zamanda Chef sunucumuza "knife cookbook upload --all" şeklinde göndermeliyiz. Yoksa istemci üzerinde cookbookları çalıştıramayız. Eklediğimiz rolü de yüklemeliyiz. Bunu da "knife role from file roles/role.rb" şeklinde yapabiliriz.

Data Bag


Data bag kavramı Chef istemcilerinde kullanıcı oluşturmak için kullanılan, json şeklinde depolanan dosyalardır. users cookbook'u eğer kullanıcılar data bag'de varsa, o kullanıcıları istediğimiz özelliklerde istediğimiz makineye eklememizi sağlar. Burada data bag'e kullanıcı ekleme işleminin nasıl yapılacağından ve json dosyasının nasıl yazılması gerektiğinden bahsetmiş. Workstation'daki chef/databags/users dizini altında istediğimiz kullanıcıları tanımlayıp, "knife data bag from file kaan.json" şeklinde kullanıcıyı data bag'e ekleyebiliriz.

Environment


Her Chef organizasyonunun varsayılan ortamı (environment)  _default'tur. Environment kavramı ortamları ayırmak için kullanılır. Workstationdaki chef/environments dizini altına tanımladığımız ortamın özelliklerini (cookbook sürümleri gibi) environment_name.json şeklinde kaydedip gene knife kullanarak istediğimiz istemci için bu ortamı kullanabiliriz.

LWRPs


LWRPs (Lightweight resources and recipes) Chef'te paket yükleme, servis başlatma gibi işlemler için kullanılır. Benim de sunucular üzerinde işlem yaptırırken kendim bu gibi işlemleri tanımlamam gerekecek. 

3 Temmuz 2013 Çarşamba

Vagrant, Chef Solo, Chef Server ile Sunucu Yönetimi

Bu yaz stajı 2 sistem yöneticisinin yanında yapıyorum. Öğreneceğim teknolojiler de gene sunucu bakımı, yönetimi üzerine olacak. Şuan çok fazla bilmediğim kavram olduğu için bir süreyi kavramları öğrenmeye, temel bir kaç deneme yapmaya ayırdık. Kullanmam gereken şeyler arasında tek bildiğim şey Ruby, kullanacağım diğer her şeyi ben de daha önce kullanmadım. Zaten on tane makine açayım onları yapılandıran betikler yazayım gibi bir düşüncesi olmuyor insanın durup dururken :)

Dün Kaan kendi kullandıkları teknolojilerden bahsetti. Yeni duyduğum, öğrendiğim şeyler karşısında verdiğim standart tepki olarak "insanlar biliyorlar, insanlar yapıyorlar" oldu :)

Çalışmaya önce Vagrant ile başladım. Vagrant sanal makine açarken istediğimiz özellikleri daha rahat verebildiğimiz bir araç. Örneğin ram ayarlarını bir Vagrantfile içerisinden makineyi ilk oluştururken yapabiliyoruz. Komut satırından yönetim yaptığımız için hızlı.

 Chef solo kullanımı ilk Vagrantfile içerisinden yaptım. Vagrantfile içerisinden çalıştırılması gereken cookbookları tanımlayabiliyoruz. Bu şekilde Chef sunucusu, Chef istemcisi gibi konulara bakmadan temel bir cookbook çalışmasını ve dosyalarını inceleyebiliriz. Cookbooklar ise Chef'teki makinelerin nasıl çalışacağının adımları tanımlayan dosyalardan oluşuyor. Biraz Couchbase cookbookunun kodunu incelemiştim. Burada temel bir cookbook yapmışlar. Çalıştırıp denemedim henüz ama belgesinde Couchbase kurulumu ve yapılandırması sağladığı yazıyor, ama Couchbase'de yapılan diğer işlere destek vermiyor. Cookbooklar da temel olarak aşağıdaki işlemler sağlanabiliyor:

1) Düğüm (node) üzerindeki temel ayarlar
2) Dosya dağılımları
3) Versiyon kısıtlamaları, desteklediği platformlar
4) Recipes dizini içerisindeki dosyaların hangi tarife göre çalıştırılacağı

Cookbooklarda karşımıza çıkan kavramlardan kaynaklar (resources) ve sağlayıcı (provider) ise şu şekilde: Kaynaklar, Chef farklı görevler için çalışırken (paket yükleme, dosya sistemine erişme, servis çalışabilir durumda mı, hangi kullanıcı, hangi grup için, dosyaların nereye kopyalanacağı gibi) hangi sağlayıcının kullanılacağını söyler. Çünkü her kaynak bir sağlayıcı ile ilişkilendirilmiştir. Sağlayıcı ise bu çalışma işlemlerini sağlar. Yani sağlayıcı, kaynaktaki adımları tanımlar. Örneğin paket yüklemesinde "apt_package" kaynağı apt kullanan sistemler için yükleme yapar, bu kaynağın yapabileceği işlemler ise install, remove, upgrade gibi "action" kavramı olarak tanımlı. Bu temel örnekteki gibi cookbooklar içerisinde istediğimiz işlemleri sırayla işletebiliriz.

Chef ise sunucuları yerleştirmeyi yönetmeyi sağlayan bir alt yapıdır ve bu yönetim cookbooklar ile sağlanır. Her makinenin kendi platformuna uygun ve isteniyorsa aynı özelliklere sahip olması sağlanır. Chef'te kullanılan kavramlar ise sunucu, çalışma alanı, ve düğümler.

Çalışma alanı denilen kavram cookbookların konumudur. Ve her düğüm ihtiyaçlarına göre bir Chef istemcisi içerir.

Son olarak knifedan da bahsedeyim. Knife, Chef üzerinde işlem yapmak için kullanılan bir araç. Chef sunucusu kurulumunu ve kullanımını kolaylaştırıyor. Ben ilk olarak Chef'i depodan indirip yapılandırmak istedim, ancak İşbaran karşı çıktı, ben biraz direndim, derken knife ile kurulum sağladık. Çünkü knife ile kurulum gerçekten daha kolay oluyormuş. Bize kurulum sırasında çeşitli seçenekler sunuyor, ve dosyaları gerekli yerlere kendisi kopyalıyor.