Production Ortamda SSRS Kurulumu

MSSQL Server

Kurumsal iş zekası süreçlerinin sürekliliğini sağlamak adına, SQL Server Reporting Services (SSRS) mimarisinin Production ortamda tek bir sunucu yerine, yük dengeleme (Load Balancing) ve veritabanı düzeyinde yüksek erişilebilirlik (AlwaysOn) prensiplerine dayalı, ölçeklenebilir ve yedekli bir yapıda kurgulanması kritik önem taşır.

Aşağıdaki resimde mimariyi hayata geçirmek için izlenmesi gereken adımlar, yetki ve konfigürasyon detaylarını madde madde ele alalım:

Öncelikli olarak yapıyı genel anlamda açıklayacak olursak:

Mimarinin yorumuna en tepeden başlarsak, sistemi kullanacak olan ‘Kullanıcı’, doğrudan sunuculara değil, kurumsal ‘Uygulama’ portalı üzerinden sisteme erişmektedir. Buradaki en kritik yük dengeleme katmanı, Citrix Load Balancer cihazıdır; kullanıcı trafiğini karşılar ve tek bir giriş noktası (report23.yunusyucel.com.tr) sunarak, arkadaki SSRS sunucularının (ReportServer1 ve ReportServer2) iş yükünü eşit şekilde dağıtır.

Not: Rapor sunucularına bağlanma işlemi sadece Citrix üzerinde yapılmaktadır. SSRS sunucuları üzerinde herhangi bir konfigürasyon yapılmaz. Bu işlem Load Balancer olan ortamlar için geçerlidir.

Ortadaki SSRS Sunucuları, uygulamanın mantıksal işleme bölümüdür. ReportServer1 ile ReportServer2 olarak ikiye bölünerek sunucu düzeyinde yedeklilik ve performans artışı (scale-out deployment) sağlanmıştır. Bu iki sunucu, “durumsuz” (stateless) çalışır ve tüm rapor tanımlarını, abonelikleri ve konfigürasyon verilerini alt katmandaki veritabanı kümesinde saklar.

Alttaki SSRS Veri Tabanı Sunucuları katmanı, verinin bütünlüğü ve sürekliliği için SQL Server AlwaysOn Availability Group yapısını kullanmaktadır. Burada, ReportServer ve ReportServerTempDB veritabanları, ReportDatabaseServer1 (Primary) ve ReportDatabaseServer2 (Secondary) sunucuları arasında gerçek zamanlı olarak senkronize edilir (ortadaki çift yönlü ok bunu simgeler). Tüm SSRS ve yapılandırma veritabanı iletişimi, fiziksel sunucu IP’leri yerine, AlwaysOn yapısının sanal giriş noktası olan ‘Listener: ListenerName,Port’ üzerinden gerçekleştirilir.

Not: SSRS motoru ile veritabanının (ReportServer ve ReportServerTempDB) ayrı sunucularda olması, kaynak tüketimini (CPU/RAM) birbirinden ayırarak performans optimizasyonu sağlar.

ReportServer1 ve ReportServer2, raporlarda sunulacak olan asıl veriyi çekmek için doğrudan en altta bulunan ‘DATA SOURCE LISTENERS’ (Listener23, Listener24, Listener25) katmanına bağlanır. Bu yapı, raporlama motorunun (SSRS), uygulama veritabanlarından bağımsız olarak doğrudan gerçek verinin bulunduğu yedekli yapılara erişmesini sağlar.

Not: ReportServer sunucularından hedefte bulunan Data Source ip adreslerine ve port numaralarına yetki alınmaktadır. Yukarıdaki topolojide belirtilen Data Source’lar Listener olduğu için ilgili listener altında bulunan replicalara ve sql server port numaralarınada yetki alınması gerekmektedir.

