在如何构筑Postfix(MTA)+Maildrop(MDA)+SqWebMail(web-MUA)+IMAP/POP3(MUA)+OpenLDAP
组成的邮件系统时,想了不少东西。现在并没完成。
良好的postfix 配置及优化+好的ldap结构设计能大幅提高性能。例如:
(1)适当的进行压力测试(例如postal)可以估算出系统能承受的负载量,通过结果来适当
调整smtp(output)/smtpd(input)的最大进程数来达到一个综合的最优化结果。同时注意系统的调节,Linux的注意打开文件数/用户进程上限及内存、资源分配,FreeBSD则注意对内核进行微调,如kern.maxprocperfiles等(详细看freebsd的tunning)
(2)注意对Postfix里的一些小参数仔细设置,如一些timeout值,进程上限,lock_delay,
queue的lifetime,refresh time,ipc等的timeout 和idle timeout值,这些可仔细看man
(3)如果virtual_domains不多或者更新较少的话,强烈建议使用hash来保存,而不是ldap。
因为至少每一封信,postfix都至少要查询3-5次ldap,如果对virtual_maps的查询改成
了hash后,就减少了20%-25%的查询量,意义重大!!
(4)尽量在SMTP会话过程中就reject掉垃圾信,可以减少很多无用工作。因此各种check及
限制的手段就显必不可少了。
(5)尽量向本地的ldap查询,并且严格注意查询的timeout设置,并安排多个ldap的server做
冗余(提高可靠性)并使用快速的网络连接。最好能设计成并发的query就爽了!
(6)注意使用高速的DB(例如最新的berkely db)而不是用老的缓慢的,不可增量插入记录的
db。并且配置适当的slave ldap服务器提高分布能力。
(7)对virtual_mailbox_maps及access_maps等分别指定不同的ldap服务器,可人为的进行分布
查询,将负载分担。由于基本上每个mail都要同时查询这些maps,所以负载是相当均衡的。
(8)对pipe改造。利用ldap查询时得到的用户目录(前提是本地的虚拟用户)直接传递给MDA
(maildrop)进行直接投递,免除了maildrop再次查询ldap所带来的重复问题。
【编辑推荐】