[postfix-jp: 4272] 大量のalias転送時のLDAP問い合わせの負荷軽減について

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

[postfix-jp: 4272] 大量のalias転送時のLDAP問い合わせの負荷軽減について

Masakazu Kobayashi
はじめまして、小林と申します。

Postfixの/etc/postfix/aliasesの転送機能で簡易なメーリングリストを構成し
ているのですが、次の様な問題が発生することがあり、対応に苦慮しております。

  ・転送先のアドレス数は(アドレスによるが)数百〜3000
  ・配送先の大半は自分の管理ドメイン宛で、一部が外部ドメイン
  ・LDAP連携しており、転送する際にLDAPに問い合わせに行く。
  ・問い合わせに行く項目はメールアドレスやホームディレクトリなど複数
    存在し、1通のメールで数回問い合わせが発生する。

転送処理が始まってしばらくすると、LDAPの負荷が高くなり、他のマシンから
ldapsearchなどで確認しても応答が遅いかタイムアウトするくらいになってしま
います。また、転送時のログに

Jun  9 15:36:48 host01 postfix/smtpd[12967]: warning:dict_ldap_lookup:
Searc herror -5: Timed out

Jun  9 15:36:48 host01 postfix/smtpd[12967]: warning:
ldap:/etc/postfix/check-xxx.cf: table lookup problem

Jun  9 15:36:48 host01 postfix/smtpd[12967]: NOQUEUE: reject: RCPT from
xxxxx.ac.jp[172.16.20.22]: 451 4.3.5 <[hidden email]>: Sender
address rejected: Server configuration error; from=<[hidden email]>
to=<[hidden email]> proto=SMTP helo=<localhost.localdomain>

の様なエラーが発生し、恐らくこの時はメールは転送されることなく、破棄され
てしまっているようです(ログを見ていると再送された様子がないため)。転送数
が多いと一斉にLDAPに問い合わせに行くことが原因だと推測しているのですが、
aliasの展開処理を時間を掛けて行ったり、送信処理自体に遅延を入れたりする
ことで送信を一斉にさせないことで、LDAPへの問い合わせを集中させないように
して回避することなどはできませんでしょうか。

・smtp_destination_recipient_limit
・smtp_destination_concurrency_limit
などのパラメータはいじってみましたが、改善はしませんでした。

また、ご教示いただければ幸いなのですが、LDAPの設定で、2台(マスター・ス
レーブ)の設定を入れているのですが、必ず1台目ばかりにアクセスし、2台目に
は問い合わせをしないようなのですが、負荷分散のためにどちらにもアクセスさ
せるようなことは不可能でしょうか。

以上よろしくお願いいたします。

_______________________________________________
Postfix-jp-list mailing list
[hidden email]
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list
Reply | Threaded
Open this post in threaded view
|

[postfix-jp: 4273] Re: 大量のalias転送時のLDAP問い合わせの負荷軽減について

SATOH Fumiyasu
さとうふみやす @ OSSTech です。

At Tue, 17 Jun 2014 15:47:49 +0900,
Masakazu Kobayashi wrote:

> Postfixの/etc/postfix/aliasesの転送機能で簡易なメーリングリストを構成し
> ているのですが、次の様な問題が発生することがあり、対応に苦慮しております。
>
>   ・転送先のアドレス数は(アドレスによるが)数百~3000
>   ・配送先の大半は自分の管理ドメイン宛で、一部が外部ドメイン
>   ・LDAP連携しており、転送する際にLDAPに問い合わせに行く。
>   ・問い合わせに行く項目はメールアドレスやホームディレクトリなど複数
>     存在し、1通のメールで数回問い合わせが発生する。
>
> 転送処理が始まってしばらくすると、LDAPの負荷が高くなり、他のマシンから
> ldapsearchなどで確認しても応答が遅いかタイムアウトするくらいになってしま
> います。また、転送時のログに

LDAP サーバーのパフォーマンス and/or チューニングの問題は
ないのでしょうか。

> Jun  9 15:36:48 host01 postfix/smtpd[12967]: warning:
> ldap:/etc/postfix/check-xxx.cf: table lookup problem

  # postmap -q 検索キー ldap:/etc/postfix/check-xxx.cf

のようにすれば同様の LDAP 検索と結果取得を実行できますが、
このときにかかる時間、LDAP サーバーの負荷やインデックスの
使用状況に問題はありませんか。

