Help us understand the problem. What is going on with this article?

OpenLDAPの同期が再開しない問題をkeepaliveの設定で回避する

More than 3 years have passed since last update.

問題の現象

OpenLDAPの障害試験を行っていて、ネットワークが切断されたとき、
TCPコネクションが残ってしまうことで、同期リトライが行われない現象があった。

ネットワークの落ちる頻度が高くなければ、さほど問題にはならないのですが。
拠点間でVPNを張っていて、細いおかげでよく切れるとか・・・。
そういうことも考えられなくはないので、回避策を備忘として残しておきたいと思います。

OpenLDAPの同期方法

OpenLDAPにはいくつか同期の方法がありますが、
今回想定しているのは「refreshAndPersist」という同期方法をとっている場合のお話になります。

refreshAndPersist はTCPコネクションを維持して、
プロバイダからコンシューマへ更新情報を即時通知する同期方法です。

回避策

keepalive設定の書式は以下のとおりです。
syncrepl ディレクティブの中に書く設定になっています。

keepalive <idle>:<probes>:<interval>

idle ・・・無操作だと判断するまでの時間(秒)
probes ・・・再送回数 keepaliveパケットが届かなかった時の再送
interval・・・keepaliveパケットが届かず、再送するまでの間隔(秒)

syncrepl rid=001
  provider=ldap://10.0.0.200:389
  type=refreshAndPersist
  retry="60 +"
  keepalive 30:1:3
  searchbase="dc=example,dc=com"
  bindmethod=simple
  binddn="cn=Manager,dc=example,dc=com"
  credentials=secret  

設定例では、
idle・・・・・・ 30秒間 エントリ操作がなかったら keepaliveパケットを送信する
probe・・・・・・ keepaliveパケットが到達しなかった場合、1回再送する
interval・・・ keepaliveパケットが到達しなかった場合、再送するまでの間隔を3秒あける

解説

OpenLDAPの同期設定中にkeepaliveの設定を書くと
何も操作していないとき、keepaliveパケットを送って接続が維持されているか確認できる

keepaliveパケットが到達しなかった場合、再送する
届かなくなったことがわかった時点でTCP接続を切ってくれるので、
TCPコネクションが残ったままの状況に陥らずにすむ

まとめ

OpenLDAPの同期設定で使うkeepaliveの設定は、
ネット上の情報にはほとんど設定されていなかったため、
発見するのに大変苦労した。

発見したきっかけはslapd.conf の man でした。
よく知らないプロダクトの設定を書くとき、マニュアルの確認は必須ですが、
公式マニュアルには同期設定の例にも書いていなかったために完全に見落としていました。

manコマンドにこっそり書いておくパターンがある事がわかったのは収穫でした。

ap-com
エーピーコミュニケーションズは「エンジニアから時間を奪うものをなくす」ため、ITインフラ自動化のプロフェッショナルとして、クラウドも含めたインフラ自動化技術で顧客の課題を解決すると同時に、SI業務の課題を解決するプロダクト・サービスを提供するNeoSIer(ネオエスアイヤー)です。
https://www.ap-com.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした