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 iburstConf dosyasını düzenledikten sonra kaydedip NTP servisini yeniden başlatıyoruz.
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst
/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 ldap1Yapacağımız konfigürasyonların hepsinin bütün serverlarda eksiksiz şekilde yapılması gerektiğini UNUTMAYIN .
10.0.0.2 ldap2.master.com ldap2
Ş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.ldifldapmodify 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=configBu adımdan sonra belirlemediyseniz şifre belirlemeniz gerekmektedir. slappasswd komutu ile belirleyebilirsiniz.
changeType: modify
add: olcServerID
olcServerID: 1
ldappasswdBü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.
New password:
Re-enter new password:
{SSHA}Sg545Nmjhedxfdd5895fMRD6d4RcLkslkeD8
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-toolssonrasında
netstat -a | egrep ":ldap"Yukarıdaki gibi bir çıktı almanız gerekmektedir bağlantı varsa.
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
NOT: bu işlem replikasyonun çalıştığını kanıtlamaz yalnızca sunucuların birbiriyle iletişim kurduğunu gösterir.
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.