--
-- Name: SATOH Fumiyasu @ OSS Technology Corp. (fumiyas @ osstech co jp)
-- Business Home: http://www.OSSTech.co.jp/
-- GitHub Home: https://GitHub.com/fumiyas/
-- PGP Fingerprint: BBE1 A1C9 525A 292E 6729  CDEC ADC2 9DCA 5E1C CBCA

_______________________________________________
Postfix-jp-list mailing list
[hidden email]
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list
Reply | Threaded
Open this post in threaded view
|

[postfix-jp: 4274] Re: 大量のalias転送時のLDAP問い合わせの負荷軽減について

Masakazu Kobayashi
さとう様

ご返信いただきありがとうございます。

>> 転送処理が始まってしばらくすると、LDAPの負荷が高くなり、他のマシンから
>> ldapsearchなどで確認しても応答が遅いかタイムアウトするくらいになってしま
>> います。また、転送時のログに
>
> LDAP サーバーのパフォーマンス and/or チューニングの問題は
> ないのでしょうか。

可能性はあるかと思っています。保守ベンダに、ログに出力されているインデッ
クスされていないエラーが出ている値について、インデックス化するように言わ
れ試してはみたのですが、改善はされませんでした。

引き続きチューニングできるところがないか確認は進めたいと思います。現時点
でLDAPサーバがネックなのか、postfixの問い合わせが多すぎるのかちょっと切
り分けが付いていないのですが・・・。

>> Jun  9 15:36:48 host01 postfix/smtpd[12967]: warning:
>> ldap:/etc/postfix/check-xxx.cf: table lookup problem
>
>    # postmap -q 検索キー ldap:/etc/postfix/check-xxx.cf
>
> のようにすれば同様の LDAP 検索と結果取得を実行できますが、
> このときにかかる時間、LDAP サーバーの負荷やインデックスの
> 使用状況に問題はありませんか。

このような確認方法があるとは知りませんでした。教えていただいた方法も利用
してもう少し調べてみたいと思います。

他にも着目点があればご教示いただけますとうれしいです。
よろしくお願いいたします。

_______________________________________________
Postfix-jp-list mailing list
[hidden email]
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list
Reply | Threaded
Open this post in threaded view
|

[postfix-jp: 4275] Re: 大量のalias転送時のLDAP問い合わせの負荷軽減について

motoki.yuuki.ka
In reply to this post by Masakazu Kobayashi
結城といいます。

妄想が多分に入っているので、
役にたつかどうかわかりませんが、、

下記、記載いただいた情報とログから、
LDAP検索は少なくとも、

�aliasの展開時
�smtpdのsender_check(かどうかは不明ですが)といったアクセス制御系

で利用されているように見えます。

*下記のログでは、smtpdデーモンでLDAP検索エラーになっており、
alias展開時のLDAP検索エラーではないのでsmtpdでもLDAPを利用して
そうと思いました。

単純に、LDAP検索しaliasで転送している場合、
localデーモン(postfix/local)でalias展開され、
転送メッセージは、cleanup(postfix/cleanup)に直接処理が
渡され、qmgr→smtp or locaといった具合にメールが出ていくはずだと
思いますので、smtpdデーモン側を転送したメールが通ることはないと思います。

>Jun  9 15:36:48 host01 postfix/smtpd[12967]: NOQUEUE: reject: RCPT from
>xxxxx.ac.jp[172.16.20.22]: 451 4.3.5 <[hidden email]>: Sender
>address rejected: Server configuration error; from=<[hidden email]>
>to=<[hidden email]> proto=SMTP helo=<localhost.localdomain>

このログのメールが、aliasの転送後のメールだとすると、
単純な、aliasの転送ではなく、再度、このサーバにSMTPで接続し、
メールを送っており、そこでsmtpdデーモンのアクセス制御周りのLDAP検索を
行っているということになります。

そうであれば、この転送後のメールに対し、LDAP検索を伴うアクセス制御
が必要かどうかは検討する余地があるような気がします。

アクセス制御の前にpermit_mynetworks(127.0.0.1等)を設定し、
自身からのSMTPDへの通信時は、アクセス制御をしないとか。


>また、ご教示いただければ幸いなのですが、LDAPの設定で、2台(マスター・ス
>レーブ)の設定を入れているのですが、必ず1台目ばかりにアクセスし、2台目に
>は問い合わせをしないようなのですが、負荷分散のためにどちらにもアクセスさ
>せるようなことは不可能でしょうか。

これについて、もし複数のLDAP設定ファイルがあるのであれば、
それぞれの設定ファイルのLDAPの優先順位を入れ替えてあげれば、
改善できそうな気もします。

