Merhabalar,
Bu makalemde, exchange sunucular üzerindeki önemli konulardan bir tanesi olan Circular Logging konusuna (Döngüsel günlük kaydı) değinmek istiyorum.
Exchange sunucularda, yapılan tüm işlemler için sürekli bir log akışı vardır. Bu loglar, transaction log olarak adlandırılır. Exchange sunucu, e-postalar, kullanıcılar ve exchange sunucunuzun diskindeki ilgili database dosyalarındaki değişiklikler gibi bilgileri işlemek için transaction log’larını kullanır ve verileriniz, öncelikle bu log dosyalarına yazılır.
Verileriniz bu log dosyalarına yazıldığında ve log dosyası boyutu belli bir aşamaya geldiğinde, bu dosyaya yazma işlemi kapatılarak yeni bir log dosyası oluşturulur ve yazma işlemi, bu şekilde oluşturulan dosyalar üzerinde döngüsel olarak devam eder. Transaction loglar, Exchange server 2003 sonrası sistemleri için 1 MB boyutundadır. Mailbox database’lerin bulunduğu dizinler içerisinde ya da ayrı olarak oluşturulmuş log dizini içerisinde, loglar her database için ayrı ayrı tutulur.
Bu şekilde birçok log dosyası oluşturulur. Fakat, bu log dosyaları kendi kendine temizlenmediği için zamanla birikerek, tüm hard disk alanını tüketmeye başlar.
Böyle bir durumda, artık circular logging enable ya da disable durumlarını değerlendirme gerekliliği ortaya çıkar.
Circular logging enable durumdaysa
Circular logging enable duruma getirildiğinde, Exchange sunucu yeni loglar oluşturmak yerine, var olan log dosyalarını yeniden kullanabilir. Circular logging, transactional log işlemlerinde hard diskten yer kazanmak amacıyla kullanılır. Tipik koşullar altında Exchange, Circular logging etkinleştirdiğinizde, çok fazla log oluşturmaz; ancak Exchange, yüksek etkinlikteki dalgalanma koşulları sırasında gerekirse ek log dosyaları oluşturacaktır. Exchange bu log dosyalarını oluşturduktan sonra, siz uygun bir yedekleme programıyla full bir yedekleme yapmadığınız sürece, oluşturduğu bu log dosyalarını silmez. İlk log dosyalarını yeniden kullanılır ve bu logların, döngüsel olarak sürekli üzerine yazılır.
Log dosyalarının üzerine full veya incremental yedekleme çalıştırılıp çalıştırılmasa da yazılır ve son full veya incremental yedeklemeden bu yana, önceki logların bir geçmişi de tutulamamış olur. Bu nedenle, Circular logging etkinleştirildiğinde, Exchange database’lerinin differential ve incremental yedeklemeleri gerçekleştirilemez. (çünkü bu tür yedeklemeler full geçmişine dayanır).
Dolayısıyla, Circular logging’i enable ettiğinizde, sadece son aldığınız full yedeğe geri dönebilirsiniz. Full yedekleme sonrası biriken logların yedeği elinizde olmayacağı için, aradaki fark verisini kaybedersiniz.
Bu yüzden default olarak disable durumda gelmektedir. Sebebi ise, herhangi bir sorun anında en güncel veriye ulaşılmak istenmesidir.
Circular logging etkinleştirmek çok önerilmese de bazı durumlarda kullanılması hayat kurtarıcı olabilir. 🙂 Örnekleri ilerleyen paragraflarda aktaracağım.
Circular logging disable durumdaysa
Circular logging devre dışı ise ya da devre dışı bırakıldığında, transaction log dosyaları full veya incremental yedekleme gerçekleştirilene kadar diskte birikir. Yedekleme işlemi sonrasında, database’lere kaydedilen tüm log dosyaları silinir. Microsoft Exchange Sunucusunun full ya da incremental yedeklemesini gerçekleştirmek, disk alanını etkin bir şekilde kullanmak için log dosyalarını kaydetmenin ve bu logları diskten kaldırmanın tercih edilen yoludur. Yedekleme stratejisi mevcutsa, log dosyaları yedekleme sonunda temizlenir ve bu da disk alanını serbest bırakır. Örneğin, bir Veeam yedekleme yazılımnda bu adımları aşağıda paylaştığım konfigürasyon pencereleri altından görebilirsiniz. Bu örnekte, üstteki seçenek ile, ancak başarılı yedekleme durumlarında, yedekleme yazılımım tarafından transaction loglar silinsin demiş oluyoruz.
SQL sekmesinde, farklı bir açıdan bu logların nasıl işleneceğini görebilirsiniz.
Kullandığınız yedekleme yazılımı her ne ise, yedeğini aldığınız sistem üzerindeki database’den haberdar olacak ve uygun şekilde logları işleyecek olan seçeneklerle yedeklemenizi yapılandırmanız gerekiyor.
Database Consistency (Database tutarlılığı)
Bir veritabanı düzgün şekilde kapatılmadıysa, tutarsız (inconsistant) olduğu söylenir. Bu olduğunda database, transaction loglarla hala iletişim halinde olduğuna inanır ve çalışmaya devam eder, ancak loglardaki bilgilerin tümü veritabanına kaydedilmemiş olabilir.
Database bir sonraki yeniden başlatılma sırasında, bu durum fark edilir ve STORE işlemi, eksik verileri loglardan işlemeye çalışır. Buna replying denir. Bununla birlikte, gerekli olan bazı loglar eksikse, database mount olmaz ve database’i kurtarmak için ESEUTIL kullanmak zorunda kalırsınız. Diğer bir seçenek ise database’in tutarlı olduğu bir yedekleme noktasına geri dönmektir.
Circular logging hangi durumlarda enable edilir?
Yedekleme sistemi, log dosyalarını silmenin en iyi yöntemidir. Peki ya yedekleme işe yaramadıysa, fail olduysa, devre dışı kalmışsa ve disk boyutu dolmadan bir çözüme ihtiyacınız varsa?
İşte bu bölümde ise, hangi durumlarda enable etmenizin önerilebileceği durumları inceleyeceğiz.
Circular logging (Döngüsel günlük kaydı) ne zaman etkinleştirilir ve veritabanı günlükleri temizlenir?
Aşağıdaki durumlar oluşmuşsa, circular logging enable duruma getirebilirsiniz.
- Disk doluluğu artıyor ve diski artık genişletemiyorsanız
- Yedekleme yazılımıyla ilgili sorunlar var ve log dosyaları silinemeden sürekli artıyorsa
- Posta kutularını, başka veritabanına taşıma işlemi yapmak istiyorsanız
- Database’ler, bir test ortamında yapılandırılmışsa
NOT : Yedeklemeyi yapılandırdığınızda, Circular Logging’i devre dışı bırakmayı unutmayın. Çünkü artık bu log silme işi, yedekleme yazılımı tarafından yönetilecektir.
Örnek Senaryo
Şimdi örnek bir senaryomuzu inceleyeceğiz.
DAG yapısında çalışan 2 adet windows server 2016 üzerine kurulmuş, exchange 2016 sistemimiz olsun. DAG yapısından dolayı tüm database’lerin pasif birer kopyaları diğer sunucu üzerine replike edilen bir yapısı var. yedekleme işlemi çeşitli nedenlerle fail oluyor ve sağlıklı yedekleme yapılamadığı için disk boyutları hızlı şekilde artıyor.
Senaryo ortamına bakış
Sunucular üzerine baktığınızda, 4 TB boyutundaki vmdk diskinin neredeyse tamamen tükeneceğini görmüş olalım. Diski extend ettiğimizde, CBT bozulacağı ve yapılacak yedekleme de full disk okumayı gerektireceği için, 12 saat civarı bir disk okuma süresi geçecek. Bu süre zarfında diski bir daha extend de edemeyeceksiniz çünkü üzerinde snapshot duruyor olacak. 🙂 Kaldı ki bu seferki yedekleme başarılı olacak mı olmayacak mı acaba? Kafamızda deli sorular 😉
Her bir database’in boyutu da oldukça yüksek seviyelere gelmiş.
Database klasörüne baktığımızda 178652 tane log dosyası olduğunu görüyoruz.
Circular logging kontrolü
Default olarak disable durumda gelmekte. Fakat biz yine de kontrollerinin nasıl yapılabileceğine bakalım. En kolay yöntem GUI den kontrol etmek.
Exchange Control Panele bağlanıp sol taraftaki menüden:
Servers > databases > DB_İsmi > Edit
Burada Maintenance bölümüne girdiğimizde, alt kısımda circular logging işaretli değil, yani disable durumda.
Eğer komut satırını kullanmayı seviyorsanız, exchange management shell kullanarak da bu kontrolleri yapabilirsiniz.
Sadece tek mailbox database için Circular Logging durum kontrolü yapmak için aşağıdaki komutu kullanabilirsiniz.
Get-MailboxDatabase “DB1-2” | Format-Table Name, CircularLoggingEnabled
Var olan tüm mailbox database’lerde Circular logging durum kontrolü yapmak için ise aşağıdaki komutu kullanabilirsiniz.
Get-MailboxDatabase | Format-Table Name, CircularLoggingEnabled
Circular logging enable etme
Gelelim asıl örneğimize. Yukarıdaki bölümde, disk alanımızın dolmaya başladığını ve acil bir önlem alıp, biriken log dosyalarını silmemiz gerektiğini belirtmiştim. Şimdi bu işlemlere başlıyacağız ve diskte, bir sonraki sağlıklı yedeğin başlama zamanına kadar yeterli disk alanını kazanacağız.
GUI altından nasıl enable edeceğimize bakalım.
Servers > databases > DB_İsmi > Edit
En altta bulunan Enable circular logging seçeneğini işaretliyoruz ve kaydediyoruz.
Bu ayarın etkin olması için database’i dismount ve tekrar mount duruma almamız gerekiyor. Bu sırada, o database üzerinde posta kutusu olan kullanıcıların, kısa bir süre bağlantıları kesilecek.
Önce dismount edelim.
Şimdi tekrar mount edelim.
Bu işlemi, komut satırından da yapabilirdik.
Enable etmek için:
Set-MailboxDatabase “Database_ismi” -CircularLoggingEnabled:$True
Disable etmek için:
Set-MailboxDatabase “Database_ismi” -CircularLoggingEnabled:$False
Tüm database’ler için enable/disable etmek için;
Get-MailboxDatabase | Set-MailboxDatabase -CircularLoggingEnabled:$True
Get-MailboxDatabase | Set-MailboxDatabase -CircularLoggingEnabled:$False
Hangi database’lerde enable olduğunu görmek için
Get-MailboxDatabase | where {$_.CircularLoggingEnabled -eq $true}
Hangi database’lerde disable olduğunu görmek için
Get-MailboxDatabase | where {$_.CircularLoggingEnabled -eq $false}
Şimdi az önce GUI’den yaptığımız işlemi, komut satırından bir başka database için yapalım. Örneğin DB1-1 için aşağıdaki gibi yapabiliyoruz.
Set-MailboxDatabase “DB1-1” -CircularLoggingEnabled $True
Dismount-Database “DB1-1” -Confirm:$False
Mount-Database “DB1-1” -Confirm:$False
Bu işlemleri tüm database’ler için yaptığımızda son bir işlem kalıyor. Buraya kadar yaptıklarımız, her bir database üzerinde, işaretlediğimiz enable seçeneğinin, konfigürasyonda da tanınır hale gelmesi içindi. Ayrıca disk kapasitesi üzerindeki etkisi henüz ortaya da çıkmadı.
Bunun için son bir işlem yapıyoruz. DAG member olan her iki sunucuda da Microsoft Exchange Information Store servisinin restart edilmesi gerekiyor.
Bu restart işleminden sonra diskteki log dosyaları silinmiş olacak. Gördüğünüz gibi yaklaşık 400 GB log dosyası silindi ve diskte yer açılmış oldu.
Log dosyalarının sayısı da sayısına bakarsak silindiğini göreceğiz.
Buraya kadar yaptığımız işlemler, bize acil müdahale için gerekli alanı kazandırdı ve problem çözülmüş oldu. Fakat buraya kadar yaptğımız işlemleri, bir sonraki yedekleme zamanına kadar geri almanız iyi olacaktır. Sistemde şu anda enable durumda. Yukarıdaki adımların aynısını tekrar ederek, circular logging seçeneğini disable etmeyi unutmayınız.
Tümünü tek komutla disable etmek için şunu kullanabilirsiniz.
Get-MailboxDatabase | Set-MailboxDatabase -CircularLoggingEnabled:$False
Ayrıca dismount-mount ve Information store servisini de tekrar restart etmeyi unutmayınız.
Yararlı olması dileğiyle.
Yusuf İşleyen