Computer/Network

[스크랩] 센드메일 8.10.0과 대용량 메일 솔루션 해결 방안

알찬돌삐 2005. 6. 22. 21:05
다음 내용은 리눅스코리아가 운영하는 포탈 사이트인 <리눅스 스타트> 특집 소프트웨어 기사용으로 작성한 것이다.

센드메일 8.10.0과 대용량 메일 솔루션 해결 방안 (1)

현재 대부분 센드메일 사용자는 8.9.X 버전을 사용하고 있다.

센드메일 8.10.0 버전은 이전 버전에 비해 무려 150 가지의 새로운 기능이 추가된 버전으로서 많은 사람들이 원해 왔던 기능이 집대성된 센드메일 역사의 이정표라고 볼 수 있다.(이런 식으로 말하니 마치 마이크로소프트 사가 광고하는 스타일 같아서 간지럽기는 하지만...)

많은 기능 중 주목할 만한 기능으로는 멀티 큐, LDAP 지원, SMTP 인증, IPv6 지원 등이 있다. 이 페이지에서는 멀티 큐에 대한 내용을 다루지만, 시간과 관심이 허락하는 한, 나머지 내용에 대해서도 소개하기로 한다.

멀티 큐(Multiple Queues)

요즘에는 리눅스나 그 위에도 동작하는 소프트웨어의 기본 지식없이도 리눅스를 사용하는 사람들이 많으며, 이런 사람들은 대체로 실용주의적이고 마음이 급한 사람이므로, 우선 실제 작업에 대하여 알아 본다.

/etc/mail/sendmail.cf 파일을 검색하여 O QueueDirectory 행을 찾는다. 그리고 다음과 같이 변경한다.


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

그리고 나서 /var/spool/mqueue 디렉토리에 가서 다음과 같이 q 로 시작하는 디렉토리를 만들어 준다. (파워 리눅스, 알짜 리눅스 등 레드햇 호환의 배포판에서 테스트함)


# cd /var/spool/mqueue
# mkdir q1 q2 q3 q4 q5 q6
# chown root.mail q*

센드메일 서버를 재시동하면 그 때부터는 자동으로!!! 위에서 만든 6 개의 디렉토리를 알아서 랜덤하게 사용한다.


# /etc/rc.d/init.d/sendmail stop
# /etc/rc.d/init.d/sendmail start

너무 쉽지 않은가? 센드메일이 제대로 동작하는지 알아보려면 ps 명령으로 확인하거나 telnet 명령을 사용하여 smtp(25) 포트를 접속해 본다. (telnet 명령은 쓰임새가 다양하다!)


$ telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 www.alzzalinux.net ESMTP Sendmail 8.10.0/8.10.0; ...
QUIT

이제 설명을 시작한다.

센드메일이 메일을 보낼 때에는 리눅스의 경우, /var/spool/mqueue/ 디렉토리에 보낼 내용을 담고 있는 파일을 두고 상대편 SMTP 서버에 전송한 후, 성공적으로 전송하면 파일을 지우도록 되어 있다.

센드메일이 그 때 그 때 몇 개 밖에 전송하지 않는 경우라면 별 문제가 되지 않는다. 대부분의 메일은 아직도 간단한 텍스트로만 되어 있으며 파일이 큐 디렉토리에 쌓이자 마자 전송되어 삭제되는 경우가 많다.

그러나 대형 포탈 업체에서 메일을 전송할 때에는 큐 디렉토리에 어마어마하게 많은 파일이 축적된다. 센드메일이 안전하게 네트웍을 통해 다른 SMTP 서버에게 보내는 속도보다 메일 프로그램이 센드메일에게 전송을 요청하는 메일의 유입량이 더 많기 때문이다. 여러 가지 요인이 있지만 그 중 하나는, 일반적으로 한 디렉토리에 2-3천 개 이상의 파일이 있으면 OS의 파일 찾기 성능이 저하되며 시스템이 어마어마한 부하 상태에 놓이게 된다.(다른 요인으로는 존재하지 않는 메일 주소 또는 상대편 SMTP 서버가 잠시 죽어 있는 경우 등이 있다.)

센드메일 8.10 버전은 그 동안 단 한 개의 전송 큐만 쓸 수 있는 방식에서 크게 진보하여 멀티 큐를 지원하여 여러 가지 면에서 부하를 분산시킬 수 있으며 결과적으로 아무리 많은 메일량이라 할 지라도 너끈히 처리할 수 있는 기본 인프라를 갖추게 되었다. 그 동안 8.9.X 버전까지는 여러 가지 형태로 꽁수를 부려야 했지만 이제는 별 다른 소동없이 깨끗하게 해결 가능하다.