SMTPDのLDAP検索は、LDAP1→LDAP2の順でコンフィグを記載
aliasのLDAP検索は、LDAP2→LDAP1の順でコンフィグを記載

みたく。

なお、

>・smtp_destination_recipient_limit
>・smtp_destination_concurrency_limit
>などのパラメータはいじってみましたが、改善はしませんでした。

ですが、aliasは通常であれば、localデーモンの中で動くので、
local_destination_concurrency_limit
によって、並列実行数が制限されます。

ただ、デフォルトで2なはずなので、これ以上並列実行数を減らすことは、
難しい気がします。

また、もし、メーリングリストのドメインと転送先ドメインが同一ドメインで
あった場合には、aliasはその度に解釈されるので、無駄なLDAP検索が大量に
発生することになります。

例)
メーリングリストのアドレス:[hidden email]
展開先のアドレス:[hidden email][hidden email] の3000名に転送

[hidden email] にメールが届く。

�aliasでLDAP検索がなされ、[hidden email]〜3000@example.comの
3000人に転送が開始される。:LDAP検索1回

� localデーモンまで、転送メールが来た時点でaliasのLDAP検索が
行われるが、検索はヒットしない。:LDAP検索3000回
→この部分が無駄なLDAP検索

�LDAP検索でlocalのホームディレクトリ検索:LDAP検索3000回

�各パスにメールが保存される。

上記のような場合には、メーリングリストのドメインをサブドメイン宛てに
して、バーチャルドメイン等でalias展開させれば、3000回の無駄な
LDAP検索をなくせるという具合になるような気もします。

---------------------------------------
Motoki Yuuki 結城 元規
E-Mail:[hidden email]
-----------------------------------------------


>はじめまして、小林と申します。
>
>Postfixの/etc/postfix/aliasesの転送機能で簡易なメーリングリストを構成し
>ているのですが、次の様な問題が発生することがあり、対応に苦慮しております。
>
>  ・転送先のアドレス数は(アドレスによるが)数百〜3000
>  ・配送先の大半は自分の管理ドメイン宛で、一部が外部ドメイン
>  ・LDAP連携しており、転送する際にLDAPに問い合わせに行く。
>  ・問い合わせに行く項目はメールアドレスやホームディレクトリなど複数
>    存在し、1通のメールで数回問い合わせが発生する。
>
>転送処理が始まってしばらくすると、LDAPの負荷が高くなり、他のマシンから
>ldapsearchなどで確認しても応答が遅いかタイムアウトするくらいになってしま
>います。また、転送時のログに
>
>Jun  9 15:36:48 host01 postfix/smtpd[12967]: warning:dict_ldap_lookup:
>Searc herror -5: Timed out
>
>Jun  9 15:36:48 host01 postfix/smtpd[12967]: warning:
>ldap:/etc/postfix/check-xxx.cf: table lookup problem
>
>Jun  9 15:36:48 host01 postfix/smtpd[12967]: NOQUEUE: reject: RCPT from
>xxxxx.ac.jp[172.16.20.22]: 451 4.3.5 <[hidden email]>: Sender
>address rejected: Server configuration error; from=<[hidden email]>
>to=<[hidden email]> proto=SMTP helo=<localhost.localdomain>
>
>の様なエラーが発生し、恐らくこの時はメールは転送されることなく、破棄され
>てしまっているようです(ログを見ていると再送された様子がないため)。転送数
>が多いと一斉にLDAPに問い合わせに行くことが原因だと推測しているのですが、
>aliasの展開処理を時間を掛けて行ったり、送信処理自体に遅延を入れたりする
>ことで送信を一斉にさせないことで、LDAPへの問い合わせを集中させないように
>して回避することなどはできませんでしょうか。
>
>・smtp_destination_recipient_limit
>・smtp_destination_concurrency_limit
>などのパラメータはいじってみましたが、改善はしませんでした。
>
>また、ご教示いただければ幸いなのですが、LDAPの設定で、2台(マスター・ス
>レーブ)の設定を入れているのですが、必ず1台目ばかりにアクセスし、2台目に
>は問い合わせをしないようなのですが、負荷分散のためにどちらにもアクセスさ
>せるようなことは不可能でしょうか。
>
>以上よろしくお願いいたします。
>
>_______________________________________________
>Postfix-jp-list mailing list
>[hidden email]
>http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list
>

_______________________________________________
Postfix-jp-list mailing list
[hidden email]
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list
Reply | Threaded
Open this post in threaded view
|

[postfix-jp: 4276] Re: 大量のalias転送時のLDAP問い合わせの負荷軽減について