Sonuç olarak bu topoloji, kullanıcı erişiminden veri kaynağına kadar her aşamada tek nokta hata (single point of failure) riskini ortadan kaldıran, profesyonel bir canlı ortam mimarisini başarıyla modellemektedir. Ayrıca SSRS, bir raporu oluştururken (rendering) ciddi miktarda CPU ve RAM tüketir. Karmaşık bir raporun Excel veya PDF formatına dönüştürülmesi tamamen SSRS servisinin (Rapor Sunucusu) üzerindeki işlemci gücünü kullanır. SSRS, büyük raporları işlerken “Memory Pressure” (bellek baskısı) oluşturabilir. Eğer SQL Server (Database Engine) ile aynı makinede olsaydı, SQL Server’ın Buffer Pool için ayırdığı RAM ile SSRS’in rendering için ihtiyaç duyduğu RAM sürekli çatışacaktı. Bu da hem raporların yavaş açılmasına hem de veritabanı sorgularının yavaşlamasına neden olur. Sonuç: Eğer Max Server Memory ayarını çok hassas yapmazsanız, bir rapor çekildiğinde SQL Server’ın performansının düştüğünü veya tam tersi durumda raporun “Out of Memory” hatası verdiğini görebilirsiniz.

Gerçek sistem üzerinde hangi adımlardan geçtiğimizi madde madde açıklayalım.

  • SSRS sunucuları ve Veritabanı sunucularına belirlenen işletim sistemlerinin kurulması ve güncellemelerinin tamamlanması gerekmektedir. Bunun için hangi işletim sisteminin hangi SSRS ile uyumlu ve performanslı bir şekilde çalışacağının belirlenmesi gerekmektedir.

SSRS 2022: Windows Server 2022, Windows Server 2019 ve Windows Server 2016’yı destekler.
SSRS 2019: Windows Server 2019, Windows Server 2016 ve Windows Server 2012 R2 ile uyumludur.
SSRS 2017: Windows Server 2016, 2012 R2, 2012 ve 2008 R2 (SP1+) sürümlerinde çalışabilir.
SSRS 2016: Windows Server 2016, 2012 R2, 2012 ve 2008 R2 ile uyumludur.

  • SSRS sunucuları ve özellikle yüksek veri trafiği yönetecek olan Veritabanı sunucuları için performans odaklı disk konfigürasyonunun (RAID yapılandırmaları) yapılması gerekmektedir.

SSRS mimarisinde son kullanıcı rapor çekmek istediğinde, raporun ekrana gelme süreci ve hangi sunucunun diskini/kaynağını kullandığı aşama aşama şu şekilde gerçekleşir. Kullanıcı bir raporu görüntülemek istediğinde, istek Load Balancer üzerinden SSRS sunucularından birine düşer. Bu aşamada SSRS sunucusu şunları yapar.

Rapor oluşturulurken (render edilirken) SSRS sunucusunun yerel diskindeki C:\Program Files\Microsoft SQL Server Reporting Services\SSRS\LogFiles veya yapılandırılmışsa özel Temp klasörleri kullanılır. Büyük raporlar işlenirken (örneğin binlerce sayfalık bir PDF çıktısı) bu sunucuların diskindeki geçici alanlar yoğun kullanılır.

Bu sebepten SSRS kurulurken ilgili diskin rapor performansı etkilemeyecek şekilde dizayn edilmesi gerekmektedir.

Raporun render edilmesi (görselleştirilmesi) öncelikle SSRS sunucusunun RAM’inde gerçekleşir. Eğer RAM yetmezse, veriler diske “swap” edilir (sayfalanır).

Rapor tanımının olduğu RDL uzantılı dosyalar; Raporun tasarımı, görselleri ve parametreleri ReportServer veritabanı içinde (diskteki .mdf dosyasında) saklanır. Kullanıcı raporu tıkladığında, SSRS sunucusu bu tasarım dosyasını veritabanı sunucusunun diskinden okur. Eğer rapor “Snapshot” (anlık görüntü) olarak ayarlanmışsa veya “Caching” (önbellekleme) aktifse, kullanıcıya gösterilen veri doğrudan ReportServerTempDB veritabanının diskteki dosyalarından çekilir.

