OpenLDAP の同期(レプリケーション)で refreshOnly を指定するとエラーになる

OpenLDAP の同期(レプリケーション)で refreshOnly を指定するとエラーになる

環境(プロバイダ、コンシューマ同じ)

$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

$ rpm -qa | grep -i openldap
openldap-servers-2.4.44-15.el7_5.x86_64
openldap-2.4.44-15.el7_5.x86_64
openldap-clients-2.4.44-15.el7_5.x86_64


設定(プロバイダ)

overlay                   syncprov
syncprov-sessionlog       100
index entryCSN,entryUUID  eq


設定(コンシューマ)

syncrepl
 rid=11
 type=refreshOnly
 interval=00:00:05:00
 provider=ldap://192.168.1.11
 bindmethod=simple
 binddn="cn=Manager,dc=master,dc=ldap,dc=local"
 credentials=******
 searchbase="dc=master,dc=ldap,dc=local"
 filter=(objectClass=*)
 scope=sub

※設定は、プロバイダ/コンシューマどちらも、Configuration Backend を使わず従来のテキスト形式で設定している。


ログを確認するため、SLAPD_OPTIONS に "-s 16640" を追加してサービスを起動。

syslogに出力されたログを確認すると、次のようなエラーが出て、同期しない。

slapd[1661]: slapd starting
slapd[1661]: do_syncrep2: rid=011 LDAP_RES_SEARCH_RESULT
slapd[1661]: do_syncrep2: rid=011 cookie=rid=011,csn=20180701054359Z#000000#00#000000
slapd[1661]: slap_queue_csn: queueing 0x7fa68010a010 20180701054359.000000Z#000000#000#000000
slapd[1661]: slap_graduate_commit_csn: removing 0x7fa68010a010 20180701054359.000000Z#000000#000#000000
slapd[1661]: syncrepl_updateCookie: rid=011 be_modify failed (32)


以下、試したこと。

  • コンシューマから、ldapsearchコマンドでは、データを検索できる。

 →FWの設定やLDAPのアクセス権は大丈夫そう。

  • このコンシューマから、同じ設定のまま、CentOS 5.x で構築した同じ設定のプロバイダに接続すると、データは同期する。

 →コンシューマの設定に問題は無さそう?

  • プロバイダ側に問題があるのかと思い、プロバイダ側のモジュール不足の懸念を払拭するため、全てのモジュールをロード

 →変化はない。

  • コンシューマ側にて、type を refreshOnly → refreshAndPersist へ変更

 →エラー無く同期できる。

  • syncrepl_updateCookie をキーワードにして検索

 →類似例は出て来ない。(2018/7/15時点)


とりあえずの結論としては、おそらくプロバイダ/コンシューマが、いずれも openldap-2.4.x の場合だけに発生する問題と思われる。

設定が悪いのか、真っ当な対応が分からないので、同期モードを refreshAndPersist で運用できるなら、refreshAndPersist で運用すれば回避はできる。

引き続き調査して、何か分かったら追記するつもり。