Open Directory 複寫可能無法運作;「Size Limit exceeded」(超過大小限制)出現在 slapd.log 中
Open Directory 複寫可能無法運作;在這種狀況下,/var/log/slapd.log 中會出現下列項目
slapd[209]: do_syncrep2: rid=001 LDAP_RES_SEARCH_RESULT (4) Size limit exceeded slapd[209]: do_syncrep2: rid=001 (4) Size limit exceeded
如果 Open Directory 伺服器已停用一段時間,或是在 LDAP 資料存放區中有超過 11000 個物件時建立複本,就可能會發生這種情況。11000 是搜尋中可傳回的預設物件數量上限。
允許 _ldap_replicator 使用者覆寫搜尋限制。這是透過變更每個 Open Directory 伺服器上的 LDAP 伺服器設定來完成。這涉及以目錄管理者身分進行認證,以及在「終端機」上執行一些 LDAP 修改指令。此外,還需要知道 LDAP 伺服器的搜尋基礎(search base,也稱為 naming context)。
下列步驟可用來完成這項操作。
首先,尋找 LDAP 伺服器的搜尋基礎
尋找 LDAP 伺服器的搜尋基礎。這通常是伺服器的完整網域名稱,每個標籤前都加上 dc=,並將句點更改為逗號。
例如,主機名稱為 server.example.com 的伺服器,預設搜尋基礎為「dc=server,dc=example,dc=com」。可以使用下列「終端機」指令向 LDAP 伺服器查詢以驗證搜尋基礎:
ldapsearch -x -LLL -b “” -s base namingContexts
找到包含「namingContexts」的行,搜尋基礎即顯示於該行的冒號後面,如以下範例輸出所示。
dn: namingContexts: dc=server,dc=example,dc=com
其次,取得目錄管理者的 kerberos 憑證
此使用者的預設名稱為 diradmin,但在建立 Open Directory 主伺服器時可能已經更改過名稱。這是使用「終端機」中的 kinit 指令來完成。如有需要,執行以下指令,將目錄管理者的正確名稱替換為 diradmin,並在系統提示時輸入密碼。無輸出。
kinit diradmin
接著,在「終端機」中以互動模式使用 ldapmodify 進行變更。只需在「Terminal=」中執行下列指令:
ldapmodify
附註:這將輸出一些 SASL 訊息並等待輸入。如果成功,SASL 輸出應如下所示:
SASL/GSSAPI authentication started SASL username: diradmin@REALM SASL SSF: 56 SASL data security layer installed.
修改設定
最後,針對設定進行修改。這需要在「終端機」視窗中輸入下列所有文字,作為 ldapmodify 指令的輸入。以下的 [search base] 必須替換為搜尋基礎。括號也必須刪除。
dn: olcDatabase={1}bdb,cn=config changetype: modify add: olcLimits olcLimits: dn.exact="uid=_ldap_replicator,cn=users,[search base]" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited dn: olcDatabase={2}bdb,cn=config changetype: modify add: olcLimits olcLimits: dn.exact="uid=_ldap_replicator,cn=users,[search base]" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited
現在,按下 Control-D。
如果一切順利,系統會顯示如下的訊息。
modifying entry "olcDatabase={1}bdb,cn=config" modifying entry "olcDatabase={2}bdb,cn=config"
更多內容
Shell 工序指令替代方法
以下是可用來自動化執行此程序的 Shell 工序指令文字。只需按照上述步驟對目錄管理者進行 kinit 指令,然後執行此工序指令。請參閱此文章,以獲得有關文字編輯器的建議。
#!/bin/sh nc=`ldapsearch -x -LLL -b "" -s base namingContexts | awk '/namingContexts/ {print $2}'` ldapmodify <
若有更多可用資訊時,此文件會進行更新。