페이지

2014년 5월 19일 월요일

[sendmail]메일 발송시 속도 높이기


sendmail에서 폼메일을 통해서 다량의 소식지 등을 발송하는 경우 시간이 굉장히 오래걸리는 모습을 보여준다.
처리속도가 느리니 오래 걸리는 수밖에..



그래서 Mail의 queue의 병렬처리를 이용해 발송속도를 높혀보자.

mqueue 폴더에 자신이 원하는 만큼의 큐 폴더를 생성한다. (아래 내용은 5개까지만 만들었다)

[rubi] / > # cd /var/spool/mqueue/
[rubi] /var/spool/mqueue > # mkdir q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12



sendmail.cf 파일 내에 QueueDirectory 값을 아래와 같이 수정 해준다.

[rubi] /var/spool/mqueue > # vi /etc/mail/sendmail.cf

# queue directory

#O QueueDirectory=/var/spool/mqueue

O QueueDirectory=/var/spool/mqueue/q*



설정적용 (재시작)

[rubi] /var/spool/mqueue > # /etc/init.d/sendmail restart





병렬처리의 이점은

하나의 디렉토리 안에 몇 천 ~ 몇 만개의 파일들이 존재할 경우 ext3부터는 상당부분 개선 되었지만,

ext2에서는 어마어마한 부하가 유발 하게 되는데 이를 분산시켜서 인덱싱에서 발생하는 불필요한 로드를 방지할 수 있게 된다.

메일발송 될때도 큐에 들어간 메일들이 처리 될때 병렬처리 되어 보다 빠른 처리속도를 보여준다.

갯수에 대한 제한은 확인되지 않지만, 그렇다고 무한정 늘리는 것만이 능사는 아니다.



출처 - http://blog.rubi.kr/sendmail-%EC%A0%84%EC%86%A1%EC%86%8D%EB%8F%84%EB%A5%BC-%EB%86%92%EC%97%AC%EB%B3%B4%EC%9E%90-multi-queue/







추가사항

smtp 붙을때는 localhost로 붙는다 <- 속도차이 엄청 남
->telnet localhost 25

그러나 다음과 같이 수정하면 원격도 빠르다

vi /etc/resolv.conf에서 네임서버 없애기



sendmail.cf에서 수정사항

다음과 같이 수정
O DeliveryMode=defer
O Timeout.queuereturn=1h
O QueueLA=256
O RefuseLA=256
O MaxDaemonChildren=64

DSlocalhost -> DS
O Timeout.ident=0s

다음과 같은 데몬 생성
vi demon
/usr/sbin/sendmail -bd -ODeliveryMode=defer






vi queue1
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q1 -OMaxDaemonChildren=32 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s


/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q1 -OMaxDaemonChildren=4


vi queue2
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q2 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q2 -OMaxDaemonChildren=4

~

vi queue3
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q3 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q3 -OMaxDaemonChildren=4


vi queue4
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q4 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q4 -OMaxDaemonChildren=4

vi queue5
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q5 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q5 -OMaxDaemonChildren=4


vi queue6
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q6 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q6 -OMaxDaemonChildren=4



vi queue7
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q7 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q7 -OMaxDaemonChildren=4




vi queue8
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q8 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q8 -OMaxDaemonChildren=4


vi queue9
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q9 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q9 -OMaxDaemonChildren=4


vi queue10
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q10 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q10 -OMaxDaemonChildren=4


vi queue11
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q11 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q11 -OMaxDaemonChildren=4


~


vi queue12
/usr/sbin/sendmail -q10s -OQueueDirectory=/var/spool/mqueue/q12 -OMaxDaemonChildren=16 \
-OTimeout.initial=30s -OTimeout.connect=30s -OTimeout.iconnect=30s -OTimeout.helo=30s \
-OTimeout.mail=30s

/usr/sbin/sendmail -q30s -OQueueDirectory=/var/spool/mqueue/q12 -OMaxDaemonChildren=4





삭제 데몬
*/20 * * * * /agent/shell/pdel

vi pdel
for FILE in /var/spool/mqueue/q*/[dq]f*;
do
      echo -ne \\r"Deleting $FILE... ";
      rm $FILE -f;
      echo -n ok;
done;

echo


다음은 sendmail.mc

define(`SMART_HOST', `localhost')dnl
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

m4 /etc/mail/sendmail.mc > /etc/sendmail.cf

댓글 없음:

댓글 쓰기

image

image