Masakazu Kobayashi
小林です。

> 結城といいます。

結城様、ご連絡ありがとうございました。ご返信が遅くなり申し訳ございません
でした。

> 単純に、LDAP検索しaliasで転送している場合、
> localデーモン(postfix/local)でalias展開され、
> 転送メッセージは、cleanup(postfix/cleanup)に直接処理が
> 渡され、qmgr→smtp or locaといった具合にメールが出ていくはずだと
> 思いますので、smtpdデーモン側を転送したメールが通ることはないと思います。
>
> このログのメールが、aliasの転送後のメールだとすると、
> 単純な、aliasの転送ではなく、再度、このサーバにSMTPで接続し、
> メールを送っており、そこでsmtpdデーモンのアクセス制御周りのLDAP検索を
> 行っているということになります。
お察しの通り、aliasで各ユーザ宛のメールに分かれた後の配送の際に、LDAPを
利用しております。各プロセスの動作についてあまり理解ができておりませんで
したが、ご指摘いただいた部分も含め確認を進めたいと思います。

> そうであれば、この転送後のメールに対し、LDAP検索を伴うアクセス制御
> が必要かどうかは検討する余地があるような気がします。
>
> アクセス制御の前にpermit_mynetworks(127.0.0.1等)を設定し、
> 自身からのSMTPDへの通信時は、アクセス制御をしないとか。

なるほど。やろうと思えば、細かい制御をすることでコントロールできることも
あるかもしれないということですね。出来そうであれば検討してみたいと思います。

> これについて、もし複数のLDAP設定ファイルがあるのであれば、
> それぞれの設定ファイルのLDAPの優先順位を入れ替えてあげれば、
> 改善できそうな気もします。
>
> SMTPDのLDAP検索は、LDAP1→LDAP2の順でコンフィグを記載
> aliasのLDAP検索は、LDAP2→LDAP1の順でコンフィグを記載

こちらは複数のLDAP問い合わせの設定で、ただ単純に交互に問い合わせるように
設定はしてみたのですが、現象は改善されませんでした。但し、SMTPDの場合、
などというプロセス?毎の考慮をしていない状態で、いくつかのLDAP設定ファイ
ルで問い合わせ先を変更してみただけですので、もう少し検討の余地があるかも
しれないです。

>> ・smtp_destination_recipient_limit
>> ・smtp_destination_concurrency_limit
>> などのパラメータはいじってみましたが、改善はしませんでした。
>
> ですが、aliasは通常であれば、localデーモンの中で動くので、
> local_destination_concurrency_limit
> によって、並列実行数が制限されます。
>
> ただ、デフォルトで2なはずなので、これ以上並列実行数を減らすことは、
> 難しい気がします。
そうなのですね。ありがとうございます。

> また、もし、メーリングリストのドメインと転送先ドメインが同一ドメインで
> あった場合には、aliasはその度に解釈されるので、無駄なLDAP検索が大量に
> 発生することになります。
>
> 例)
> メーリングリストのアドレス:[hidden email]
> 展開先のアドレス:[hidden email][hidden email] の3000名に転送
>
> �[hidden email] にメールが届く。
>
> �aliasでLDAP検索がなされ、[hidden email]〜3000@example.comの
> 3000人に転送が開始される。:LDAP検索1回
>
> � localデーモンまで、転送メールが来た時点でaliasのLDAP検索が
> 行われるが、検索はヒットしない。:LDAP検索3000回
> →この部分が無駄なLDAP検索
>
> �LDAP検索でlocalのホームディレクトリ検索:LDAP検索3000回
>
> �各パスにメールが保存される。
>
> 上記のような場合には、メーリングリストのドメインをサブドメイン宛てに
> して、バーチャルドメイン等でalias展開させれば、3000回の無駄な
> LDAP検索をなくせるという具合になるような気もします。
動作について詳細にご教示いただきありがとうございます。根本は無駄な問い合
わせが多すぎるのではと考えています。なるべく問い合わせを減らすように検討
したいと思います。

暫定対応になるかもしれませんが、現在考えているのが、LDAPサーバの設定ファ
イルにtimeout値を設定する方法です。標準で「timeout = 10」の様なのです
が、これを大きめ(120や180など)に設定すると、Postfixのタイムアウトは発生
しなくなるようなので、メール送信自体には影響が出なくなるようだ、というの
を仮想テスト環境で確認しました。

