Cluster Architecture Basar GÜNER

Panik olmayalım ve durumu incelemeye başlayalım. Onun için de ilk araçlarımızı toparlayalım.

Windows Server 2003 e kadar default davranış olarak server cluster node ları arası system event log ları replike edilirdi. Elbette bu kapatılabiliyordu, ama amaç herhangi bir disaster senaryosunda bir nodeda sadece erişilebiliniyorsa, iki node un en temel verilerini toparlayabilmekti. Ancak cluster logları replike olmuyordu ve ondan da uzun vadede cluster logları hem text formatında yürütmenin ve system event logları replikeetmenin gereksiz bir overhead ve sorumluluk olduğu kararına varıldı. Performans sorunu olarak bazen çok aşırı durumlarda replikasyon tam olmuyordu veya cluster loga bütün bilgiler flush olamıyordu. Böyle durumlarda performans biraz daha iyi olabilsin diye de cluster logun boyutu çok küçük bırakılıyordu ve genelde bir iki gün içerisinde kendisini overwrite ediyordu. Zaten her türlü troubleshooting için genelde post mortem bütün node lara erişebilir ve veri toplanabilir olduğu için, replikasyon kendi amacında kullanılmıyordu ve çok kez kapatılıyordu. Ondan Windows Server 2008 den intibaren hem text formatında cluster logu tutulmasından ve default system event log replikasyonundan vaz geçildi.

Bizim için bu şu demek: Windows Server 2003 clusterımız varsa, her node da C:\Windows\Cluster altında o node un cluster logunu bulabilirsiniz ve bu log kopyaladığınız an günceldir.

Windows Server 2008 den intibaren cluster log bir trace olduğu için (Event Tracing for Windows ,ETW) ilk text formatına parse edilmelidir. Bir node da ‘cluster log /generate’ komutunu çalıştırırsak normalde her node da C:\Windows\Cluster\Reports altında cluster logu bulabiliriz. Burada log komutun çalıştırıldığı an günceldir. Yani bir ay sonra o parse edilmiş logu alırsak, o bir ay öncesine kadar güncel olmuşbir logdur.

Cluster logu hep circular queue mantığı ile çalışır ve belli bir boyutta kendi üstüne yazmaya başlar.

Nodelardan system event loglarını error, warning ve critical eventlere göre filteledikten sonra incelemeye başlıyoruz. Bu bizim sorun senaryosunu anlamaızı sağlıyor. Örneğin bir 1069 eventi hangi grupdaki hangi resource un ne zaman hangi node da fail ettiğini gösterir, ama daha fazla detay vermez. Bu detayı da cluster logda bulabiliriz. Ancak 1069 eventi ile korele eden cluster log kayıtlarını bulamıyor olabilirsiniz. Bunun nedeni basittir, yanlışzama na bakıyorsunuzdur. Log, sistem zaman dilimi ile alakalı olmayıp hep gmt dedir. Türkiye gmt+2 zaman dilimindedir. Yani system event logda saat 3 (gmt+2) de düşen kaydı, cluster log da, iki saat geride saat 1 (gmt+0) de bulabiliriz. Ancak logları 2 saat fark ile analiz etmek yeterince karmaşık bir durum olmadığı için, bunu bütün yıl yapmıyoruz. Yazın bir saat daha ekliyoruz.🙂 Yaz saatinde aslında gmt+3 e geçmiş oluruz ve system event log ve cluster log arasındaki fark 3 saate çıkar. Yani yaz saatinde system event logda ki saat 3 kaydını, cluster log da saat 12 de bulabiliriz. Bu yapının elbetteki çok mantıklı bir nedeni var; o da geo clusterlar. Örneğin farklı kıtalarda, farklı zaman dilimlerinde ve farklı yaz/kış saati uygulamaları olan ülkelerde duran node ların loglarını analiz ederken kolaycana zamanları şaşırıp yanlış yorumlamak mümkün. Mesela ABD, ve Türkiye dahil olmak üzere, Avrupa farklı zamanlarda yaz/kış saati geçişlerini yapıyorlar; ve örneğin bazı orta doğu ülkeleri hiç saat değişikliği yapmıyor. Bazen de ülkeler kendi takvimlerine göre istisna yapabiliyorlar. Cluster log sabit gmt olmasaydı, mesela bütün bu ülkeler üzerine dağılmış bir clusterın problem sonrası incelenmesi çok daha zor olurdu.