Veritabanı sunucularında sql server’ın performanslı bir şekilde çalışması için Data-Log-Tempdb disklerinin oluşturulması gerekmektedir.

  • ReportDatabaseServer sunucularına sql server kurulumundan önce her iki sunucuda Failover Cluster kurulumun yapılması gerekmektedir. İlgili sunucuların aynı cluster altına eklenmesi gerekmektedir. Bunun için kullanılmayan bir ip değerine ihtiyaç vardır.

Not: İşlem yapılan sunuculara veya bir security group’unuz varsa belirtilen group veya sunuculara ilgili OU üzerinde computer objesi create-delete-read yetkisinin olması gerekmektedir. Ayrıca subdirectory’ler üzerinde de yetkisinin olması gerekmektedir.

  • Veritabanı sunucularında(ReportDatabaseServer) sql server servisinin kurulması gerekmektedir. Sql server versiyonunun Windows ve SSRS sürüm versiyonlarının kontrol edilmesi gerekmektedir. Windows server ve sql server uyumluluğu için belirtilen linkten görülebilir.

Veritabanı sunucularının Alwayson yapısına alınacağı için iki sunucu üzerinde eş zamanlı sql server servislerinin yüklenmesi gerekmektedir. Sql server kurulumunda yapılması gerekenler genel hatlarıyla Raporlama sunucunuza uygun bir Named İnstance belirlenmesi, Alwayson yapısının kurulabilmesi için domain ortamında bir servis hesabı veya gmsa hesabının olması gerekmektedir. Sql server kurulumunda instance directory default diskinde bırakılması ve data directory kurulumunun önceden belirlenen farklı bir diskte oluşturulması gerekmektedir. Sql server data file için önceden oluşturulan Data-Temp ve Log disklerine yollarının belirtilmesi gerekmektedir. Sql server’ın performans anlamında sıkıntı yaşamaması için memory alanının düzenlenmesi gerekmektedir. İlgili makaleden sql server kurulumunu detaylı bir şekilde yapabilirsiniz.

  • Active directory ortamında Raporlama sunucuları, veritabanı sunucuları, sql server servis hesabı, failover cluster ve diğer tüm kullanıcılar için  Organizational Unit yapısının oluşturulması ve security group oluşturularak delegasyon işleminin yapılması gerekmektedir. İlgili makaleden delegasyon işleminin nasıl yapıldığını detaylı görebilirsiniz.
  • Sql Server Management Studio kurulumunun yapılması gerekmektedir.
  • Veritabanı sunucuları için Alwayson yapısının aktif edilip Alwayson kurulum işlemine geçilmesi gerekmektedir. Raporla sunucularının bağlantı gerçekleştirip veritabanı oluşturacağı veya mevcutta bulunan veritabanına erişim sağlayacağı bir listener yapısının belirlenip Alwayson yapısına eklenmesi gerekmektedir.

Not: AG oluştururken Listener oluştururken hata alınırsa tekrardan OU üzerinden bir yetki sorunundan dolayıdır.

Not: Mevcutta bulunan hazır bir raporlama veritabanı varsa ve bu raporların ayrı raporlama sunucularında çalıştırılması talep edilirse ilgili ortamdan ReportDatabase ve ReportDatabaseTempDB veritabanlarının backuplarının alınıp yeni kurulacak veritabanı sunucularına restore edilmesi gerekmektedir. Restore edilen veritabanlarının yeni kurulacak raporlama sunucusu ile tam performanslı çalışması için hazırda çalışan raporlama sunucunun Reporting Services Configuration Manager üzerinden Encryption Key’in backupının alınıp yeni ortamda kurulacak SSRS üzerinden restore edilmesi gerekmektedir. Bu şekilde restore edilen veritabanları ile SSRS sunucusunun doğru bağlantı ile çalışması sağlar. Şunu da belirtmek gerekirse restore edilen veritabanlarının restore işlemi sırasında isminin değişmesi herhangi bir sakınca teşkil etmemektedir.

