My Advanced Linux/Advanced Linux 2009. 10. 27. 10:32
multi-queue?
리눅스의 sendmail을 이용하여 메일을 발송하면 /var/spool/mqueue/ 디렉토리에 내용을 저장한 뒤에 SMTP로 이용하여 메일을 보내고 완료되면 삭제되는 방식이다.
소규모 메일 서버라면 상관이 없겠지만 바로바로 발송이 완료되어 삭제가 되어서 큰 문제는 생기지 않지만, 회사의 홍보물 등의 대량으로 뿌리는 메일일 경우에는 문제가 발생할 수도 있다.
적게는 몇 천, 많게는 몇 만건이상의 메일이 /var/spool/mqueue/ 디렉토리에 쌓이게 되고 이는 성능저하와 시스템 불안정을 초래하기도 한다. 특히나 상대방이 스팸(?) 메일을 받기 싫다고 이상한 메일 주소를 적으면 기하급수적으로 쌓이게 된다.
mailq 명령어를 치면 끝도 없이 올라가는 미발송 쿼리를 볼 수 있다.
이러한 단점을 해소 하기 위한 것이 바로 multi queue 인것이다. 쉽게 말해서는 /var/spool/mqueue/q1 ,q2, q3 ... 디렉토리를 생성하여 한 디렉토리에 부하가 걸리는 것을 방지하여 병목현상을 줄인다고 생각하면 된다.
그렇다면 장점은 무엇인가?
첫번째, 디렉토리 분산으로 하나의 디스크 파티션을 사용하였을때 생길 수 있는 병목현상을 줄인다.
두번째, queue runner(메일 발송이 안된 메일을 다시 보내기 위한 데몬)이 다중으로 처리하여 효율성을 높힐 수 있다.
세번째, 한 디렉토리에 많은 파일이 있을 때 생기는 속도 저하를 피할 수 있다.
두번째, queue runner(메일 발송이 안된 메일을 다시 보내기 위한 데몬)이 다중으로 처리하여 효율성을 높힐 수 있다.
세번째, 한 디렉토리에 많은 파일이 있을 때 생기는 속도 저하를 피할 수 있다.
sendmail 8.10버전 이 후버전 부터는 multi queue를 지원하므로 대용량 메일 발송 서버라면 필히 설정을 하도록 하자.
가장 먼저 sendmail 버전부터 확인하고 시작하자.
# echo \$Z | /usr/sbin/sendmail -bt -d0
병렬처리 할 디렉토리 생성
# mkdir /var/spool/mqueue/q{1,2,3,4,5,6,7,8,9}
sendmail QueueDirectory 설정
# vi /etc/mail/sendmail.cf
# queue directory
O QueueDirectory=/var/spool/mqueue/q*
sendmail 재시작
# service sendmail restart
정상적으로 mail queue가 설정이 되어있는지 확인
# [uzoogom]root:~ > mailq
/var/spool/mqueue/q1 is empty
/var/spool/mqueue/q2 is empty
/var/spool/mqueue/q3 is empty
/var/spool/mqueue/q4 is empty
/var/spool/mqueue/q5 is empty
/var/spool/mqueue/q6 is empty
/var/spool/mqueue/q7 is empty
/var/spool/mqueue/q8 is empty
/var/spool/mqueue/q9 is empty
이걸로 완료.
다 기능에 비해서 설정이 무지 쉬우니 왠만하면 꼭 해주자!