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 で運用すれば回避はできる。
引き続き調査して、何か分かったら追記するつもり。