воскресенье, 29 января 2017 г.

Samba 4 LDAP indexes

После добавления в самбу (Samba 4.4.4, собрана из сорцов) 15000 аккаунтов выяснилось что контроллер домена работает отвратительно. Долго обрабатываются запросы о пользователях (winbind), два проца загружены на 100%, винт не успевает, сервер на запросы отвечает с задержками. Увеличил лог левел и много читал логи... нашел что при при файл сервер в числе прочего пытается найти логин пользователя в поле uid, запрос по uid обрабатывается примерно 2 сек. Запрос обрабатывается так долго потому что в самбовском лдап нет индекса по uid, значит читается вся база пользователей.


Как проверить и добавить индекс написано вот здесь: 

Краткий пересказ-перевод:

Проверяем индексированные атрибуты

Самба хранит ЛДАП в своей собственной базе (LDB). Поддержка индексов очень проста -- на текущий момент индексируется только атрибут целиком и существует только один уровень индексирования.

Checking indexed attributes

Samba stores LDAP entries using its own database engine (LDB). Indexes support is fairly simple, at the moment only exact attribute indexing and one level indexing are available. Attribute indexing allows to index entries by attribute value and one level indexing allows to index child entries for faster access.




root@ad1:~# ldbsearch -H /var/lib/samba/private/sam.ldb  -s base -b @INDEXLIST
# record 1
dn: @INDEXLIST
@IDXONE: 1
@IDXVERSION: 2
@IDXATTR: virtualdomain
@IDXATTR: msExchRecipientTypeDetails
@IDXATTR: msExchRecipientDisplayType
@IDXATTR: msExchVoiceMailboxID
@IDXATTR: msExchUserAccountControl
@IDXATTR: msExchUnmergedAttsPt
@IDXATTR: targetAddress
...



Добавляем новый индекс

Adding a new index

В случае Самба АД мы редактируем схему ЛДАП. Прямое редактирование @INDEXLIST работать не будет, этот атрибут создается из схемы. Сначала найдем схему

For the case of Samba AD we are editing a schema based database. Take into account that directly editing @INDEXLIST will not work, as @INDEXLIST is generated from the schema. We will need to edit the schema to ensure indexing on the desired attributes:
First find the base DN for your setup:




root@ad1:~# ldbsearch -H /var/lib/samba/private/sam.ldb  -s base -b "" defaultNamingContext
# record 1
dn: 
defaultNamingContext: DC=ad1,DC=devel,DC=zentyal,DC=lan

Затем редактируем схему используя ldbedit и установим на нужном атрибуте searchFlags=1

And then edit the schema, using ldbedit and set searchFlags attribute to 1 on the attribute entry you want to index:




root@ad1:~# ldbedit -H /var/lib/samba/private/sam.ldb  -b CN=SCHEMA,CN=CONFIGURATION,DC=AD1,DC=DEVEL,DC=ZENTYAL,DC=LAN

# record 1870
dn: CN=Other-Mailbox,CN=Schema,CN=Configuration,DC=ad1,DC=devel,DC=zentyal,DC=lan
objectClass: top
objectClass: attributeSchema
cn: Other-Mailbox
instanceType: 4
whenCreated: 20150506172645.0Z
whenChanged: 20150506172645.0Z
uSNCreated: 1011
attributeID: 1.2.840.113556.1.4.651
attributeSyntax: 2.5.5.12
isSingleValued: FALSE
uSNChanged: 1011
showInAdvancedViewOnly: TRUE
adminDisplayName: Other-Mailbox
adminDescription: Other-Mailbox
oMSyntax: 64
lDAPDisplayName: otherMailbox
name: Other-Mailbox
objectGUID: 97fdabc3-0a74-4e43-b12a-f26b6c1ee16e
schemaIDGUID: 0296c123-40da-11d1-a9c0-0000f80367c1
attributeSecurityGUID: e48d0154-bcf8-11d1-8702-00c04fb96050
systemOnly: FALSE
searchFlags: 1

Вот и все, ребята, вы можете проверить свои индексы и увидеть в списке нужный атрибут.

That’s all! You can check again all your indexes and see your attribute is now there, query times should have been improved significantly.


И еще маленькая добавка к тому что написано выше...

Вот здесь у товарища такая же проблема - 5к пользователей и самба тормозит по черному, добавляет индекс по uid и получает "updates are not allowed: reject request"
https://lists.samba.org/archive/samba/2014-March/179803.html

Редактирование схемы ЛДАП по умолчанию запрещено. Разрешить редактирование можно двумя способами (может и больше)
http://pro-ldap.ru/books/samba4/ldap/schema.html

1. Добавить в секции [global] файла smb.conf:  dsdb:schema update allowed = yes
2. указать ту же самую директиву в качестве опции при вызове инструмента работы с базой данных LDB:

 ldbmodify -H path_to_sam_ldb uid.ldif --option="dsdb:schema update allowed"=true

===============
еще одни баг
ttps://forge.univention.org/bugzilla/show_bug.cgi?id=41021

DCERPC_REQUEST_TIMEOUT

Комментариев нет:

Отправить комментарий