조금 더 자세히 알아보겠다.

멀티 큐의 장점

멀티 큐의 장점은 다음과 같다.

  • 고성능
  • 병렬 큐 처리
  • 파일 시스템 결점 보완

우선 여러 개의 큐 디렉토리에 서로 다른 하드디스크 파티션을 마운트한다든지 하면, 단일 디스크 파티션을 사용했을 때 발생하는 병목 현상을 줄일 수 있다. SCSI 하드디스크인 경우, 각 디스크의 병렬 작업을 SCSI 장치가 보장해 주므로 성능은 극대화된다. 이 점이 바로 고성능의 논점이다.

두번째, 센드메일은 일정 시간(대부분 1 시간)마다 "큐 러너(queue runner)"라는 프로세스를 시작하여, 어떤 이유에서든 아직 보내지 못한 메일을 다시 전송하려고 시도한다. 큐가 하나였을 때에는 하나의 큐 러너가 순차적으로 보낼 수 밖에 없다. 멀티 큐 방식에서는 큐의 갯수만큼 큐 러너가 다중으로 실행되어 미해결 메일을 처리해 준다. 물론 병렬 작업을 통해 네트웍 자원이 훨씬 더 많이 찰 것이다. 그러나 대형 포탈의 경우, 메일이 늦게(심지어는 몇 시간 뒤!) 도착하는 것보다는 대역폭을 충분히 활용하면서 신속하게 보내는 것이 좋다.

세번째, 일반적인 유닉스 파일 시스템은 한 디렉토리에 많은 파일(예를 들어, 3000 개 이상)이 있으면, 디렉토리 읽기 기능이 저하된다. 되도록이면 여러 개의 큐 디렉토리를 만들어 파일 이름 읽기 속도를 개선하는 것이 좋다. 물론 데이터베이스 방식으로 저장하는 Reiserfs나 차세대 ext3 파일 시스템에는 해당되지 않는 문제이다. 그러나 아직은 대부분, 블럭 저장 방식의 ext2 파일 시스템을 사용하고 있다.


센드메일이란? (What?)

센드메일은 인터넷 메일 전송에 대한 규칙인 SMTP(Simple Mail Transfer Protocol)를 지원하는 소프트웨어이다. 센드메일은 인터넷을 통해 연결되어 있는 다른 센드메일 또는 SMTP를 지원하는 소프트웨어와 서로 통신하면서 메일 메시지를 전달한다. 센드메일은 Eric Allman 이라는 사람이 처음 만들었으며, 현재까지 유지하고 있다.

인터넷 웹 서버의 거의 60%에 가까운 점유율을 아파치 웹 서버가 차지하고 있는 것처럼, 인터넷 SMTP 메일 서버의 절대 다수는 단연 센드메일이라고 할 수 있다.

널리 사용된 만큼, 수많은 버그가 발견되어 문제를 일으키기도 하고 또한 수없이 개선되어 온 관록의 소프트웨어이다. 요즘에는 qmail 등 다른 많은 훌륭한 SMTP 소프트웨어들이 나오고 있지만 아직 대중성 면에서는 센드메일을 따라가고 있지 못한 상태이다.

실험적 패키지 다운로드

다음 패키지는 실험적인 패키지이다. 따라서 각자 개별적인 테스트를 통한 확신이 서지 않을 때에는 실전 서버에 사용하는데 대하여 발생하는 문제에 대하여 책임질 수 없다.


참고 사항

  • 센드메일 8.10 부터는 모든 설정 파일을 /etc/mail 이라는 별도의 디렉토리 밑에 두는 정책을 사용한다. 따라서 /etc/sendmail.cf 는 /etc/mail/sendmail.cf 로 자리를 옮기게 된다.


출처 : 이만용님의 홈페이지.

'Computer > Network' 카테고리의 다른 글

[스크랩] 빌어묵을 인텔..CPU인지 전기골로인지...  (0) 2006.05.30
웹 접근성을 고려한 콘텐츠 제작 기법  (0) 2005.07.03
[Linux] Apache Tunning  (0) 2005.05.24
[Linux] mrtg setting  (0) 2005.05.24
[Linux] mod_throttle  (0) 2005.05.24