ただ、timeout値を大きく取ることによる悪影響やLDAPサーバは結局(一時的に)
応答性が悪くなっている現象は改善しないだろう、と思っているので、単純に
timeout値を変更するのがよいのかについては悩んでおります。この辺について
詳しい方がいらっしゃいましたらご教示いただけないでしょうか。

以上よろしくお願いいたします。


> ---------------------------------------
> Motoki Yuuki 結城 元規
> E-Mail:[hidden email]
> -----------------------------------------------
>
>
>> はじめまして、小林と申します。
>>
>> Postfixの/etc/postfix/aliasesの転送機能で簡易なメーリングリストを構成し
>> ているのですが、次の様な問題が発生することがあり、対応に苦慮しております。
>>
>>   ・転送先のアドレス数は(アドレスによるが)数百〜3000
>>   ・配送先の大半は自分の管理ドメイン宛で、一部が外部ドメイン
>>   ・LDAP連携しており、転送する際にLDAPに問い合わせに行く。
>>   ・問い合わせに行く項目はメールアドレスやホームディレクトリなど複数
>>     存在し、1通のメールで数回問い合わせが発生する。
>>
>> 転送処理が始まってしばらくすると、LDAPの負荷が高くなり、他のマシンから
>> ldapsearchなどで確認しても応答が遅いかタイムアウトするくらいになってしま
>> います。また、転送時のログに
>>
>> Jun  9 15:36:48 host01 postfix/smtpd[12967]: warning:dict_ldap_lookup:
>> Searc herror -5: Timed out
>>
>> Jun  9 15:36:48 host01 postfix/smtpd[12967]: warning:
>> ldap:/etc/postfix/check-xxx.cf: table lookup problem
>>
>> Jun  9 15:36:48 host01 postfix/smtpd[12967]: NOQUEUE: reject: RCPT from
>> xxxxx.ac.jp[172.16.20.22]: 451 4.3.5 <[hidden email]>: Sender
>> address rejected: Server configuration error; from=<[hidden email]>
>> to=<[hidden email]> proto=SMTP helo=<localhost.localdomain>
>>
>> の様なエラーが発生し、恐らくこの時はメールは転送されることなく、破棄され
>> てしまっているようです(ログを見ていると再送された様子がないため)。転送数
>> が多いと一斉にLDAPに問い合わせに行くことが原因だと推測しているのですが、
>> aliasの展開処理を時間を掛けて行ったり、送信処理自体に遅延を入れたりする
>> ことで送信を一斉にさせないことで、LDAPへの問い合わせを集中させないように
>> して回避することなどはできませんでしょうか。
>>
>> ・smtp_destination_recipient_limit
>> ・smtp_destination_concurrency_limit
>> などのパラメータはいじってみましたが、改善はしませんでした。
>>
>> また、ご教示いただければ幸いなのですが、LDAPの設定で、2台(マスター・ス
>> レーブ)の設定を入れているのですが、必ず1台目ばかりにアクセスし、2台目に
>> は問い合わせをしないようなのですが、負荷分散のためにどちらにもアクセスさ
>> せるようなことは不可能でしょうか。
>>
>> 以上よろしくお願いいたします。
>>
>> _______________________________________________
>> Postfix-jp-list mailing list
>> [hidden email]
>> http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list
>>
>
>
>
> _______________________________________________
> Postfix-jp-list mailing list
> [hidden email]
> http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list
>

_______________________________________________
Postfix-jp-list mailing list
[hidden email]
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list
Reply | Threaded
Open this post in threaded view
|

[postfix-jp: 4277] Re: 大量のalias転送時のLDAP問い合わせの負荷軽減について

Kazuhiro NISHIYAMA
In reply to this post by Masakazu Kobayashi
西山和広です。

At Tue, 17 Jun 2014 15:47:49 +0900,
Masakazu Kobayashi wrote:
>
> Jun  9 15:36:48 host01 postfix/smtpd[12967]: warning:
> ldap:/etc/postfix/check-xxx.cf: table lookup problem

これは alias_maps に ldap:/etc/postfix/check-xxx.cf と
設定していると思うのですが、
proxy:ldap:/etc/postfix/check-xxx.cf
のように proxy を挟んでみるのはどうでしょうか?

chroot との関係で proxy をつけたのか、
ldap の bind の負荷を軽減するためにつけたのか、
proxy をつけている理由を思い出せないのですが、
何か効果があるかもしれません。


--
|ZnZ(ゼット エヌ ゼット)
|西山和広(Kazuhiro NISHIYAMA)

_______________________________________________
Postfix-jp-list mailing list
[hidden email]
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list