Sales

OpenLDAP Multi Master replikasyonu, nasıl yapılır?

Fatih Çevik

Fatih Çevik

PlusClouds Yazarı

OpenLDAP Multi Master replicatie, hoe te doen?

OPENLDAP MULTI-MASTER REPLİKASYON YAPILANDIRMASI



Makalemize başlamadan önce bazı gereksinimleri tartışalım.
  • openLDAP yüklü en az 2 sanal makine. Bu makalede Debian 10 kullanacağız. Aynı dağıtımları kullanmanız şiddetle tavsiye edilir.
  • Kullanacağımız tüm sanal makinelerde yüklü ve senkronize bir NTP sunucusu olmalıdır.

LDAP Nedir?


Lightweight Directory Access Protocol veya kısaca LDAP (*Hafif Dizin Erişim Protokolü*), TCP/IP üzerinden çalışan dizin hizmetlerini sorgulamak ve değiştirmek için kullanılan bir uygulama katmanı protokolüdür.

Bu protokol, OpenLDAP, Sun Directory Server, Microsoft Active Directory gibi dizin sunucuları tarafından kullanılır. Yeni başlayanlar için bir veritabanı benzeri bir yapıya sahip olduğunu söyleyebiliriz, ancak bir veritabanından en büyük farkı hiyerarşik bir yapıya sahip olmamasıdır.

LDAP protokolü, mesaj tabanlı bir protokoldür. Bu, istemcinin bir LDAP mesajı ile bir istek oluşturduğu ve mesajı sunucuya gönderdiği anlamına gelir. Sunucu bu isteği işler ve sonucu bir veya daha fazla LDAP mesajı olarak istemciye geri gönderir.

LDAP'in mesaj tabanlı bir protokol olması nedeniyle, istemci aynı anda birden fazla istek yapabilir. Örneğin, bir istemci aynı anda iki arama yapabilir. Aynı anda birden fazla istek yapabilme yeteneği, LDAP protokolünü HTTP gibi bu özelliğe sahip olmayan protokollerden daha esnek ve verimli hale getirir.


OpenLDAP Nedir?


OpenLDAP, OpenLDAP projesi tarafından geliştirilen bir LDAP uygulamasıdır. OpenLDAP, BSD benzeri bir lisans olan Açık Kaynak Lisansı kullanır. Platformdan bağımsız bir protokoldür. Birçok yaygın Linux dağıtımı, LDAP desteği için OpenLDAP yazılımını içerir.


NTP Nedir?


NTP, yedeklilik kapasitesine sahip bir zaman senkronizasyon sistemidir. Ağdaki ve hedef makinedeki algoritmaların gecikmelerini ölçer. Bu tekniklerle saatleri milisaniye hassasiyetinde senkronize edebilir. NTP ayarları, kullanılan dağıtıma bağlı olarak /etc/ntp.conf veya /etc/xntp.conf dosyası üzerinden yapılır.

Çoğu temel yapılandırmada, ntp.conf dosyasında iki sunucu adı bulunur. Biri zamanın ayarlanacağı sunucunun adı, diğeri ise hayali bir IP adresidir.
Ağ sorunları durumunda veya NTP sunucusu çevrimdışı veya çökmüşse, hayali IP adresi kullanılır. Sistem üzerindeki NTP uygulaması tekrar çevrimiçi hale geldiğinde, sistem saatini bu sunucuya göre yeniden ayarlayacaktır. Bu iki sunucudan ilki birincil sunucu olarak işlev görürken, ikincisi yedek olarak hizmet eder. Ayrıca bu hedef dosyanın konumu belirtilmelidir. Zamanla, NTP sistem zamanındaki hata oranını "öğrenecek" ve buna göre kendini ayarlayacaktır.



Şimdi yapılandırmaya başlayabiliriz. openLDAP'i yükleyerek başlayalım.

apt -y install slapd ldap-utils

1. Öncelikle NTP sunucusunun yapılandırmasıyla başlıyoruz. Kullanacağımız tüm makinelerdeki NTP sunucuları aynı yapılandırmaya sahip olmalı ve senkronize olmalıdır, aksi takdirde replikasyon gerçekleşmeyecektir.
apt -y install ntp
Şimdi kurduğumuz NTP sunucularını birbirleriyle senkronize olacak şekilde yapılandıracağız. Bu makalede Asya'daki NTP sunucuları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 kaydedin ve NTP hizmetini yeniden başlatın.
/etc/init.d/ntp restart
2. Sunucular birbirlerini tanımalı

Kullandığımız tüm sunucular birbirlerini tanımalı ve sorunsuz bir şekilde iletişim kurmalıdır. Mümkünse yerel DNS kullanabilirsiniz. Örneğimizde DNS olmadığı için hosts dosyasını yapılandıracağız.
nano /etc/hosts
10.0.0.1 ldap1.master.com ldap1
10.0.0.2 ldap2.master.com ldap2
Yaptığımız tüm yapılandırmaların tüm sunucularda eksiksiz olarak yapılması gerektiği önemlidir UNUTMAYIN .
Şimdi ping atmayı deneyebilirsiniz.