Aşağıdaki gibi hazır bir yapınız varsa ise veritabanı sunucularında restore işlemi yapılıp SSRS sunucularında mevcut veritabanları seçilerek bağlantı sağlanmaktadır. Sıfırdan bir kurulum için aşağıdaki oluşturulan yapı SSRS kurulumunda sonra oluşturulan yapıdır. Aşağıdaki yapı eğer sisteminizde kurulu ise SSRS sunucusunda artık kullanıcı ListenerName üzerinden bağlantı sağlamaktadır.

Yukarıdaki resimde görüldüğü gibi farklı bir ortamdaki raporlama veritabanları yeni kurulan sunucuda restore işlemi gerçekleştikten sonra SSRS sunucu ile tam uyumlu çalışma yapabilmesi için aşağıdaki resimde görülen bölüm ile mevcutta çalışan bir raporlama sunucusunun Encryption Key backup’ı alınıp yeni kurulacak SSRS sunucusuna restore işleminin gerçekleşmesi gerekmektedir. İlgili işlem veritabanı sunucuları kurulduktan sonra SSRS sunucularının kurulum bölümünde yapılmaktadır.

Restore işleminin yapılması gerekmektedir.

  • Sql Server Reporting Services kurulumunun yapılması gerekmektedir. Microsoft sayfasından ilgili indirme işleminin yapılması gerekmektedir. Kullandığınız SSRS sürümüne göre indirme işlemini rahatlıkla yapabilirsiniz. Detaylı bir report server kurulumu için ilgili makale sizlere yardımcı olabilir. SSRS kurulumunda aşağıdaki bölümlerin sırası ile yapılması gerekmektedir. İki sunucuda eş zamanlı kurulum yapılır.

Not: SSRS servisinin kurulumunda istenen KEY değerini lisanslı sql server setup dosyasının içerisinde bulunan key kullanılarak SSRS servisini lisanslı bir yapıya dönüştürebiliriz.

Not: SSRS 2022 kurulumunda .Net Framework 4.8 olması gerekmektedir. Sunucunuzun sürümü SSRS 2022 sürümünü desteleyen eski bir sürüm olduğunda(Microsoft 2022 öncesi) ilgili Framework yüklü olmaya bilir. Sunucunuz internet ortamına çıkmıyorsa offline Framework sürümünün microsoft’un sayfasından indirilmesi gerekmektedir.

Not: SSRS kurulumunda donma veya başka bir sebepten dolayı kurulum gerçekleşmemesi sonucu ilgili servis uninstall edilmeye çalışıldığında ekrana hata mesajı düşer bazı dizinleri bulamadım diye hata belirtilen dosyayı sql server’ın setup dosyasından bulunup ilgili klasör altına konulduğunda uninstall işlemi başarılı bir şekilde gerçekleşmiş olur.

Kurulum yapıldıktan sonra Reporting Services Configuration Manager üzerinden ilk bağlantı sağlanacaksa SSRS servisinin kurulu olduğu sunucunun seçilmesi gerekmektedir. Service account kısmının default şeklinde bırakılmasında herhangi bir sakınca bulunmamaktadır.

Sistemlerin/API’nin konuştuğu backend servis adresi olan Web Service URL kısmında Rapor web servisimize uygun bir isim ve port belirledikten sonra Advanced bölümünde herhangi bir şey belirlememize gerek yoktur. Default şeklinde bırakılması gerekmektedir. Çünkü arka tarafta hangi raporlama sunucusuna gideceği citrix üzerinden dağıtımlı bir şekilde yapılmaktadır.

Advanced bölümünde herhangi bir değişiklik yapılmaz.