Şimdi event log daki hatalar ı ve beraberindeki cluster log kayıtlarını kronolojik bir sıraya dizebiliriz. Şu an ne olmuş olduğunu loglanabilir detayına kadar biliyoruzdur. Peki ama logdaki herşeyi anlıyor muyuz? Kayıtların tam olarak hangi konteksde düştüklerini ve ne demek olduklarını anlamak gerekebilir.

Onun içinde ilk mimariyi daha iyi anlamamız gerekebilir.

Cluster ın en önemli parçası her node da hep çalışan clussvc.exe cluster servisidir. Aslında cluster ın da yaptığı üstünde çalışan kaynakların ve bunların ihtiyacı olan diğer kaynakların durumlarını kontrol etmek ve gerektiğinde kurtarıcı adımları uyarlamaktır. Yani cluster ın kendisi hiçbiryabancı kodu gerçek anlamda çalıştırmaz. Örneğin DHCP clusterlanmışise, cluster lokalde çalışanservisin sadece aktif node da açık olmasını sağlar ve DHCP in kullandığı disk, network name ve IP gibi kaynaklarında durumunu kontrol eder. Bu basit tanımlamanın arka planda dönen detaylarını aşağıdaki modüllerin özetinden sonra bulabilirsiniz.

Cluster ın konfigürasyonureplika denilen CLUSDB de tutulur. Bunu her nodeda cluster klasöründe bulabiliriz. Bunun ile ilgili yapılan değişikliklerden dolayıoluşan farkları da ortak bir lokasyonda bir temp dosyasında tutarız. Bu örneğin file share witness,witness disk veya Quorum da durabilir. Elbette replikanın son versiyonu güncel olarak kabul edilir ve bu değişiklikler içerse de node lar tarafında uyarlanır. Yani bir node kapalıyken yapılmış olan değişiklerikendisi açıldığında hemen uyarlar. Her şart altında burada sorun olmasını engelleyen ve doğru replikanın seçilmesini sağlayan algoritma paxos olarak geçer. CLUSDB yi cluster servisi çalışıyorsa lock etmiştir, ancak servis duruyorsa örneğin registry e yükleyebilirsiniz. Clussvc.exe de bunu zaten çalıştığında ilk olarak HKLM altında Cluster olarak yükler. Burada bütün konfigürasyon detaylarını görebilirsiniz. Cluster ın kullandığı bütün bilgiler buradadır. HKLM.Cluster olarak da ortak bölgedeki replika yüklenir.

Diskler ile ilgili işlemlerden clusdisk.sys modülü sorumludur. Network tarfındaki sürücü clusnet.sys dir. Kendisi bir sanal adaptör yaratır. Cluster TCP Port 3343 ü kullanır. Bu iki modül dışında cluster ın Kernel tarafında çalıştırdığı başka modül yoktur.

Usermode tarafında ayrıca cluster.exe çalışır. Asıl cluster yönetim işlemlerini bu modül ile yaparız. Failover cluster manager da yaptığımız işlemlerde arka planda hep cluster.exe çağrılır. Örneğin cluster logu da kendisi oluşturur. System32 altında olan tek modüldür. Diğer user mode modüllerin hepsi cluster klasöründedirler.