3. slapd'nin varsayılan yapılandırmasını değiştirmeliyiz.

/etc/default/slapd dosyasında sunucuların ana bilgisayar adlarıyla eşleşen girişler olmalıdır. Bu adımı atlarsanız, 'read_config serverID/URL match found' hata mesajını alma olasılığınız yüksektir.
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 replikasyon yapılandırması

Her adım için yeni bir ldif dosyası açmanızı şiddetle tavsiye ederim. Bu, işlevsellik açısından size çok yardımcı olacak ve ne yaptığınızı ve ne yapmadığınızı görmenizi sağlayacaktır. syncprov modülünü yükleyerek 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
Yapılandırmalarımızı ldapmodify ile sunucuya ekliyoruz. Aynı işlemleri tüm sunucularda yapmanız gerektiğini unutmayın.

Şimdi tüm sunucularda replikasyon için veritabanı yapılandırmasını değiştirmeliyiz. Her sunucu için olcServerID değerini ayrı ayrı değiştirin. Örneğin, ilk sunucu için 1, ikinci sunucu için 2.
nano olcserverID.ldif
dn: cn=config
changeType: modify
add: olcServerID
olcServerID: 1
Bu adımdan sonra, henüz yapmadıysanız, bir şifre ayarlamanız gerekir. Bunu slappasswd komutuyla yapabilirsiniz.
ldappasswd
New password:
Re-enter new password:
{SSHA}Sg545Nmjhedxfdd5895fMRD6d4RcLkslkeD8
Bu adımı tüm sunucularda gerçekleştirmeniz çok önemlidir. Aynı şifreyi seçseniz bile, kesinlikle anahtarın bir kopyasını yapmayın, her sunucuda ayrı ayrı çalıştırın. Şimdi yapılandırmaya şifrenizi 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ğlanabilmelisiniz. Şifreyi yanlış girerseniz bir hata mesajı alırsınız. Doğru girerseniz ve her şey çalışıyorsa, hiçbir şey olmayacaktır.


Şimdi tüm sunucular için replikasyon yapılandırmasını ekleyeceğiz. Bu işlemi daha önce tanımlanan olcServerID değerleriyle gerçekleştireceğiz.

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 tüm sunuculara syncprov yapılandırmasını 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 yapılandırmasını eklemektir.

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

Yapılandırmayı eksiksiz ve doğru bir şekilde gerçekleştirdiyseniz, sunucular arasındaki bağlantıyı netstat komutuyla test edebilirsiniz. Netstat komutu çalışmıyorsa, net-tools hizmetini yüklemeniz gerekir.

apt -y install net-tools
Ardından
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ı alırsanız, bu bir bağlantı olduğunu gösterir.


NOT: bu eylem replikasyonun çalıştığını kanıtlamaz, sadece sunucuların birbirleriyle iletişim kurduğunu gösterir.

Şimdi replikasyonun çalışıp çalışmadığını test etme zamanı. Bunu, yapılandırmaya sahte bir olcServerID ekleyerek yapabiliriz. İlk cihaza eklediğimiz sahte yapılandırmayı ikinci sunucuda kontrol edeceğiz. Bunu slapcat komutuyla kolayca öğrenebiliriz. ldap1 üzerinde aşağıdaki ldif dosyasını oluşturun ve yapılandırmayı güncelleyin.

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

Replikasyon çalışıyorsa, ikinci sunucuda sahte adresi göreceğiz. ldap2 üzerinde aşağıdaki komutu çalıştırın ve çıktıyı inceleyin.

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 yapılandırmanız tamamlanmış demektir. Diğer veritabanlarının yapılandırmasına geçebiliriz.


5. Diğer veritabanlarının replikasyonu

Önceki adımda sunucu replikasyonu gerçekleştirdiğimiz için, sonraki adımların yalnızca bir sunucuda yapılması diğerlerini güncellemek için yeterlidir. Şimdi, daha önce olduğu gibi, MDB veritabanımız için syncprov modülünü 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 yapılandırmasını ekliyoruz.

nano syncrepl.ldif
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 dizin yapılandırmasını 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

Tüm bu adımlar doğru bir şekilde gerçekleştirildiyse, her iki sunucuda da master replikasyon aktif olmalıdır. MDB veritabanının replikasyonunun doğru çalışıp çalışmadığını test etmek için bir ldif dosyası açalım ve diğer sunucuda kontrol etmek için bir ekleme yapalım.

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. Yeni eklenen grup ve People değerlerini görüyorsak, replikasyon tamamlanmış ve aktif olarak çalışıyor demektir.