...
Для проверки наличия конфликтов выполнить на контроллере домена команду:
| Блок кодаcommand |
|---|
| /usr/sbin/dsconf ldap://`hostname` -D "cn=Directory Manager" repl-conflict list <доменный_суффикс> |
Эта команда выведет список всех записей, участвующих в конфликтах репликации.
...
| title | Важно |
|---|
Практические примеры использования команды представлены далее в главах
Разрешение конфликтов
Устранение ошибок типа namingConflict (ADD)
Для конфликтов добавления рекомендуется сохранять валидные записи и удалять конфликтующие:
| Блок кодаcommand |
|---|
| /usr/sbin/dsconf ldap://<имя_КД> -D "cn=Directory Manager" repl-conflict delete <dn конфликтующей записи> |
Валидными считаются записи:
...
- Сравнить конфликтующие записи:
Блок кодаcommand /usr/sbin/dsconf ldap://<имя_КД> -D "cn=Directory Manager" repl-conflict compare <dn конфликтующей записи> Проверить временные метки (атрибут
modifyTimestamp).Учесть бизнес-логику (учесть, какая запись реально используется) (учет бизнес-логики выходит за рамки настоящей статьи).
...
- Сравнить конфликтующие записи:
...
Command /usr/sbin/dsconf
...
ldap://<имя_КД>
...
-D
...
"cn=Directory
...
Manager"
...
repl-conflict
...
compare
...
<dn
...
конфликтующей
...
записи>
...
- Принять решение и выполнить одно из следующих действий:
...
- удалить конфликтующую запись (
...
- пример для удаления конфликтующей записи приведен ранее);
- сделать конфликтующую запись действующей:
...
Command /usr/sbin/dsconf
...
ldap://<имя_КД>
...
-D
...
"cn=Directory
...
Manager"
...
repl-conflict
...
swap
...
<dn
...
конфликтующей
...
записи>
...
Углубленная проверка работы репликации
После разрешения конфликтов убедитесь необходимо убедиться в корректной работе репликации. Для этого:
...
- Создать тестовую запись или измените атрибут существующей. Например,
...
- создать нового пользователя.
...
- Выполнить глубокую проверку репликации:
...
Command ds-replcheck
...
online
...
-D
...
"cn=Directory
...
Manager"
...
-W
...
-m
...
ldap://<имя_первого_КД>:389
...
-r
...
ldap://<имя_реплики>:389
...
-b
...
<доменный_суффикс>
...
-i
...
Данная проверкаmemberof,idnssoaserial,entryusn,krblastsuccessfulauth,krblastfailedauth,krbloginfailedcount
...
- , в отличие от обычной проверки, анализирует не только явно представленные данные, но и внутренние структуры данных механизма репликации:
...
- служебные метаданные (
entryusn,modifyTimestamp);
- служебные метаданные (
...
- вторичные индексы (
memberof);
- вторичные индексы (
...
- критичные для безопасности
...
- атрибуты (
krblastfailedauth); - DNS-
- атрибуты (
...
- зоны (
idnssoaserial)
- зоны (
...
- .
Диагностика проблем репликации
...
При обнаружении проблем
...
репликации рекомендуется:
- включить расширенное журналирование:
...
Command dsconf
...
-D
...
"cn=Directory
...
Manager"
...
ldap://<имя_КД>
...
config
...
replace
...
nsslapd-errorlog-level=24576
...
- Анализировать журнал в /var/log/dirsrv/<имя_инстанса>/errors
...
- , например /var/log/dirsrv/slapd-EXAMPLE-COM/errors.
Моделирование ошибок описано в раскрывающемся меню:
...
Отчет показывает расхождения между серверами dc01.ald250.pro (Supplier) и dc02.ald250.pro (Replica). Разберем Выявлены ключевые проблемы:
1. Состояние репликации (Database RUV's)
Replica is behind Supplier by: 95456 секунд секунд (~26.5 часов) - реплика серьезно отстает по времени.
Расхождения в RUV (Replica Update Vectors):
Для replica 4 (dc01):
687a55c1000100040000 68934c91000000040000(Supplier) vs687a55c1000100040000 6891d7b1000000040000(Replica)
...
Записей: 3703 (Supplier) vs 3813 (Replica) - на реплике больше записей.
3. Конфликтующие записи
...
- Обнаружено 2 конфликтующие записи.
4. Отсутствующие записи
- На реплике отсутствуют (9 записей):
3 записи в users_history (a1_9tpl..., a2_dyj..., ansible)
2 удаленных пользователя (uid=a1, uid=a2) (создавались и удалились отдельно вне воспроизведения)
Роль test_role (создавалась отдельно, вне воспроизведения)
Запись журнала journal.ald250.pro
Запись аудита login
- На основном сервере отсутствуют (52 записи):
Структура compat (пользователи, группы)
Записи sudoers
5. Несоответствия атрибутов
- Для пользователя conflict_user:
SID: S-1-5-21-...-1010 (Supplier) vs S-1-5-21-...-101500 (Replica)
Пароли: разные хеши PBKDF2-SHA512
UID/GID: 1213200010 vs 1213300500
Данные Kerberos: krbLastPwdChange, krbExtraData различаются
Имена: "conflict User" vs "conflicted User"
- Для компьютера journal.ald250.pro:
Отсутствуют атрибуты rbtaSubsystem* на реплике
Различия в objectClass (на Supplier больше классов)
- Для repl keep alive:
Метки времени: 20250806123737Z (Supplier) vs 20250805093737Z (Replica)
- Для DNA-плагина:
dnaRemainingValues: 100489 (Supplier) vs 199992 (Replica)
- Для пользователя testuser:
Атрибут 'telephonenumber': +111111111 (Supplier) vs +33333333 (Replica)
Практическое решение проблем репликации
Начнем с вывода и решения конфликтов, которые показывает dsconf:
| Блок кода | ||
|---|---|---|
| ||
dn: nsuniqueid=adc2dc01-71ea11f0-816fe86f-aa36b0da+uid=conflict_user,cn=users,cn=accounts,dc=ald250,dc=pro
cn: conflicted User
displayName: conflicted User
gecos: conflicted User
gidNumber: 1213300500
givenName: conflicted
homeDirectory: /home/conflict_user
initials: cU
ipaNTSecurityIdentifier: S-1-5-21-196329585-3226835358-3389735258-101500
ipaUniqueID: c173c7be-71ea-11f0-a685-02000a452904
krbCanonicalName: conflict_user@ALD250.PRO
krbExtraData:: AAI445Focm9vdC9hZG1pbkBBTEQyNTAuUFJPAA==
krbLastPwdChange: 20250805105552Z
krbPasswordExpiration: 20250805105552Z
krbPrincipalKey:: MIHeoAMCAQGhAwIBAaIDAgEBowMCAQGkgccwgcQwaKAbMBmgAwIBBKESBBBjQjo4PD1ZLVBIfEI0KitroUkwR6ADAgESoUAEPiAAXxsWn7SM64uMNXVBzUsCpN1JZOObIc/h+tt+/vlGqWrfFMcF2en4vgPJJo/qtKx0+886arhXPkdPAv4bMFigGzAZoAMCAQShEgQQNTBRWS07MXNTUFZpcCZVJKE5MDegAwIBEaEwBC4QAFnNxLdgMlcm6rpsMIqgh6CN2IWb/cTk6Jj/sKQYGZkU8KlkJHuelUVz0bSk
krbPrincipalName: conflict_user@ALD250.PRO
loginShell: /bin/bash
mail: conflict_user@ald250.pro
mepManagedEntry: cn=conflict_user,cn=groups,cn=accounts,dc=ald250,dc=pro
nsds5replconflict: namingConflict (ADD) uid=conflict_user,cn=users,cn=accounts,dc=ald250,dc=pro
objectClass: top
objectClass: person
objectClass: organizationalperson
objectClass: inetorgperson
objectClass: inetuser
objectClass: posixaccount
objectClass: krbprincipalaux
objectClass: krbticketpolicyaux
objectClass: ipaobject
objectClass: ipasshuser
objectClass: x-ald-user
objectClass: x-ald-user-parsec14
objectClass: x-ald-audit-policy
objectClass: rbta-unit
objectClass: rbta-address
objectClass: rbtaCustomUserAttrs
objectClass: rbta-inetorgperson-ext
objectClass: ruPostMailAccount
objectClass: rbtaUserMeta
objectClass: ipaSshGroupOfPubKeys
objectClass: ldapsubentry
objectClass: mepOriginEntry
objectClass: ipantuserattrs
proxyAddresses: SMTP:CONFLICT_USER@ALD250.PRO
rbtadp: ou=ald250.pro,cn=orgunits,cn=accounts,dc=ald250,dc=pro
rbtaou: ald250.pro
sn: User
uid: conflict_user
uidNumber: 1213300500
userPassword: {PBKDF2-SHA512}10000$uPEJ8l/mnTsjJkckyxqqJRIQx/X2OrOI$Wzm9wddHKCb9JOLl4UVQLUk/czorLTUqEOYE6QBT/l4t+B+pXgJ8xXrVmkdnKYyREYmXrpf2XyNPsOoEbzbz8A==
x-ald-user-mac: 0:0x0:0:0x0
xaldusermacmax: 0
xaldusermacmin: 0
dn: cn=conflict_user+nsuniqueid=adc2dc05-71ea11f0-816fe86f-aa36b0da,cn=groups,cn=accounts,dc=ald250,dc=pro
cn: conflict_user
description: User private group for conflict_user
gidNumber: 1213300500
ipaUniqueID: c1a7f6d8-71ea-11f0-a685-02000a452904
mepManagedBy: uid=conflict_user,cn=users,cn=accounts,dc=ald250,dc=pro
nsds5replconflict: namingConflict (ADD) cn=conflict_user,cn=groups,cn=accounts,dc=ald250,dc=pro
objectClass: posixgroup
objectClass: ipaobject
objectClass: mepManagedEntry
objectClass: top
objectClass: ldapsubentry |
...
- Получить конфликты для cn=conflict_user+nsuniqueid=adc2dc05-71ea11f0-816fe86f-aa36b0da,cn=groups,cn=accounts,dc=ald250,dc=pro
...
Command
...
dsconf ldap://dc01.ald250.pro
...
-D
...
"cn=Directory
...
Manager"
...
repl-conflict
...
compare
...
Пример вывода команды:cn=conflict_user+nsuniqueid=adc2dc05-71ea11f0-816fe86f-aa36b0da,cn=groups,cn=accounts,dc=ald250,dc=pro Блок кода collapse true Conflict Entry: dn: cn=conflict_user+nsuniqueid=adc2dc05-71ea11f0-816fe86f-aa36b0da,cn=groups,cn=accounts,dc=ald250,dc=pro cn: conflict_user description: User private group for conflict_user gidNumber: 1213300500 ipaUniqueID: c1a7f6d8-71ea-11f0-a685-02000a452904 mepManagedBy: uid=conflict_user,cn=users,cn=accounts,dc=ald250,dc=pro nsds5replconflict: namingConflict (ADD) cn=conflict_user,cn=groups,cn=accounts,dc=ald250,dc=pro objectClass: posixgroup objectClass: ipaobject objectClass: mepManagedEntry objectClass: top objectClass: ldapsubentry Valid Entry: dn: cn=conflict_user,cn=groups,cn=accounts,dc=ald250,dc=pro cn: conflict_user description: User private group for conflict_user gidNumber: 1213200010 ipaUniqueID: accda578-71ea-11f0-8dec-02000a452902 mepManagedBy: uid=conflict_user,cn=users,cn=accounts,dc=ald250,dc=pro objectClass: posixgroup objectClass: ipaobject objectClass: mepManagedEntry objectClass: top
...
- Удалить конфликтующую запись, оставив только запись cn=conflict_user,cn=groups,cn=accounts,dc=ald250,dc=pro:
...
Command dsconf
...
ldap://dc01.ald250.pro
...
-D
...
"cn=Directory
...
Manager"
...
repl-conflict
...
delete
...
cn=conflict_user+nsuniqueid=adc2dc05-71ea11f0-816fe86f-aa36b0da,cn=groups,cn=accounts,dc=ald250,dc=pro - По такому же принципу
...
- разрешить второй конфликт:
Блок кода collapse true root@dc01:~# dsconf ldap://dc01.ald250.pro -D "cn=Directory Manager" repl-conflict compare nsuniqueid=adc2dc01-71ea11f0-816fe86f-aa36b0da+uid=conflict_user,cn=users,cn=accounts,dc=ald250,dc=pro Enter password for cn=Directory Manager on ldap://dc01.ald250.pro: Conflict Entry: dn: nsuniqueid=adc2dc01-71ea11f0-816fe86f-aa36b0da+uid=conflict_user,cn=users,cn=accounts,dc=ald250,dc=pro cn: conflicted User displayName: conflicted User gecos: conflicted User gidNumber: 1213300500 givenName: conflicted homeDirectory: /home/conflict_user initials: cU ipaNTSecurityIdentifier: S-1-5-21-196329585-3226835358-3389735258-101500 ipaUniqueID: c173c7be-71ea-11f0-a685-02000a452904 krbCanonicalName: conflict_user@ALD250.PRO krbExtraData:: AAI445Focm9vdC9hZG1pbkBBTEQyNTAuUFJPAA== krbLastPwdChange: 20250805105552Z krbPasswordExpiration: 20250805105552Z krbPrincipalKey:: MIHeoAMCAQGhAwIBAaIDAgEBowMCAQGkgccwgcQwaKAbMBmgAwIBBKESBBBjQjo4PD1ZLVBIfEI0KitroUkwR6ADAgESoUAEPiAAXxsWn7SM64uMNXVBzUsCpN1JZOObIc/h+tt+/vlGqWrfFMcF2en4vgPJJo/qtKx0+886arhXPkdPAv4bMFigGzAZoAMCAQShEgQQNTBRWS07MXNTUFZpcCZVJKE5MDegAwIBEaEwBC4QAFnNxLdgMlcm6rpsMIqgh6CN2IWb/cTk6Jj/sKQYGZkU8KlkJHuelUVz0bSk krbPrincipalName: conflict_user@ALD250.PRO loginShell: /bin/bash mail: conflict_user@ald250.pro mepManagedEntry: cn=conflict_user,cn=groups,cn=accounts,dc=ald250,dc=pro nsds5replconflict: namingConflict (ADD) uid=conflict_user,cn=users,cn=accounts,dc=ald250,dc=pro objectClass: top objectClass: person objectClass: organizationalperson objectClass: inetorgperson objectClass: inetuser objectClass: posixaccount objectClass: krbprincipalaux objectClass: krbticketpolicyaux objectClass: ipaobject objectClass: ipasshuser objectClass: x-ald-user objectClass: x-ald-user-parsec14 objectClass: x-ald-audit-policy objectClass: rbta-unit objectClass: rbta-address objectClass: rbtaCustomUserAttrs objectClass: rbta-inetorgperson-ext objectClass: ruPostMailAccount objectClass: rbtaUserMeta objectClass: ipaSshGroupOfPubKeys objectClass: ldapsubentry objectClass: mepOriginEntry objectClass: ipantuserattrs proxyAddresses: SMTP:CONFLICT_USER@ALD250.PRO rbtadp: ou=ald250.pro,cn=orgunits,cn=accounts,dc=ald250,dc=pro rbtaou: ald250.pro sn: User uid: conflict_user uidNumber: 1213300500 userPassword: {PBKDF2-SHA512}10000$uPEJ8l/mnTsjJkckyxqqJRIQx/X2OrOI$Wzm9wddHKCb9JOLl4UVQLUk/czorLTUqEOYE6QBT/l4t+B+pXgJ8xXrVmkdnKYyREYmXrpf2XyNPsOoEbzbz8A== x-ald-user-mac: 0:0x0:0:0x0 xaldusermacmax: 0 xaldusermacmin: 0 Valid Entry: dn: uid=conflict_user,cn=users,cn=accounts,dc=ald250,dc=pro cn: conflict User displayName: conflict User gecos: conflict User gidNumber: 1213200010 givenName: conflict homeDirectory: /home/conflict_user initials: cU ipaNTSecurityIdentifier: S-1-5-21-196329585-3226835358-3389735258-1010 ipaUniqueID: acbf75f2-71ea-11f0-8dec-02000a452902 krbCanonicalName: conflict_user@ALD250.PRO krbExtraData:: AAIV45Focm9vdC9hZG1pbkBBTEQyNTAuUFJPAA== krbLastPwdChange: 20250805105517Z krbPasswordExpiration: 20250805105517Z krbPrincipalKey:: MIHeoAMCAQGhAwIBAaIDAgEBowMCAQGkgccwgcQwaKAbMBmgAwIBBKESBBBlWVFiX0VGQy0pWD5lSEQ3oUkwR6ADAgESoUAEPiAAzbHqRTVBdHb5wmDrl77TO8VUARRi0rHmJ/98XoVsTBAvYLNRjJVPh9G0b3ghLu0PONdXZiIpu2ErHi8xMFigGzAZoAMCAQShEgQQTUZ7PTopVktRfGZFaW8+LaE5MDegAwIBEaEwBC4QAM3dD4hlnDrfq/XuK10ieoM4yAPEMA+MM+R9CW4OdIsThk9Sx36VOtIOIhSh krbPrincipalName: conflict_user@ALD250.PRO loginShell: /bin/bash mail: conflict_user@ald250.pro memberOf: cn=ipausers,cn=groups,cn=accounts,dc=ald250,dc=pro memberOf: cn=ALDPRO - Organization units,cn=roles,cn=accounts,dc=ald250,dc=pro memberOf: cn=Organization units,cn=privileges,cn=pbac,dc=ald250,dc=pro memberOf: cn=Organization units - Read - Relations,cn=permissions,cn=pbac,dc=ald250,dc=pro memberOf: cn=Organization units - Read - OU,cn=permissions,cn=pbac,dc=ald250,dc=pro memberOf: cn=conflict_user_3m98nnfmo7u7d2rsx,cn=users_history,cn=accounts,dc=ald250,dc=pro memberOf: cn=conflict_user_fow3ooa2q7q3vkvui,cn=users_history,cn=accounts,dc=ald250,dc=pro memberOf: cn=test_role,cn=roles,cn=accounts,dc=ald250,dc=pro memberOf: cn=ALDPRO ROCO Attributes Mapping - Read,cn=privileges,cn=pbac,dc=ald250,dc=pro memberOf: cn=ALDPRO ROCO Attributes Mapping - Read,cn=permissions,cn=pbac,dc=ald250,dc=pro memberOf: cn=ALDPRO ROCO Attributes Mapping - Manage,cn=privileges,cn=pbac,dc=ald250,dc=pro memberOf: cn=ALDPRO ROCO Attributes Mapping - Manage,cn=permissions,cn=pbac,dc=ald250,dc=pro mepManagedEntry: cn=conflict_user,cn=groups,cn=accounts,dc=ald250,dc=pro objectClass: top objectClass: person objectClass: organizationalperson objectClass: inetorgperson objectClass: inetuser objectClass: posixaccount objectClass: krbprincipalaux objectClass: krbticketpolicyaux objectClass: ipaobject objectClass: ipasshuser objectClass: x-ald-user objectClass: x-ald-user-parsec14 objectClass: x-ald-audit-policy objectClass: rbta-unit objectClass: rbta-address objectClass: rbtaCustomUserAttrs objectClass: rbta-inetorgperson-ext objectClass: ruPostMailAccount objectClass: rbtaUserMeta objectClass: ipaSshGroupOfPubKeys objectClass: mepOriginEntry objectClass: ipantuserattrs proxyAddresses: SMTP:CONFLICT_USER@ALD250.PRO rbtadp: ou=ald250.pro,cn=orgunits,cn=accounts,dc=ald250,dc=pro rbtaou: ald250.pro sn: User uid: conflict_user uidNumber: 1213200010 userPassword: {PBKDF2-SHA512}10000$+mn7IoPU4om7kLc9I3PS1opkiHJteGzy$uEHe5EuvMJ4c4KOukivH8+46Ohqvx8PuvSamj18k3uQnzgZ1KBl7brBq4yEGzxJc5Y6Ssl0hkxDZ2D0cMPCOLA== x-ald-user-mac: 0:0x0:0:0x0 xaldusermacmax: 0 xaldusermacmin: 0
...
Команда:Command root@dc01:~#
...
dsconf
...
ldap://dc01.ald250.pro
...
-D
...
"cn=Directory
...
Manager"
...
repl-conflict
...
delete
...
nsuniqueid=adc2dc01-71ea11f0-816fe86f-aa36b0da+uid=conflict_user,cn=users,cn=accounts,dc=ald250,dc=pro
...
Enter
...
password
...
for
...
cn=Directory
...
Manager
...
on
...
...
root@dc01:~#
...
dsconf
...
ldap://dc01.ald250.pro
...
-D
...
"cn=Directory
...
Manager"
...
repl-conflict
...
list
...
dc=ald250,dc=pro
...
Enter
...
password
...
for
...
cn=Directory
...
Manager
...
on
...
...
There
...
were
...
no
...
conflict
...
entries
...
found
...
under
...
the
...
suffix
...
- Перезапустить службу каталога
...
- :
...
| collapse | true |
|---|
Command systemctl restart dirsrv@* - Повторно проверить состояние репликации:
Command
root@dc01:~#
...
ds-replcheck
...
online
...
-D
...
"cn=Directory
...
Manager"
...
-W
...
-m
...
...
-r
...
...
-b
...
"dc=ald250,dc=pro"
...
-i
...
memberof,idnssoaserial,entryusn,krblastsuccessfulauth,krblastfailedauth,krbloginfailedcount
...
Пример вывода команды:Блок кода collapse true Enter password: ================================================================================ Replication Synchronization Report (Thu Aug 7 10:15:54 2025) ================================================================================ Database RUV's ===================================================== Supplier RUV: {replica 3 ldap://dc02.ald250.pro:389} 687a55d0000100030000 6894526b000500030000 {replica 4 ldap://dc01.ald250.pro:389} 687a55c1000100040000 6894527e000300040000 {replicageneration} 687a55c1000000040000 Replica RUV: {replica 3 ldap://dc02.ald250.pro:389} 687a55d0000100030000 6894526b000500030000 {replica 4 ldap://dc01.ald250.pro:389} 687a55c1000100040000 6894527e000300040000 {replicageneration} 687a55c1000000040000 Replication State: Supplier and Replica are in perfect synchronization Entry Counts ===================================================== Supplier: 3704 Replica: 3824 Tombstones ===================================================== Supplier: 21 Replica: 21 Missing Entries ===================================================== Entries missing on Supplier: - cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:53 2025) - cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:53 2025) - uid=conflict_user,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:14:42 2025) - uid=testuser,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - uid=admin,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ng,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:53 2025) - cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:53 2025) - cn=testuser,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - cn=print_admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=Default\20SMB\20Group,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ald\20trust\20admin,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=editors,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=computers,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:53 2025) - ou=sudoers,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:53 2025) - cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:53 2025) - cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:53 2025) - uid=conflict_user,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:14:42 2025) - uid=testuser,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - uid=admin,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ng,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:53 2025) - cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:53 2025) - cn=testuser,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - cn=print_admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=Default\20SMB\20Group,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ald\20trust\20admin,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=editors,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=computers,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:53 2025) - ou=sudoers,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:53 2025) - cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:52 2025) - cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:52 2025) - uid=conflict_user,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:14:42 2025) - uid=testuser,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - uid=admin,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ng,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:52 2025) - cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:52 2025) - cn=testuser,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - cn=print_admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=Default\20SMB\20Group,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ald\20trust\20admin,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=editors,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=computers,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:52 2025) - ou=sudoers,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:52 2025) - cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:52 2025) - cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:52 2025) - uid=conflict_user,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:14:42 2025) - uid=testuser,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - uid=admin,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ng,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:52 2025) - cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:52 2025) - cn=testuser,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - cn=print_admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=Default\20SMB\20Group,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ald\20trust\20admin,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=editors,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=computers,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:52 2025) - ou=sudoers,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:52 2025) - cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:51 2025) - cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:51 2025) - uid=conflict_user,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:14:42 2025) - uid=testuser,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - uid=admin,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ng,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:51 2025) - cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:51 2025) - cn=testuser,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - cn=print_admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=Default\20SMB\20Group,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ald\20trust\20admin,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=editors,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=computers,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:51 2025) - ou=sudoers,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:51 2025) - cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:50 2025) - cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:50 2025) - uid=conflict_user,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:14:42 2025) - uid=testuser,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - uid=admin,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ng,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:50 2025) - cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:50 2025) - cn=testuser,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - cn=print_admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=Default\20SMB\20Group,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ald\20trust\20admin,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=editors,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=computers,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:50 2025) - ou=sudoers,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:50 2025) - cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:50 2025) - cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:50 2025) - uid=conflict_user,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:14:42 2025) - uid=testuser,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - uid=admin,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ng,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:50 2025) - cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:50 2025) - cn=testuser,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - cn=print_admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=Default\20SMB\20Group,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ald\20trust\20admin,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=editors,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=computers,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:50 2025) - ou=sudoers,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:50 2025) - cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:49 2025) - cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:49 2025) - uid=conflict_user,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:14:42 2025) - uid=testuser,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - uid=admin,cn=users,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ng,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:49 2025) - cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:49 2025) - cn=testuser,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Tue Aug 5 10:06:38 2025) - cn=print_admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=Default\20SMB\20Group,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=ald\20trust\20admin,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=editors,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=admins,cn=groups,cn=compat,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) - cn=computers,cn=compat,dc=ald250,dc=pro (Created on Replica at: Thu Aug 7 07:15:49 2025) - ou=sudoers,dc=ald250,dc=pro (Created on Replica at: Fri Jul 18 14:19:28 2025) Result ===================================================== There are replication differences between Supplier and Replica
...
- В выводе команды присутствует сообщение Replication State: Supplier and Replica are in perfect synchronization, означающее что синхронизация прошла успешно.
...
- Остальные конфликтующие записи разрешились самостоятельно
...
- . Также вывод команды говорит о расхождении записей каталога compat - на реплике записи присутствуют, а на 1КД - нет.
...
- Данные записи не влияют на работу ALD Pro, они относятся к
...
- плагину Schema Compatibility и этот плагин можно отключить. Данная структура не переносится при реинициализации реплики.
...
Отключим плагин на 2м КД и перезагрузим dirsrv:
| Блок кода |
|---|
root@dc02:~# ipa-compat-manage disable
Directory Manager password:
Disabling plugin
This setting will not take effect until you restart Directory Server.
root@dc02:~# systemctl restart dirsrv@* |
И при выполнении команды ds-replcheck получаем идеальный результат:
...
- Для устранения конфликта записей каталога compat можно отключить плагин на втором контроллере домена и перезагрузить службу каталогов dirsrv (команды выполняются на втором контроллере домена):
Теперь при выполнении команды:Command sudo ipa-compat-manage disable
sudo systemctl restart dirsrv@*Command ds-replcheck online -D "cn=Directory Manager" -W -m ldap://dc01:389
...
-r
...
ldap://dc02:389
...
-b
...
"dc=ald250,dc=pro"
...
-i
...
memberof,idnssoaserial,entryusn,krblastsuccessfulauth,krblastfailedauth,krbloginfailedcount
...
конфликты отсутствуют полностью:Блок кода collapse true Enter password: ================================================================================ Replication Synchronization Report (Thu Aug 7 12:11:57 2025) ================================================================================ Database RUV's ===================================================== Supplier RUV: {replica 3 ldap://dc02.ald250.pro:389} 687a55d0000100030000 68946d16000200030000 {replica 4 ldap://dc01.ald250.pro:389} 687a55c1000100040000 68946cc6000100040000 {replicageneration} 687a55c1000000040000 Replica RUV: {replica 3 ldap://dc02.ald250.pro:389} 687a55d0000100030000 68946d16000200030000 {replica 4 ldap://dc01.ald250.pro:389} 687a55c1000100040000 68946cc6000100040000 {replicageneration} 687a55c1000000040000 Replication State: Supplier and Replica are in perfect synchronization Entry Counts ===================================================== Supplier: 3724 Replica: 3724 Tombstones ===================================================== Supplier: 41 Replica: 41 Result ===================================================== No replication differences between Supplier and Replica
Реинициализация реплики
В сложных случаях может потребоваться полная реинициализация реплики:
- Создайте резервную копию:
| Блок кода |
|---|
ipa-backup -vd --online --data |
- Выполните реинициализацию на 2м КД:
...
реплики. Использование реинициализации является крайней мерой и нежелательно по следующим причинам:
Производительность: требует полной пересылки всех данных (часы простоя для больших каталогов).
Риски: может привести к потере локальных изменений, если выполнена некорректно.
Маскировка проблем: не устраняет корневые причины конфликтов (например, неправильную топологию репликации).
Реинициализация рекомендуется в следующих случаях:
после аппаратного сбоя (например, отказ жёсткого диска) на реплике;
при расхождениях в более чем 5-10% записей;
после изменения схемы данных.
Для выполнения реинициализации:
- Создать резервную копию контроллера домена:
sudo ipa-backup -vd --online --data - Выполнить реинициализацию на втором контроллере домена:
sudo ipa-replica-manage
...
- -dv
...
- re-initialize
...
- --from
...
- <имя_первого_КД>
...
- Проверить идентичность данных:
...
- ds-replcheck
...
- online
...
- -D
...
- "cn=Directory
...
- Manager"
...
- -W
...
- -m
...
- ldap://<имя_первого_КД>:389
...
- -r
...
- ldap://<имя_реплики>:389
...
- -b
...
- <доменный_суффикс>
...
- -i
...
- memberof,idnssoaserial,entryusn,krblastsuccessfulauth,krblastfailedauth,krbloginfailedcount
Почему сразу не делать реинициализацию?
Причины:
Производительность: Реинициализация требует полной пересылки всех данных (часы простоя для больших каталогов).
Риски: Может привести к потере локальных изменений, если выполнена некорректно.
Маскировка проблем: Не устраняет корневые причины конфликтов (например, неправильную топологию репликации).
Когда точно нужна реинициализация:
...
После сбоя жёсткого диска на реплике
...
При расхождениях в более чем 5-10% записей
...
Что проверять при сравнении данных после реинициализации?
...
- Проконтролировать выполнение реинициализации. При успешной реинициализации:
- В выводе команды
...
ds-replcheckдолжно быть:
...
Replication
...
- State:
...
- Supplier
...
- and
...
- Replica
...
- are
...
- in
...
- perfect
...
- synchronization
...
No
...
- replication
...
- differences
...
- between
...
- Supplier
...
- and
...
- Replica
Критичные параметры:memberof- должно совпадать членство в группах;idnssoaserial- идентичность DNS-зон;krblastfailedauth- чтобы не блокировать легитимных пользователей
- Replica
Полезные команды и сценарии
...
Сценарий проверки расхождений записей пользователей, компьютеров и подразделений:
| Блок кода |
|---|
base_dn=$(ldapsearch -Q -LLL -s base | awk '/^dn:/{print $2}')
password="<PASSWORD>"
# Для пользователей
ipa-replica-manage list 2>/dev/null | grep -E '^[a-zA-Z0-9.-]+:' | awk -F: '{print $1}' | xargs -I{} bash -c 'echo "=== Проверка пользователей на реплике: {} ==="; ldapsearch -x -h {} -b "cn=users,cn=accounts,'"$base_dn"'" -s onelevel -D "cn=Directory Manager" -w "'"$password"'" "(uid=*)" dn 2>/dev/null | grep -c "^dn:" || echo "Ошибка подключения к {}"'
# Для компьютеров
ipa-replica-manage list 2>/dev/null | grep -E '^[a-zA-Z0-9.-]+:' | awk -F: '{print $1}' | xargs -I{} bash -c 'echo "=== Проверка компьютеров на реплике: {} ==="; ldapsearch -x -h {} -b "cn=computers,cn=accounts,'"$base_dn"'" -s onelevel -D "cn=Directory Manager" -w "'"$password"'" "(fqdn=*)" dn 2>/dev/null | grep -c "^dn:" || echo "Ошибка подключения к {}"'
# Для подразделений
ipa-replica-manage list 2>/dev/null | grep -E '^[a-zA-Z0-9.-]+:' | awk -F: '{print $1}' | xargs -I{} bash -c 'echo "=== Проверка подразделений на реплике: {} ==="; ldapsearch -x -h {} -b "cn=orgunits,cn=accounts,'"$base_dn"'" -s onelevel -D "cn=Directory Manager" -w "'"$password"'" "(ou=*)" dn 2>/dev/null | grep -c "^dn:" || echo "Ошибка подключения к {}"' |
Где <PASSWORD> - пароль УЗ Directory Manager
Вывести служебную информацию Получение Replica Update Vectors (RUV), о состоянии репликации между серверами FreeIPA :
...
На вопрос Enter a bind DN for <server>:389 ответьте cn="Directory Manager"Вывести информацию о группе узлов ipaservers:
...