Son executable Resource Host Subsystem, rhs.exe dir. Yazılımınızı cluster aware yapmak isterseniz, bunun için bir resource DLL yazabiliriz. Cluster a o resource hakkında bir blue print vermiş oluruz, resource la cluster ın konuşmasını sağlayabiliriz. İşte yazılımın cluster tarafında görüştüğü kısımda rhs.exe dir.Rresourcelar bunun içinden çalışabilir. Örneğin bir generic script resource u çalıştırısanız, task manager da yeni bir cmd.exe değil de, yeni bir rhs.exe processi görebilirsiniz. Her resource kendi rhs.exe si ile beraber çalışabilir, veya bir çok resource bir rhs.exe yi kullanır. Bir resource onun ile ilgili rhs.exe sinin crash olmasına neden olursa, o resource artık kendi rhs.exe si ile çalışmaya devam eder (rhs izolasyonu).

Clussvc.exe yi işlevsel görevlerine görefarklı mantıksal modüllere/yöneticilerebölebiliriz. Bu spesifik detaylar ile log kayıtları eklenir. Ondan aşağıdaki açılımlar cluster log analizini çok kolaylaştırabilir. Ayrıca cluster servisinin görevlerinin özeti olarak da anlayışımızı arttırabilir, çünkübu abstraksiyonun nedeni cluster ı daha iyi anlayabilmek içindir. Bu yapı sadece log da kullanılır. Böylece nereden hatanın geldiğini gördüğümüzde hemen analizimize yön verebiliriz.

Object Manager [OM], Node larda bellekde tutulan bilgilerin yönetiminden sorumludur. Bütün kaynakların ve ortamın durumu ve hangi node da hangi resourceların online olduğu bilgisinden sorumludur. Yani bu cluster ın ‘bilinç üstü’ kısmıdır.

Host Manager [HM], cluster oluşturma, örneğin sıfırdan veya reboot dan sonra nodeların cluster a eklenmesi gibi görevlerden sorumludur. Node ların durumlarını takip eder.

Membership Manager [MM], dinamik güncellemelerden, HKLM\System\CCS\Services\ClusSvc\Parameters dan soruuludur.

Global Update Manager [GUM], her türlü bilgilerin node lar arası iletilmesinden sorumlu.

Resource Control Manager [RCM], rcm.exe in clussvc.exe tarafında görüştüğü kısım. Online, offline, failed, online pending, offline pending, partial online gibi statüleri onaylar, Create, delete, property changes gibi işlemleri yapar ve cluster.exe ile move ve failover gibi işlemleri yapar.

Topology Manager [TM], network tarafı ile ilgilenir.

Network Manager [NM], cluster network leri ile igilenir.

Interface Manager [IM], network adaptörleri ve özelliklerinden sorumludur. Örneğin NIC in Up, failed ve networkün unreachable networkde: up, down, partitioned statülerin kararlarını verir. Örneğin bir networkde sadece bir node un NIC i arızalı olursa bu network partitioned olur.

Database Manager [DM], bütün replikalardan sorumludur. Örneğin CLUSDB/registry ile ilgili sorun kayıtları beraberinde görürüz.

Quorum Manager [QUORUM], seçilmiş quorum modelinde quorum a varılıp varılmadığı kararı verir. Security Manager [SM], bunla beraber Security Validator [SV] danda authetication vs. hatalar görülebilir.

İlk system event loglarından sorunun senaryosunu anladık. Sonra cluster logda ilişkin hataları bulduk ve yorumladık. Şimdi cluster sorununu anlamışdurumdayız ve asıl şimdi başka ne veriye ihtiyacımız olduğunu belirleyebiliriz, troubleshooting ve araştırmalara girişebiiriz. Buraya kadar gelmeden, sorunu anlamadan troubleshooting verimsiz olabilir.

Cluster log ile ilgili linkler:

http://support.microsoft.com/kb/168801 How to turn on cluster logging in Microsoft Cluster Server

http://support.microsoft.com/kb/286052 The meaning of state codes in the Cluster log

http://support.microsoft.com/kb/225081 Cluster resources quorum log size defaults to 64 KB

http://technet.microsoft.com/en-us/library/cc961673.aspx Interpreting the Cluster Log

http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf Paxos

Başar Güner

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s