Репликация LDAP: подробное руководство по методам и примерам кода

Репликация LDAP (облегченного протокола доступа к каталогам) — важнейший аспект обеспечения согласованности и доступности данных в службах каталогов. В этой статье мы рассмотрим различные методы репликации LDAP, а также приведем примеры кода, которые помогут вам эффективно реализовать репликацию в вашей среде.

  1. Репликация Master-Slave:

Репликация Master-Slave — это широко используемый метод, при котором один сервер LDAP (главный) хранит достоверную копию каталога, а один или несколько серверов LDAP (ведомые) реплицируют данные с главного.

Пример кода (OpenLDAP):

В следующем примере демонстрируется настройка главного и подчиненного серверов с использованием OpenLDAP:

Конфигурация главного сервера (slapd.conf):

database bdb
suffix "dc=mydomain,dc=com"
rootdn "cn=admin,dc=mydomain,dc=com"
rootpw {SSHA}hashed_password
...
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100

Конфигурация подчиненного сервера (slapd.conf):

database bdb
suffix "dc=mydomain,dc=com"
rootdn "cn=admin,dc=mydomain,dc=com"
rootpw {SSHA}hashed_password
...
syncrepl rid=1
   provider=ldap://master.example.com
   type=refreshAndPersist
   interval=00:00:01:00
   searchbase="dc=mydomain,dc=com"
   filter="(objectClass=*)"
   scope=sub
   schemachecking=off
   bindmethod=simple
   binddn="cn=admin,dc=mydomain,dc=com"
   credentials="admin_password"
  1. Мульти-главная репликация:

Репликация с несколькими хозяевами позволяет нескольким серверам LDAP выступать в качестве главных, то есть все они содержат достоверные копии каталога. Изменения, внесенные на любом сервере, распространяются на другие серверы.

Пример кода (OpenLDAP):

Вот пример конфигурации для репликации с несколькими хозяевами с использованием OpenLDAP:

Конфигурация сервера 1 (slapd.conf):

database bdb
suffix "dc=mydomain,dc=com"
rootdn "cn=admin,dc=mydomain,dc=com"
rootpw {SSHA}hashed_password
...
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100

...

overlay accesslog
logdb "cn=logdb" 

Конфигурация сервера 2 (slapd.conf):

database bdb
suffix "dc=mydomain,dc=com"
rootdn "cn=admin,dc=mydomain,dc=com"
rootpw {SSHA}hashed_password
...
syncrepl rid=001
   provider=ldap://server1.example.com
   type=refreshAndPersist
   interval=00:00:01:00
   searchbase="dc=mydomain,dc=com"
   filter="(objectClass=*)"
   scope=sub
   schemachecking=off
   bindmethod=simple
   binddn="cn=admin,dc=mydomain,dc=com"
   credentials="admin_password"
...
overlay accesslog
logdb "cn=logdb" 
  1. Репликация с дельта-синхронизацией:

Репликация дельта-синхронизации предполагает синхронизацию только изменений, внесенных с момента последней синхронизации. Этот метод снижает использование полосы пропускания сети и затраты на репликацию.

Пример кода (Active Directory):

Вот пример сценария PowerShell, демонстрирующего репликацию с дельта-синхронизацией для Active Directory:

# Connect to the Active Directory domain
$domain = "example.com"
$root = [ADSI]"LDAP://$domain"
# Specify the replication filter
$filter = "(&(objectCategory=*)(uSNChanged>=600000))"
# Perform the delta synchronization
$replicationScope = "Base"
$replicationOptions = [System.DirectoryServices.Protocols.SyncReplicationOptions]::IncrementalValues
$replicationCookie = $null
$pageSize = 1000
do {
    $request = new-object System.DirectoryServices.Protocols.SearchRequest -ArgumentList $root, $filter, $replicationScope
    $request.PageSize = $pageSize
    $request.Controls.Add((new-object System.DirectoryServices.Protocols.DsmlDirectoryIdentifier).GetDirectoryControl($replicationOptions, $replicationCookie))
    $response = $root.SendRequest($request)
    # Process the response and update the replication cookie
    # ...
    $replicationCookie = $response.Controls[0].GetValue()
} while ($response.Controls[0].IsPresent)

Репликация LDAP жизненно важна для поддержания согласованности и доступности данных в службах каталогов. В этой статье мы рассмотрели три популярных метода репликации: Master-Slave, Multi-Master и Delta-Synchronization. Предоставленные примеры кода могут служить отправной точкой для реализации репликации LDAP в различных средах, таких как OpenLDAP и Active Directory.

Не забудьте скорректировать примеры кода в зависимости от конкретной среды вашего сервера LDAP. Репликация LDAP гарантирует, что изменения, внесенные в каталог, распространяются на все реплики, обеспечивая надежный доступ к актуальной информации.