Bulunduğunuz ortamda Citrix ve F5 gibi load balancer yoksa advanced bölümünde gelen ekranda load balancer üzerinde tanımlı olan url’in belirtilmesi gerekmektedir. Çünkü raporlama sunucusuna gelen farklı kullanıcıların farklı SSRS sunucularına gitmesi için farklı url bağlantısı gerekebilir.

Reporting Services Configuration Manager bölümünde Databases sekmesinde ise yeni bir veritabanı oluşturabildiğimiz gibi mevcut olan bir veritabanınıda belirtebiliriz. Change database bölümüne tıklayarak yeni bir ReportServer veritabanı oluşturulabildiği gibi farklı raporlama ortamında alıp veritabanı sunucusu üzerine restore edilen veritabanıda seçilebilir. Detaylı bir şekilde kurulum için ilgili makale okunabilir.

Database bölümünde önemli olan işlemlerden bir tanesi rapor veritabanlarının sıfırdan oluşturulacağı veya mevcutta bir raporlama veritabanı varsa ise veritabanın bulunduğu sunucusundaki listener ve port numarasının belirtilerek hazırda bulunan rapor veritabanına bağlanılması gerekmektedir. Eğer sıfırdan veritabanı oluşturulacaksa listener ile primary sunucuna bağlantı gerçekleştiği için veritabanı primary olan sunucu altında oluşmaktadır.

Yukarıdaki bağlantı sağlandıktan sonra gelen ekranda mevcut veritabanları üzerinde yetkili olacak bir domain veya sql kullanıcısının eklenmesi gerekmektedir.

Kullanıcıların tarayıcıdan açtığı arayüz bölümü olan Web portal URL kısmında uygun bir isim belirledikten sonra Advanced bölümünde herhangi bir şey belirlememize gerek yoktur. Default şeklinde bırakılması gerekmektedir. Çünkü arka tarafta hangi raporlama sunucusuna gideceği citrix üzerinden dağıtımlı bir şekilde yapılmaktadır.

Advanced bölümünde herhangi bir değişiklik yapılmaz.

Bulunduğunuz ortamda Citrix ve F5 gibi load balancer yoksa hangi url bağlantısının hangi sunucuya gideceği belirlenebilir. Çünkü farklı kullanıcıların farklı sunuculara gitmesi farklı url bağlantısıyla sağlanabilmektedir.

  • Farklı bir ortamda bulunan ve yeni ortama restore edilen veritabanının SSRS servisiyle tam uyumlu çalışması için Restore kısmından önceden backup alınmış olan raporlama ortamındaki Encryption Keys’in restore işleminin yapılması gerekmektedir. İki SSRS sunucusu için bu işlem yapılmaktadır.

İkinci sunucuya “Restore” ederek her iki sunucunun da aynı anahtarı kullanmasını sağlamalısınız. Aksi takdirde sunucular veritabanındaki şifrelenmiş verileri (bağlantı dizileri, kimlik bilgileri vb.) okuyamaz.

  • Scale-Out Deploymnet bölümünde İkinci SSRS sunucusunun (ReportServer2), ilk sunucunun oluşturduğu veritabanına bağlanarak yapıya dahil edilmesi gerekmektedir.(Scale-Out Deployment).

SSRS Scale-out özelliği için her iki rapor sunucusunun da SQL Server Enterprise Edition olması gerektiğini unutmamalısınız. Standart Edition bu yapıyı (Scale-out) resmi olarak desteklemez.

  • SSRS arayüzü üzerinden raporların besleneceği veri kaynaklarını(Data Sources) alacak listener ip ve portlarına firewall üzerinden yetki alınması gerekmektedir. Ayrıca listener’ın üzerinde yetkili olduğu sunucularada sunucu ip’si ve sql server port numarasına yetki verilmesi gerekmektedir.

Bu makalede Production ortamda Best practice olarak SSRS kurulumu nasıl yapıldığını görmüş olduk. Başka makalede görüşmek dileğiyle..

“…Sakın Dünya Hayatı Sizi Aldatmasın” Fatır-5

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir