OpenLDAP Multi Master Replikasyonu Nasıl Yapılır?

  • Fatih Çevik
  • 07 Nov 2021
OpenLDAP Multi Master Replikasyonu Nasıl Yapılır?

OPENLDAP MULTİ-MASTER REPLİKASYON KONFİGÜRASYONU



Yazımıza başlamadan önce gerekliliklerden biraz bahsedelim.
  • En az 2 adet openLDAP kurulu sanal makine. Biz yazımızda debian 10 kullanacağız. Aynı dağıtımları kullanmanız şiddetle tavsiye edilir.
  • Kullanacağımız sanal makinelerin hepsinde kurulu ve senkronize çalışan NTP server.

LDAP Nedir ?


Lightweight Directory Access Protocol veya kısaca LDAP (\*Basit İndeks Erişim Protokolü\*) TCP/IP üzerinde çalışan indeks servislerini sorgulama ve değiştirme amacıyla kullanılan uygulama katmanı protokolü.

Bu protokol, OpenLDAP, Sun Directory Server, Microsoft Active Directory gibi indeks sunucuları tarafından kullanılmaktadır. Başlangıç için veritabanına benzer yapıda diyebiliriz fakat bir veritabanı ile en temel farkı hiyerarşik bir yapıda olmamasıdır.

LDAP protokolü message-oriented (mesaj kaynaklı) bir protokoldür. Bunun anlamı şudur: istemci istek içeren bir LDAP iletisi oluşturur, ve mesajı sunucuya gönderir, sunucu ise bu istemi işler, ve sonucu bir veya birden fazla LDAP mesajı olarak istemciye yanıtı gönderir.

LDAP mesaj tabanlı bir protokol olduğu için, istemci tek seferde birden fazla istemde bulunabilir. Örneğin bir istemci aynı anda iki arama işlemini yapabilir. Birden fazla işlemi aynı anda yababilmeyi mümkün kılması LDAP protokolünü buna izin vermeyen HTTP ve benzeri protokollere göre daha esnek ve verimli bir protokol yapmaktadır.


OpenLDAP Nedir ?


OpenLDAP, LDAP ‘ın OpenLDAP Project tarafından geliştirilmiş bir uygulamasıdır. OpenLDAP Kamu Lisansı olarak bilinen BSD-türevi bir lisans kullanmaktadır. Platform bağımsız bir protokoldür. Kullanımda olan birçok Linux dağıtımı, LDAP desteği için OpenLDAP yazılımını barındırır.


NTP Nedir ?


NTP, fazlalık kapasitesi olan bir sıralı zaman dağıtım sistemidir. Ağdaki ve de hedef makinedeki algoritmaları, gecikmeleri ölçer. Bu teknikleri kullanarak saatleri saliselere kadar senkronize edebilir. NTP ayarları hangi dağıtımın kullanıldığına bağlı olarak ya /etc/ntp.conf ya da /etc/xntp.conf dosyasından yapılır.

Çoğu temel yapılandırmalı ntp.conf dosyasında iki sunucu ismi mevcuttur. Birisi, saat ayarının yapılması istenen sunucunun adı ve diğeri de sahte bir IP adresidir.
Sahte IP adresi ağ problemleri olması durumunda veya NTP sunucusunun kapalı olması/çökmesi durumunda kullanılır. Sistemdeki NTP uygulaması, uzak NTP sunucusu ayağa kalkınca, sistem saatini tekrar ona göre ayarlayacaktır. Bu iki sunucudan birincisi asıl sunucu olarak işlem yapar, ikincisi ise yedek amaçlıdır. Ayrıca bu hedef dosyanın yeri de belirtilmelidir. NTP zamanla, sistem saatindeki hata oranını "öğrenecek" ve kendini buna göre ayarlayacaktır.



Şimdi konfigürasyon yapmaya başlayabiliriz. Başlamadan önce openldap kurulumunu yapalım.

apt -y install slapd ldap-utils

1. İlk olarak NTP server konfigürasyonu ile başlayacağız. NTP serverlar kullanacağımız bütün makinelerde aynı konfigürasyonda ve senkronize olmazsa replikasyon gerçekleşmez.
apt -y install ntp
Şimdi kurduğumuz NTP serverları birbirleriyle senkronize olacak şekilde konfigüre edeceğiz. Yazımızda Asia NTP serverlarını kullanacağız.
nano /etc/ntp.conf
server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst
Conf dosyasını düzenledikten sonra kaydedip NTP servisini yeniden başlatıyoruz.
/etc/init.d/ntp restart
2. Sunucuların hepsi birbirini tanımalı

Kullandığımız sunucuların hepsi birbirini tanımalı ve sorunsuz şekilde iletişim kurmalıdır. Eğer mevcutsa local DNS kullanabilirsiniz. Örneğimizde biz DNS sahibi olmadığımız için hosts dosyasını konfigüre edeceğiz.
nano /etc/hosts
10.0.0.1 ldap1.master.com ldap1
10.0.0.2 ldap2.master.com ldap2
Yapacağımız konfigürasyonların hepsinin bütün serverlarda eksiksiz şekilde yapılması gerektiğini UNUTMAYIN .
Şimdi ping atmayı deneyebilirsiniz.

3. slapd default konfigürasyonunu düzenlemeliyiz.

/etc/default/slapd dosyasında sunucuların hostnameleri ile eşleşen girişler olmalı. Bu adımı yapmazsanız read_config serverID/URL match found hatası alma olasılığınız yüksek.
nano /etc/default/slapd
SLAPD_SERVICES="ldapi:/// ldap://ldap1.master.com"
nano /etc/default/slapd
SLAPD_SERVICES="ldapi:/// ldap://ldap2.master.com"
4. cn=config replikasyonunun konfigüre edilmesi

Her adımda yeni bir ldif dosyası açmanızı şiddetle tavsiye ederim. Çalışma rahatlığı açısından ve ne yapıp yapmadığını görmek için çok işinize yarayacaktır. İlk olarak syncprov modülünü yüklemekle başlayacağız.
*nano syncprov.ldif*
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
ldapmodify -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
ldapmodify ile konfigürasyonlarımızı sunucumuza ekliyoruz. Bütün sunucularda aynı işlemleri yapmanız gerektiğini unutmayın.

Şimdi replikasyon için bütün sunucularda veritabanı konfigürasyonunu yapmamız gerekiyor. Her sunucu için ayrı ayrı olcServerID değerini değiştirin. Birinci sunucu için örneğin 1, ikinci sunucu için 2.
nano olcserverID.ldif
dn: cn=config
changeType: modify
add: olcServerID
olcServerID: 1
Bu adımdan sonra belirlemediyseniz şifre belirlemeniz gerekmektedir. slappasswd komutu ile belirleyebilirsiniz.
ldappasswd
New password:
Re-enter new password:
{SSHA}Sg545Nmjhedxfdd5895fMRD6d4RcLkslkeD8
Bütün serverlarda bu adımı yapmanız çok önemli. Aynı şifre belirleseniz dahi sakın ama sakın anahtarı kopyalamayın her serverda ayrı ayrı yapın. Şimdi şifrenizi konfigürasyona ekleyin.
dn: cn=config
changeType: modify
dn: olcDatabase={0}config,cn=config
add: olcRootPW
olcRootPW: {SSHA}Sg545Nmjhedxfdd5895fMRD6d4RcLkslkeD8

Her şeyi doğru yaptıysanız ldapmodify ile veritabanına bağlanabilirsiniz. Eğer şifreyi yanlış girerseniz hata alırsınız. Doğru girdiyseniz ve çalışıyorsa hiç bir şey olmayacaktır.


Şimdi bütün sunucular için replikasyon konfigürasyonunu ekleyeceğiz. Daha önce tanımladığımız olcServerID değerleri ile bu işlemi yapacağız.

nano olc.ldif
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1 ldap://ldap1.master.com
olcServerID: 2 ldap://ldap2.master.com
ldapmodify -Y EXTERNAL -H ldapi:/// -f olc.ldif

şimdi syncprov konfigürasyonunu bütün sunuculara ekleyeceğiz.

nano syncprovconf.ldif
dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
ldapmodify -Y EXTERNAL -H ldapi:/// -f syncprovconf.ldif

Son adım sunucular arasındaki SyncRepl konfigürasyonunu eklemek.

nano syncrepl.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001 provider=ldap://ldap1.master.com binddn="cn=admin,cn=config" bindmethod=simple credentials=*Your Password* searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1
olcSyncRepl: rid=002 provider=ldap://ldap2.master.com binddn="cn=admin,cn=config" bindmethod=simple credentials=*Your Password* searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1
-
add: olcMirrorMode
olcMirrorMode: TRUE
ldapmodify -Y EXTERNAL -H ldapi:/// -f syncrepl.ldif

Eğer konfigürasyonu eksiksiz ve doğru yaptıysanız netstat komutu ile serverlar arasındaki bağlantıyı test edebilirsiniz. netstat komutu çalışmıyor ise net-tools servisini yüklemeniz gerekmektedir.

