Blog ' da Ara

Loading

13 Nisan 2012

Oracle RAC Servis Yönetimi

Belli bir gruba ait iş yükünü yönetmek yada database gelen bağlantıları yaptıkları işe göre guruplandırıp, bu guruplara benzer  karakteristiklerde kurallar tanımlamak için oracle veritabanında servisler kullanılır. Örneğin çalışan Batch joblarda  İnsan kaynakalrı  ile alakalı olanlar için HR adında bir servis tanımlayıp insan kaynakları uygulamalarından gelen bağlantıları HR servisi üğzerinden database ulaştırabilir, sonrasında hr servisnin kullandığı cpu yu kısıtlayabilir veya farklı bir bağlantı metodu tanımlayabilir yad istersek bir rac sisteminin sadece belli bir noduna bağlanmasını sağlayabiliriz.
                Bir servisi tüm node larda çalışacak şekilde oluşturursak buna UNIFORM servis denir. Yada tam Tersi olarak sadece tek bir makinada hizmet verecek şekilde oluşturursak buna da SINGLETON servise denir.
                Yine bir servisi öncelikli olarak rac1 instancede çalışacak ancak rac1 instance online olmadığında yada crash durumu olduğunda rac2 instacede çalışacak şekilde oluşturusak; bu durumda rac1 PREFERRED , rac2 ise AVAILABLE instanceler olmuş olur.
                Oracle Servisleri yukarıda tanıtmaya çalıştık. Şimdi bu servisler nedir, nasıl oluşturulur ve nasıl yönetilir  konularında açıklamalar ve örneklemeler yapmaya çalışacağız.
                Default Servisler
                Bir database de en fazla 115 servis uygulama için oluşturulabilir. SYS$BACKGROUND ve SYS$USERS ise oracle tarafından default oluşturulan , silinemeyen ve değiştirlemeyen servislerdir.Yani internal servislerdir diyebiliriz. Default servisler tüm rac nodelarında daima erişilebilir durumdadır yani avail dir.
                Servis oluşturma ve yönetme
                Servisleri Enterprise Managerda, Cluster Managed Database Services sayfasında oluşturabilir ve yönetebilirsiniz. Ayrıca srvctl de bu işlemi daha pratik ve hızlı yapabileceğim bir komut yönetcisidir. Burada daha çok srvctl ile devam edeceğiz.


                *Örneğin RAC1 ve RAC2 isimlerinde iki adet instanceye ait RAC veritabanı için PROD adında bir servis oluşturalım.Ancak bu servis normalde RAC1 de çalışsın ancak RAC2 dede çalışabilecek durumda olsun.Yani RAC1 herhangi bir durumda hizmet veremez olursa RAC2 den çalışacak şekilde servis oluşturalım.Bunun için yapmanız gerekn aşağıdaki gibi bir komut çalıştırmak.
                srvctl add service –d RAC –s PROD –r RAC1 –a RAC2
                Burada kullandığımız komut opsiyonlarından bahsedecek olursak.
–d : Database ismi
-s: Servis ismi
-r: Preferred yani yani servisin default çalışacağı instance
-a:Available yani servisin ikincil olarak seçeceği instance.

Burada dikkat etmeniz gereken ; srvctl ile servis oluşturulduğunda servis tnsnames.ora dosyasında güncellenmez ve başlamış olmaz.Servisin başlaması için bu işlemleri de yapmış olmanız gerekir.Aşağıda örnek bir tns tanımlaması bulunmaktadır.Clientlar için tns scan  kullanılarak tanımlanmış ve load balance yani yük dengeleme opsiyonu da açılmıştır.
PROD=(DESCRIPTION=
( LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=TCP)(HOST=cluster01-scan)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME= PROD )))
Sonrasında Servisi tüm instancelerde başlatmak için yine srvctl ile aşağıdaki komutu çalıştırmanız yeterlidir.
srvctl start service –d RAC –s PROD
Bir servisi durdurmak içinse aşağıdaki gibi komut çalıştırılabilir.
srvctl stop servise –d RAC –s PROD –I RAC1,RAC2
Yine bir servisi bir instance de diasable etmek istiyorsanız.
srvctl disable service –d RAC –s PROD –s PROD –i RAC1
Peki bir servisi belli bir instance için preferred yapmak istiyorsanız?
srvctl modify service –d RAC  –s PROD  –i RAC2  -r
Bazende bir instanceyi restart etmeniz yada bir nodu reboot etmeniz gerekebilir.Ancak bu sürede servis kesintisi almak istemezsiniz servisin diğer instancede devam etmsiniz isterseniz.Bunun için servisi taşımanız gerekir.Ancak bu işlem sırasında mevcut connectionlar reboot edilecek noda kalacağı için ( servis taşıma aslında yeni geleln connectionları diğer makinaya yönlendirmektir.) kısa süreli bir kesinti olabilir.
srvctl relocate service  -d RAC  -s PROD  –i RAC1 –t RAC2  --Bu örnekte PROD servisi RAC1 instancesinden RAC2 instancesine taşınmaktadır.

                Servislerde Bağlantı Üzerinden Yük  Nasıl Dengelenir?
                Bağlantı üzrinden yük iki şekilde degelenebilir.
                1-Client taraflı dengeleme: Listener vasıtası ile clientların farklı instancelere gitmesi sağlanır.
                2-Server  taraflı dengeleme:Server  tarafında ise yük için en uygun instance servise vasıtası ile sağlanıt ve client ‘ a ait bağlantı en iyi instanceye yönlendirilir.
                Örneğin ERP uygulamasının bağlantıları uzun süreli çalışıyorsa ve HR uygulamasının bağlantılarıda kısa süreli çalışıyorsa bu iki uygualama için ayrı ayrı servisler oluşturarak load balance yani yük sengesi sağlanabilir.  Böylece her iki uygulamanın yükünü instanceler arasında ve bağlantı açısından dengelemek mümkündür. Bu işlem için srvctl kullanılabilir.
srvctl  modify service –s  service_name –j LONG|SHORT

Bulunla birlikte servisler için kaynak yönetimi yapabilmek de mümkündür.Enterprise manager üzerinde server sayafasında consumer group mapping linki üzerinden bir servis için instance kaynaklarını limitleyebilirsiniz. %25 cpu kullansın vs..
                Servislere dair istatistikleri enterprise manager üzerinde top services sayfasında erişebilir yada gv$service_stats, gv$service_event,gv$service_wait_class,gv$servicemetric  viewları üzerinden de ulaşabilirsiniz.
               
                                                                                         ÖZCAN YILDIRIM 

0 YORUM:

Yorum Gönder

"Sorularınız ve Eleştirileriniz Değerlidir"