PostgreSQL
Postgresql açık kaynak kodlu,gelişmiş bir Database yönetim sistemidir. Client-Server mimarisi temellidir. Çoğu database sisteminde olduğu gibi yazanlar ve okuyanlar birbirini bloklamaz. Standart haline gelmiş sql dilini kullanır. Çoğu kişi tarafından Mysql ile kıyaslansa da ikisinin benzer tek yönü açık kaynak kodlu sistemler olması olarak nitelendirilir.
Postgresql kaynaklarından okuduğum kadarıyla ; Oracle’ın 7 sürümüyle gelen, yazan ve okuyanların birbirini bloklamaması özelliğiyle (snapshat isolation) dizayn edilmiş ilk database postgresql’dir. Bu özelliği anlamak için http://en.wikipedia.org/wiki/Snapshot_isolation makalesi okunabilir. Snapshat isolation, bir örnekle açıklayacak olursak; mesela bir çalışan tablomuzun olduğunu ve bir çalışanın maaşına %50 zam yaptığımızı düşünelim, bu işlem uzun süren bir sql olsun ve 2 saat sonunda commit edilsin. Bu iki saat içinde database’den bu maaş bilgisini çekmeye çalışan birisi, bu verinin tutarlı bir haline erişmek zorundadır.Dolayısıyla eski maaş bilgisine erişmeye devam edecektir bu sql tamamlanana kadar. Bu durumda yazan ve okuyanlar birbirini bloklamamış oluyor. Postgresql ile kullanıcılar kendi datatiplerini,index tiplerini,operatörlerini yaratabilir. Postgresql’i ücretsiz olarak http://www.postgresql.org/download/ adresinden indirebilirsiniz. Bunun yanında çoğu linux dağıtımı içinde paketler halinde bulunmaktadır. İlgili RPM paketlerini indirip linux sunucumuza kurduğumuzda postgreyi yüklemiş oluyoruz..Detaylı kurulum adımları için https://wiki.postgresql.org/wiki/Detailed_installation_guides#General_Linux dökümanı incelenebilir.
Ben oracle Linux 6.3’ün kurulum sırasında postgres paketlerini seçtim ve Linux kurulduğu sırada postgres de kurulmuş olarak geldi. Oracle da olduğu gibi postgresde de linux üzerinde ayrı bir OS user’ı yaratılması gerekiyor. Dediğim gibi ben ilgili paketi seçtiğimde postgres OS user’ı da sistemimde yaratıldı.
Bu kurulum sırasında aşağıdaki environmentlar da oluşturuldu.
PGDATA=/var/lib/pgsql/data
PGPORT=5432
PGLOG=/var/lib/pgsql/pgstartup.log
Daha sonra postgres database’imizi ilk defa başlatmak için yapmamız gereken değişiklikler aşağıda sırasıyla verilmiş ( http://www.postgresql.org/docs/9.1/static/runtime.html )
17.1. The PostgreSQL User Account
17.2. Creating a Database Cluster
17.3. Starting the Database Server
17.3.1. Server Start-up Failures
17.3.2. Client Connection Problems
17.4. Managing Kernel Resources
17.4.1. Shared Memory and Semaphores
17.4.2. Resource Limits
17.4.3. Linux Memory Overcommit
17.5. Shutting Down the Server
17.6. Upgrading a PostgreSQL Cluster
17.6.1. Upgrading Data via pg_dump
17.6.2. Non-Dump Upgrade Methods
17.7. Preventing Server Spoofing
17.8. Encryption Options
17.9. Secure TCP/IP Connections with SSL
17.9.1. Using Client Certificates
17.9.2. SSL Server File Usage
17.9.3. Creating a Self-signed Certificate
17.10. Secure TCP/IP Connections with SSH Tunnels
Postgresql açık kaynak kodlu,gelişmiş bir Database yönetim sistemidir. Client-Server mimarisi temellidir. Çoğu database sisteminde olduğu gibi yazanlar ve okuyanlar birbirini bloklamaz. Standart haline gelmiş sql dilini kullanır. Çoğu kişi tarafından Mysql ile kıyaslansa da ikisinin benzer tek yönü açık kaynak kodlu sistemler olması olarak nitelendirilir.
Postgresql kaynaklarından okuduğum kadarıyla ; Oracle’ın 7 sürümüyle gelen, yazan ve okuyanların birbirini bloklamaması özelliğiyle (snapshat isolation) dizayn edilmiş ilk database postgresql’dir. Bu özelliği anlamak için http://en.wikipedia.org/wiki/Snapshot_isolation makalesi okunabilir. Snapshat isolation, bir örnekle açıklayacak olursak; mesela bir çalışan tablomuzun olduğunu ve bir çalışanın maaşına %50 zam yaptığımızı düşünelim, bu işlem uzun süren bir sql olsun ve 2 saat sonunda commit edilsin. Bu iki saat içinde database’den bu maaş bilgisini çekmeye çalışan birisi, bu verinin tutarlı bir haline erişmek zorundadır.Dolayısıyla eski maaş bilgisine erişmeye devam edecektir bu sql tamamlanana kadar. Bu durumda yazan ve okuyanlar birbirini bloklamamış oluyor. Postgresql ile kullanıcılar kendi datatiplerini,index tiplerini,operatörlerini yaratabilir. Postgresql’i ücretsiz olarak http://www.postgresql.org/download/ adresinden indirebilirsiniz. Bunun yanında çoğu linux dağıtımı içinde paketler halinde bulunmaktadır. İlgili RPM paketlerini indirip linux sunucumuza kurduğumuzda postgreyi yüklemiş oluyoruz..Detaylı kurulum adımları için https://wiki.postgresql.org/wiki/Detailed_installation_guides#General_Linux dökümanı incelenebilir.
Ben oracle Linux 6.3’ün kurulum sırasında postgres paketlerini seçtim ve Linux kurulduğu sırada postgres de kurulmuş olarak geldi. Oracle da olduğu gibi postgresde de linux üzerinde ayrı bir OS user’ı yaratılması gerekiyor. Dediğim gibi ben ilgili paketi seçtiğimde postgres OS user’ı da sistemimde yaratıldı.
Bu kurulum sırasında aşağıdaki environmentlar da oluşturuldu.
PGDATA=/var/lib/pgsql/data
PGPORT=5432
PGLOG=/var/lib/pgsql/pgstartup.log
Daha sonra postgres database’imizi ilk defa başlatmak için yapmamız gereken değişiklikler aşağıda sırasıyla verilmiş ( http://www.postgresql.org/docs/9.1/static/runtime.html )
17.1. The PostgreSQL User Account
17.2. Creating a Database Cluster
17.3. Starting the Database Server
17.3.1. Server Start-up Failures
17.3.2. Client Connection Problems
17.4. Managing Kernel Resources
17.4.1. Shared Memory and Semaphores
17.4.2. Resource Limits
17.4.3. Linux Memory Overcommit
17.5. Shutting Down the Server
17.6. Upgrading a PostgreSQL Cluster
17.6.1. Upgrading Data via pg_dump
17.6.2. Non-Dump Upgrade Methods
17.7. Preventing Server Spoofing
17.8. Encryption Options
17.9. Secure TCP/IP Connections with SSL
17.9.1. Using Client Certificates
17.9.2. SSL Server File Usage
17.9.3. Creating a Self-signed Certificate
17.10. Secure TCP/IP Connections with SSH Tunnels
Database için
sunucu üzerinde tanımladığımız dizini postgres’e gösteriyoruz. Bunu aşağıdaki
kodu çalıştırıarak yapıyoruz. Directory PGDATA environment’ında verdiğimiz
dizin olmalıdır.
Burda Database cluster, database sunucusu üzerinde çalışan bir single instance tarafından yönetilen database’ler topluluğu olarak tanımlanmaktadır. Bu initialization işleminden sonra PGDATA dizinine gittiğimiz zaman belli başlı konfigürasyon dosyalarının burada oluştuğunu görüyoruz.Ve default olarak postgres adıyla gelen bir database bu cluster’a eklenmiş oluyor.Bunun yanında initialization işlemi sırasında template1 adı verilen bir database daha bu clustera eklenmiş durumda.
Data area ise bu cluster içerisinde yer alan databaselerin datalarını tutan dizin olarak adlandırılır. Defaultu olmamakla birlikte /var/lib/pgsql/data ve /usr/local/pgsql/data yaygın olarak kullanılır. İnitdb –d komutunu kullanabileceğimiz gibi pg_ctl komutunu da kullanabiliriz.
-D parametresiyle data direcroty dizinimizi gösteriyoruz. Bu data directory dizinini yaratmadıysak bile initdb komutu initialization işlemi sırasında kendisi oluşturmayı deneyecektir.
Burda Database cluster, database sunucusu üzerinde çalışan bir single instance tarafından yönetilen database’ler topluluğu olarak tanımlanmaktadır. Bu initialization işleminden sonra PGDATA dizinine gittiğimiz zaman belli başlı konfigürasyon dosyalarının burada oluştuğunu görüyoruz.Ve default olarak postgres adıyla gelen bir database bu cluster’a eklenmiş oluyor.Bunun yanında initialization işlemi sırasında template1 adı verilen bir database daha bu clustera eklenmiş durumda.
Data area ise bu cluster içerisinde yer alan databaselerin datalarını tutan dizin olarak adlandırılır. Defaultu olmamakla birlikte /var/lib/pgsql/data ve /usr/local/pgsql/data yaygın olarak kullanılır. İnitdb –d komutunu kullanabileceğimiz gibi pg_ctl komutunu da kullanabiliriz.
-D parametresiyle data direcroty dizinimizi gösteriyoruz. Bu data directory dizinini yaratmadıysak bile initdb komutu initialization işlemi sırasında kendisi oluşturmayı deneyecektir.
Oracle’daki
password file mantığıyla düşünecek olursak, burda database’e erişim sırasında
ıp bazlı bir kontrol de yapılmaktadır. PGDATA dizininde yer alan pg_hba.conf
dosyası bu erişim kısıtlarıyla ilgili konfigürasyonlar yapılır. Database’i ilk
defa start ettikten sonra bunun içerisinde değişiklik yapacağız. Yine karakter
seti vb local sistem ayarlarını da initialization sırasında clustera alıyor.
Bu işlemlerden sonra database’i başlatmak için aşağıdaki komutu kullanıyoruz;
# pg_ctl start –l logfile
Daha sonra 5432 portunu kontrol ederek postgre servisinin dinlenip dinlenmediğini kontrol edebiliriz.
# lsof –i :5432
Oracle’da olduğu gibi postgres’de de kernel parametrelerini düzenlemeli ve resource limitlerini tanımlamalıyız.
Bu işlemlerden sonra database’i başlatmak için aşağıdaki komutu kullanıyoruz;
# pg_ctl start –l logfile
Daha sonra 5432 portunu kontrol ederek postgre servisinin dinlenip dinlenmediğini kontrol edebiliriz.
# lsof –i :5432
Oracle’da olduğu gibi postgres’de de kernel parametrelerini düzenlemeli ve resource limitlerini tanımlamalıyız.
Name
|
Description
|
Reasonable values
|
SHMMAX
|
Maximum
size of shared memory segment (bytes)
|
at
least several megabytes (see text)
|
SHMMIN
|
Minimum
size of shared memory segment (bytes)
|
1
|
SHMALL
|
Total
amount of shared memory available (bytes or pages)
|
if
bytes, same as SHMMAX; if pages, ceil(SHMMAX/PAGE_SIZE)
|
SHMSEG
|
Maximum
number of shared memory segments per process
|
only
1 segment is needed, but the default is much higher
|
SHMMNI
|
Maximum
number of shared memory segments system-wide
|
like SHMSEG plus
room for other applications
|
SEMMNI
|
Maximum
number of semaphore identifiers (i.e., sets)
|
at
least ceil((max_connections
+ autovacuum_max_workers + 4) / 16)
|
SEMMNS
|
Maximum
number of semaphores system-wide
|
ceil((max_connections + autovacuum_max_workers + 4) / 16) * 17 plus room for other applications
|
SEMMSL
|
Maximum
number of semaphores per set
|
at
least 17
|
SEMMAP
|
Number
of entries in semaphore map
|
see
text
|
SEMVMX
|
Maximum
value of semaphore
|
at
least 1000 (The default is often 32767; do not change unless necessary)
|
Linux için
önerilen kernel parametreleri aşağıdaki gibi set edilmelidir.
$ sysctl -w kernel.shmmax=17179869184
$ sysctl -w kernel.shmall=4194304
Shutdown işlemi için ise farklı yöntemler bulunmaktadır.
SIGTERM: Bu mode smart shutdown mode olarak adlandırılmaktadır. Bununla kapatırsak postgres yeni connectionlara izin vermeyecektir. Fakat varolan sessionların işleri yapılmaya devam edilir.Tüm sessionlar koptuktan sonra kapatma işlemi yapılır.Database online backup modda ise, backup moddan çıkana kadar bekler kapatmak için..
SIGINT: Fast shutdown mode. Yeni connectionlara izin vermez ve bağlı olan olan kullanıcıların transactionları abort edilir.DB backup modda ise backup modda terminate edilir.Ve yarıda kalan backup bir işimize yaramaz.
SIGQUIT: Immediate shutdown mode. Oracle’daki shutdown abort’a karşılık gelmektedir. Bir sonraki açılışta recovery ister.
$ sysctl -w kernel.shmmax=17179869184
$ sysctl -w kernel.shmall=4194304
Shutdown işlemi için ise farklı yöntemler bulunmaktadır.
SIGTERM: Bu mode smart shutdown mode olarak adlandırılmaktadır. Bununla kapatırsak postgres yeni connectionlara izin vermeyecektir. Fakat varolan sessionların işleri yapılmaya devam edilir.Tüm sessionlar koptuktan sonra kapatma işlemi yapılır.Database online backup modda ise, backup moddan çıkana kadar bekler kapatmak için..
SIGINT: Fast shutdown mode. Yeni connectionlara izin vermez ve bağlı olan olan kullanıcıların transactionları abort edilir.DB backup modda ise backup modda terminate edilir.Ve yarıda kalan backup bir işimize yaramaz.
SIGQUIT: Immediate shutdown mode. Oracle’daki shutdown abort’a karşılık gelmektedir. Bir sonraki açılışta recovery ister.
pg_ctl -D /usr/local/pgsql/data stop -m fast
PGDATA dizininde pg_hba.conf dosyasına user ıp’mizi bağlanabileceği databaseleri yazıp nasıl bağlanmasını istediğimizi (passwor - güvenilir) belirtip
pg_ctl reload yaparak sistemin yeni konfigürasyonları tanımasını sağlayarak bağlanıyoruz database’e.. Dbye bağlanmak için ise editör olarak pgAdmin tool’unu kullanabiliriz..
....
0 yorum:
Yorum Gönder