Veri Tabanı Yönetim Sistemleri 2
Ders 9
Dağıtık Veritabanı & Oracle RAC
Yrd. Doç. Dr. Altan MESUT
Trakya Üniversitesi
Bilgisayar Mühendisliği Bölümü
Dağıtık Veritabanı
• Her biri farklı işlemciler tarafından erişilebilen farklı
saklama birimlerini kullanan veritabanına "dağıtık
veritabanı: distributed database" denir.
• Saklama birimlerinin her biri birer bilgisayar olabilir ve bu
bilgisayarlar aynı ortamda bulunabileceği gibi, bilgisayar ağı
ile haberleşen uzak noktalarda konumlanmış ta olabilirler.
• Küme (cluster) yapısı kullanıldığından erişilen verinin hangi
düğümde saklandığı erişen istemci tarafından bilinmez.
– Küme: Dışarıdan tek bir sunucuymuş gibi algılanan ama aslında
çok çok sunuculu olan yapı
• Fiziksel bileşenlerini (CPU, RAM, HDD) paylaşan paralel
sistemler üzerinde kurulu VT'ler genellikle "dağıtık" olarak
düşünülmez.
Dağıtık Veritabanı
• Tek bir sunucu üzerinde çalışan tek bir veri tabanı
kullanılmak yerine veritabanını birçok sunucuya
dağıtarak kullanmanın faydaları:
– Özellikle sunucuların farklı ortamlarda (bina, şehir)
saklandığı durumlarda eğer birisinde güç kesintisi veya
donanım problemi meydana gelirse sistemin diğeri
tarafından devam ettirilmesi sağlanır.
– Yük paylaşımı yapılarak, daha çok kullanıcıya daha kısa
sürelerde yanıt verilebilmesi sağlanır.
– Daha fazla depolama kapasitesi elde edilir.
– Bir sunucuda disk arızası olması durumunda verilerin
kaybolmaması sağlanır (aynı sunucuda replica kullanılması
ile de bu sağlanabilir).
Dağıtık Veritabanları
• Bazı kaynaklarda* dağıtık veritabanı sistemi terimi
birbirine bağlanabilen ve birbirlerindeki nesneleri
kullanabilen farklı veritabanı sistemlerinin bütünü
olarak kullanılır.
• Sistemdeki tüm veritabanının aynı tipte olduğu
durum homojen sistem, farklı VTYS'ler bulunması
durumu ise heterojen sistem olarak adlandırılır.
– Heterojen sistemlerde farklı VTYS'ler arası haberleşme
"gateway" adı verilen arayüzler ile sağlanır
* http://docs.oracle.com/database/121/ADMIN/ds_concepts.htm
Veritabanı Bağı (Database Link)
• İki fiziksel veritabanı sunucusu arasındaki tek yönlü iletişim
yoludur.
– A veritabanına bağlı olan bir kullanıcı bu veritabanının veri
sözlüğüne eklenen bir bağ (dblink) ile B veritabanındaki bilgilere
ulaşabilir. Ama aynı bağlantı kullanılarak B veritabanından A
veritabanına ulaşılamaz (B veritabanının sözlüğüne de A'ya
ulaşabilmek için yeni bir bağ eklenmelidir).
– Bulunulan veritabanındaki tüm kullanıcıların vt1 veritabanına
bağlanabilmesi için:
CREATE PUBLIC DATABASE LINK vt1 USING 'vt1';
– Bulunulan veritabanındaki tüm kullanıcıların vt1'e, o
veritabanındaki bir kullanıcının üzerinden bağlanabilmesi için:
CREATE DATABASE LINK vt1
CONNECT TO ahmet IDENTIFIED BY abc123 USING 'vt1';
Diğer veritabanındaki personel tablosunu sorgulamak için bağ @ kullanılarak belirtilir:
SELECT * FROM [email protected];
Veriyi dağıtma nasıl yapılacak?
• Eğer küme yapısı kullanıyorsak farklı düğümdeki tablo için DBLink
ismi vermeye gerek yoktur (kümeye bağlanan istemciler sistemi tek
VT olarak görür).
• İster cluster, ister çoklu VT yapısı kullanıyor olalım, tablonun
tamamını başka bir düğüme taşıyarak veriyi dağıtmak uygun bir
çözüm olmayabilir.
• Çok sorgu gönderilen bir tablonun kopyalarını farklı düğümlerde
saklamak ve yük dengeleme* kullanmak hız kazandırabilir.
• Fakat veride değişiklik olduğu zaman tüm diğer kopyalarda ilgili
güncellemenin yapılması da zaman alıcı olacaktır.
• Tabloyu bir bütün olarak ayırmak yerine, satır ve sütun bazında
parçalamak, sorguların ve DML işlemlerinin ilgili parçalar üzerinde
yapılmasını sağlamak çoğu zaman daha etkili bir çözüm olacaktır.
* http://tr.wikipedia.org/wiki/Yük_dengeleme
Fragmentation (Parçalama)
Partitioning (Bölümlendirme)
• Verinin farklı saklama düğümlerine gönderilmek
üzere nasıl parçalanacağı belirlenirken 3 farklı
yöntemden biri tercih edilebilir:
– Dikey parçalama: Tablonun sütunlarının farklı
düğümlerde olacak şekilde parçalanması
– Yatay parçalama: Belirli bir kriter ile kayıtların
parçalanması
– Hibrit parçalama: Belirli sütunlardaki verilerden
seçilen kritere göre kayıtların parçalanması
Replication (Yineleme)
• Her parça sistemdeki tüm sunucularda saklanabilir veya
seçilmiş parçalar, seçilmiş sunucularda saklanabilir.
• İstemcinin bir sunucu üzerinde yaptığı değişikliğin diğer
sunuculara da yansıtılması gereklidir.
• Replication işlemi dağıtık veritabanında değişiklikler
arayan özel bir yazılım kullanmayı gerektirir.
• Değişiklikler tespit edildikten sonra, Replication işlemi
tüm sunucuların aynı olmasını sağlar.
• Replication dağıtık veritabanlarının boyutuna ve
sayısına bağlı olarak karmaşık ve zaman alıcı olabilir
(bilgisayar kaynaklarını çok kullanabilir).
Partial Replication (Kısmi Yineleme)
seçilmiş parçalar,
seçilmiş sunucularda
saklanır
İletişim Ağı
Duplication (Kopyalama)
• Duplication işleminde master olarak tanımlanan
bir veritabanı, belirli zaman aralıkları ile replica
olarak bilinen diğer veritabanlarına kopyalanır.
• Bu işlemde, istemciler yalnızca master
veritabanına erişebilir ve değiştirebilir.
• Master'dan replica'lara doğru tek yönlü bir
güncelleme yapıldığı için veri değişikliği daha
kolay, fakat istemcilerin iletişimde bulunduğu tek
sunucu olduğu için yük dengeleme yoktur.
Distributed Join
• Dağıtık veriyi sorgularda birleştirmek için farklı
yaklaşımlar kullanılabilir.
• R ve S tablolarının Y alanı üzerinden ilişkili olduğunu
düşünelim; R'yi S'nin tarafına veya S'yi Y'nin tarafına
göndermek ve JOIN işlemi uygulamak gönderilecek
olan verinin hacmi düşünüldüğünde pahalı bir işlemdir.
• Bunun yerine Semi Join veya Bloom Join işlemleri tercih
edilebilir.
Semi Join
• R'ye sadece S.Y sütununu gönderip, join işlemini
bu sütun üzerinde yapma yaklaşımıdır:
• R'nin sadece join ile eşleşen tekrarsız kayıtlarını
S'ye göndermek ve burada son join işlemini
gerçekleştirmek suretiyle daha az ağ trafiği ve
daha hızlı join işlemi gerçekleştirilir.
Semi Join'in etkinliği
• Semi Join'in etkinliği aşağıdaki durumlarda
artar:
– Y niteliğinin boyutu, diğer niteliklerin boyutlarına
göre küçükse
– Join işleminde seçicilik yüksekse (S'ye gönderilecek
eşleşen kayıtlar az ise)
– Join sonrası göz ardı edilebilecek çok sayıda
tekrarlı kayıt varsa
Bloom Join
• R'de K boyutunda bir bit vektör oluşturulur (ilk başta
tüm bitleri 0 olacak)
• R'deki her kayıt için Y değerine bağlı olan ve 1 ile K
arasında bir sayı döndüren bir hash fonksiyonu
yardımıyla bu bit vektörünün eşleşen bitleri 1 yapılır
• Oluşan bit vektörü S'ye gönderilir
• S'de de aynı hash fonksiyonu kullanılarak oluşturulan
bit vektörü ile R'den alınan bit vektörü karşılaştırılır
• Uyuşma olan kayıtlar join edilmesi muhtemel olan
kayıtlar olarak işaretlenir ve R'ye gönderilerek join
edilir
Atomicity (Bölünmezlik)
• Hareket (transaction) işlemede Atomicity* özelliğini sağlamak için
Commit ve Rollback işlemlerinin gerekliliğinden bahsetmiştik.
• Dağıtık VT sisteminde iki aşamalı Commit mekanizmasına ihtiyaç
vardır:
– Transaction T'yi başlatan sunucu koordinatör olur ve T'yi tamamlamak
(commit) istediğinde diğer sunuculara "prepare T" mesajı gönderir.
– Mesajı alan sunucular "ready T" veya "don't commit T" gönderir (bu
işlem biraz zaman alabileceği için koordinatör yanıtı alana kadar
beklemelidir).
– Eğer koordinatör herkesten "ready" yanıtı aldıysa bu defa diğer
sunuculara "commit T" mesajı gönderir. Bir tanesinden bile "don't
commit" aldıysa, "abort T" mesajı gönderir.
– Tüm sunucular aldıkları mesaja göre, kendi yerel hareketlerini
"commit" veya "rollback" ederler.
* ACID (Atomicity, Consistency, Isolation, Durability) http://en.wikipedia.org/wiki/ACID
Isolation (İzolasyon)
• Okuma (Sorgular) ve Yazma(DML) işlemlerinde
Isolation özelliğini sağlamak için Kilit (Lock)
mekanizmalarına ihtiyaç vardır.
• Dağıtık Kilitleme 3 farklı yaklaşım ile yapılabilir:
– Merkezi: Bir adanmış sunucu tüm kilit işlemlerinden
sorumlu olur (o sunucuda oluşacak olan hata sistemi
çalışmaz hale getirecek ve performans düşük olacak)
– Temel-kopya: VT'deki her verinin temel kopyası farklı
düğümlerde kayıtlıdır ve o veriyi kilitlemek isteyen bir
hareket, o verinin sahibi olan düğümden kilit için izin ister
– Tam-dağıtık: Okuma için elemanın herhangi bir kopyasını
kilitleme, yazmak için ise tüm kopyalarını kilitleme mantığı
Real Application Clusters (RAC)
• Oracle RAC kullanılarak birçok sunucu veya
bilgisayar birbiri ile bağlanarak tek bir VT
sistemi gibi çalışmaları sağlanabilir.
• Bir Oracle RAC veritabanı 100 farklı instance'a
sahip olabilir ve her instance kendine özel bir
undo-tablespace'i ile en az bir ilave redo
thread'i içerir.
Oracle RAC Mimarisi
Yandaki şekilde farklı
sunucularda
yürütülen
instance'lar ve
uygulama / web
sunucuları gibi diğer
ortamların onları tek
bir veritabanı gibi
algıladığı mimari
gösterilmiştir.
Uzak noktalar için RAC
• Geleneksel olarak RAC tek bir veri merkezi (data
center) üzerinde yaratılır.
• Fakat bir "extended distance cluster" kullanılarak
farklı düğümleri (node) çok uzak yerlerde
bulunabilen yapılar oluşturmak ta mümkündür.
– Bu sayede bir veri merkezinde oluşacak olan elektrik
kesintisi, su baskını ve yangın gibi doğal afetler
neticesinde veri kaybı olmaması ve hatta sistemin hiç
aksamadan devam etmesi sağlanabilir.
– Fakat tüm veri merkezlerini kapsayacak şekilde büyük
bir bölgesel felaket yaşanması durumunda bu yapı da
yetersiz kalabilir (Çözüm: Oracle Data Guard)
Oracle Clusterware
• Tüm Oracle veritabanı platformları üzerinde
çalışan entegre küme yönetim çözümü sunar:
–
–
–
–
Düğüm üyelikleri
Grup servisleri
Global kaynak yönetimi
Yüksek kullanılabilirlik fonksiyonları
• Oracle Clusterware, RAC kurulumu sırasında
yapılandırılabileceği gibi, ayrıca da kurulabilir.
• Oracle başka kümeleme çözümleri ile de
çalışabilir, fakat kendi ürünü olan Oracle
Clusterware ile daha iyi entegrasyona sahiptir.
Oracle RAC tarafından desteklenen
saklama biçimleri
• Automatic Storage Management (ASM):
Diskleri idare etme için Oracle tarafından
tavsiye edilen çözümdür.
• Oracle Cluster File System (OCFS)
• Oracle RAC için sertifikası olan üçüncü parti bir
kümeleme dosya sistemi.
• Ağ dosya sistemi (network file system)
• Biçimlendirilmemiş aygıtlar (raw devices)
Düğümler arası haberleşme
• Oracle RAC veritabanı instance'larına bir veritabanının
varsayılan IP adresi üzerinden veya VIP (Virtual IP) adresleri
üzerinden ulaşılabilir.
• Genel ağ bağlantısı dışında, kümedeki tüm düğümleri
bağlayan özel bir ağ (interconnect) oluşturmak ta gereklidir.
• Bunun için sadece kümedeki düğümler tarafından
erişilebilen ayrı bir anahtar (switch) veya anahtar kümesi
kullanılır.
• Genellikle Gigabit Ethernet hızında bir bağlantı tercih edilir.
• Linux ve Unix sistemlerinde genellikle UDP (User Datagram
Protocol) veya RDS (Reliable Data Socket) protokollerini
tercih edilirken, Windows kümeleri TCP protokolünü
kullanır.
4 düğümlü bir RAC veritabanı
Public
Network
Private
Network
(Interconnect)
Node 1
Node 2
Node 3
Node 4
Instance
1
Instance
2
Instance
3
Instance
4
Storage
Network
Shared
Storage
Cache Fusion
• Önceki slaytta gördüğümüz gibi her düğümün kendine ait
bir instance'ı vardır.
• Bir instance veriyi hafızaya çıkardığında, başka bir instance
tarafından da bu verinin kullanılabilmesi için Cache Fusion
adında bir yapı tüm instance'larda yer alan Database Buffer
Cache'lerin ortaklaşa kullanılmasını sağlar.
• Bu yapı, ihtiyacı olan diğer instance'lara gereken blokları
transfer ederken her zaman özel ağı (interconnect) kullanır.
• Cache Fusion'un ilgili veri aktarımlarında sıkıntı yaşamaması
için RAC düğümlerindeki SGA büyüklüğü, tek başına çalışan
Oracle VT'lerde olduğundan daha fazla olmalıdır.
Global Cache Service (GCS)
Global Enqueue Service (GES)
• Her instance'ın sorguyu veya hareketi yürütmek
için ihtiyacı olan blokları en hızlı şekilde elde
etmesini ve veri bütünlüğünü sağlamak için
kullanılan servislerdir.
• Temel olarak, Cache Fusion kaynaklarına erişimi
idare etmek için kullanılırlar.
• Bu servisler Global Resource Directory (GRD)
kullanarak, her veri dosyasının ve her bellek
bloğunun durumlarını muhafaza eder.
• GRD'ye aktif olan tüm instance'lar erişebilir.
Oracle RAC Arkaplan İşlemleri
• ACMS (Atomic Controlfile to Memory Service)
– İki aşamalı commit ile atomicity sağlayan servis
• GTX0-j (Global Transaction Process)
– Global hareket işlemede şeffaflık desteği sağlar
• LMON (Global Enqueue Service Monitor)
– Global işlem kuyruğunu idare eder ve gerektiğinde recovery yapar
• LMD (Global Enqueue Service Daemon) = GES
– Her instance içinde dışarıdan gelen kaynak isteklerine yanıt verir
• LMS (Global Cache Service Process) = GCS
• LCK0 (Instance Enqueue Process)
– Cache Fusion ile ilgili olmayan kaynak isteklerine yanıt verir
• RMSn (Oracle RAC Management Processes)
– Kümeye yeni bir düğüm eklendiğinde, veya kümeden düğüm
çıkarıldığında yapılacak işlemleri idare eder
Oracle RAC Kurulumu
• Oracle web sitesinden Grid Infrastructure (Clusterware)
indirilip kurulmalıdır.
• Grid Infrastructure sadece Linux ve Solaris işletim
sistemlerine kurulabileceği için istenirse bu işletim
sistemleri de aynı adresten indirilebilir.
• Eğer Windows işletim sistemi üzerinde sanal makine
oluşturarak kurulum yapılacak ise VM VirtualBox indirilip
kurulabilir.
• Ayrıca Oracle VT 10g, 11g, 12c sürümlerinden biri gereklidir.
• Kurulum ile ilgili işlem adımlarını gösteren aşağıdaki
video'lardan faydalanılabilir:
https://www.youtube.com/watch?v=x80QP-0HchI
https://www.youtube.com/watch?v=sNu50xI0nXQ
Download

Ders 9 - Dağıtık Veritabanı ve Oracle RAC - Altan MESUT