apt -y install net-tools
sonrasında
netstat -a | egrep ":ldap"
tcp 0 0 0.0.0.0:ldap 0.0.0.0:* LISTEN
tcp 0 0 ldap.master.com:57116 ldap1.master.com:ldap ESTABLISHED
tcp 0 0 ldap.master.com:ldap ldap1.master.com:35382 ESTABLISHED
tcp 0 0 ldap.master.com:57120 ldap1.master.com:ldap ESTABLISHED
tcp 0 0 ldap.master.com:ldap ldap1.master.com:35388 ESTABLISHED
tcp6 0 0 [::]:ldap [::]:* LISTEN
Yukarıdaki gibi bir çıktı almanız gerekmektedir bağlantı varsa.


NOT: bu işlem replikasyonun çalıştığını kanıtlamaz yalnızca sunucuların birbiriyle iletişim kurduğunu gösterir.

Şimdi sırada replikasyonun çalışıp çalışmadığını test etmek var. Bunu konfigürasyona sahte bir olcServerID ekleyerek test edebiliriz. İlk cihazdan eklediğimiz sahte konfigürasyonu ikinci sunucuda kontrol edeceğiz. slapcat komutu ile kolay bir şekilde bunu öğrenebiliriz. ldap1 üzerinde aşağıdaki ldif dosyasını oluşturup konfigürasyonu güncelliyoruz.

nano fake.ldif
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1 ldap://ldap1.master.com
olcServerID: 2 ldap://ldap2.master.com
olcServerID: 3 ldap://fake.ldap.com
ldapmofiy -Y EXTERNAL -H ldapi:/// -f fake.ldif

eğer replikasyon çalışıyorsa ikinci sunucuda sahte adresi göreceğiz. ldap2 sunucusunda aşağıdaki komutu çalıştırıyoruz ve çıktıyı inceliyoruz.

slapcat -b "cn=config" > dump
cat dump | egrep "olcServerID"
olcServerID: 1 ldap://ldap1.master.com
olcServerID: 2 ldap://ldap2.master.com
olcServerID: 3 ldap://fake.ldap.com

sahte adresi görüyorsak cn=config konfigürasyonunuz tamamlanmış demektir. Sonraki adım olan diğer veritabanı konfigürasyonuna geçebiliriz.


5. Diğer veritabanları replikasyonu

Bir önceki adımda sunucu replikasyonunu gerçekleştirdiğimiz için bundan sonraki adımları tek bir sunucuda yapmamız diğerlerinde güncellenmesi için yeterli olacaktır. Şimdi daha önce yaptığımız gibi syncprov modülünü MDB veritabanımız için ekleyeceğiz.

nano mdb.ldif
dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
ldapmodify -Y EXTERNAL -H ldapi:/// -f mdb.ldif

Şimdi syncrepl konfigürasyonunu ekliyoruz.

nano syncrepl.ldif
nano dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=003 provider=ldap://ldap1.master.com binddn="cn=admin,dc=master,dc=com" bindmethod=simple credentials=*Your Password* searchbase="dc=master,dc=com" type=refreshAndPersist interval=00:00:00:10 retry="5 5 300 5" timeout=1
olcSyncRepl: rid=004 provider=ldap://ldap2.master.com binddn="cn=admin,dc=master,dc=com" bindmethod=simple credentials=*Your Password* searchbase="dc=master,dc=com" type=refreshAndPersist interval=00:00:00:10 retry="5 5 300 5" timeout=1
ldapmodify -Y EXTERNAL -H ldapi:/// -f syncrepl.ldif

şimdi MDB için index konfigürasyonunu yapıyoruz.

nano indexmdb.ldif
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN eq
olcDbIndex: entryUUID eq
ldapmodify -Y EXTERNAL -H ldapi:/// -f indexmdb.ldif

Eğer buraya kadar bütün adımlar doğru şekilde yapıldıysa 2 sunucunuzda da aktif olarak çalışan master replikasyonunuz tamamlanmış demektir. MDB veritabanının doğru şekilde replikasyonunun çalıştığını test etmek için bir ldif dosyası açalım ve ekleme yapıp diğer sunucumuzda kontrol edelim.

nano base.ldif
dn: ou=People, dc=master, dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=master,dc=com
objectClass: organizationalUnit
ou:Group
ldapadd -x -W -D "cn=admin,dc=master,dc=com" -f base.ldif

Şimdi ldap2 sunucumuza gidip slapcat komutunu çalıştıralım. Eğer yeni eklediğimiz grup ve People değerlerini görüyorsak replikasyon tamamlanmış ve aktif olarak çalışıyor demektir.
Size yardımcı olmamı
ister misiniz ?