Sun Java System Messaging Server 6 2005Q4 관리 설명서

동일한 메일의 중복 저장에 따른 저장소 크기 줄이기

하나의 메일이 여러 수신자에 전송될 때 해당 메일은 각 수신자의 메일함마다 놓이게 됩니다. 일부 메시징 시스템에서는 각 수신자의 메일함에 같은 메일의 사본을 별도로 저장합니다. 그러나 이와 반대로, Sun Java System Messaging Server에서는 해당 메일이 있는 메일함의 수에 관계 없이 메일 사본을 하나만 유지합니다. 이는 해당 메일을 포함하는 메일함에 메일에 대한 하드 링크를 작성하는 방법으로 이루어집니다.

다른 메시징 시스템을 Sun Java Messaging Server로 마이그레이션할 때는 마이그레이션 과정을 통해 이러한 여러 메일 사본이 복사될 수 있습니다. 이는 규모가 큰 메일 저장소의 경우 불필요하게 많은 메일이 중복되는 것을 의미합니다. 또한 일반적인 서버 작업(예: IMAP append 작업이나 기타 소스의 작업)에 같은 메일 사본이 여러 개 누적될 수 있습니다.

Messaging Server는 relinker라는 이름의 새 명령을 제공하는데, 이 명령은 과도한 메일 사본을 제거하고 하나의 사본에 대한 하드 링크로 대체합니다.

relinker작동 원리

재연결 기능은 이 명령이나 실시간 모드에서 실행할 수 있습니다. relinker 명령을 실행할 때는 이 명령이 메일 저장소 분할 영역 전체를 스캔하고 MD5 메일 다이제스트 저장소(하드 링크에 해당)를 작성 또는 업데이트하며 필요한 하드 링크를 만듭니다.

다이제스트 저장소는 메일 저장소의 메일에 대한 하드 링크로 이루어져 있습니다. 이는 디렉토리 계층 partition_path/=md5에 저장됩니다. 이 디렉토리는 사용자 메일함 계층 partition_path /=user(그림 18–1 참조)와 병행합니다. 다이제스트 저장소의 메일은 MD5 다이제스트에서 고유하게 식별합니다. 예를 들어, fredb/00/1.msg의 다이제스트가 4F92E5673E091B43415FFFA05D2E47인 경우 partition/=user/hashdir/hashdir /=fredb/00/1.msg는 partition/=md5/hashdir/hashdir/4F92E5673E091B43415FFFA05D2E47EA.msg에 링크됩니다. 다른 메일함에 이와 같은 메일이 있을 때(예: partition_path/=user/hashdir/hashdir/gregk/00/17.msg) 해당 메일은 partition_path/=md5/4F/92/4F92E5673E091B43415FFFA05D2E47EA.msg에 대해 하드 링크로 연결됩니다. 이 프로세스는 그림 18–5에 표시되어 있습니다.

그림 18–5 메일 저장소 다이제스트 저장소

이 그림은 메일 저장소를 보여 줍니다.

이 메일의 경우 링크 수는 3이 됩니다. 두 메일 모두 fredb 및 gregk의 메일함에서 삭제되면 링크 수는 하나가 되고 해당 메일을 삭제할 수 있습니다.

relinker 프로세스는 같은 기능에 대해 실시간으로 실행될 수 있습니다. 자세한 내용은 실시간 모드에서 relinker 사용을 참조하십시오.

명령줄 모드에서 relinker 사용

relinker는 메일 저장소 분할 영역 전체를 스캔하고 MD5 메일 저장소(하드 링크에 해당)를 작성 또는 업데이트하며 과도한 메일 파일을 삭제합니다. relinker가 저장소 분할 영역을 스캔한 후에는 재연결 이전과 이후 해당 분할 영역의 크기와 고유한 메일의 수에 대한 통계를 산출합니다. 이미 해시된 저장소에 대한 실행 속도를 높이기 위해 relinker는 아직 =md5에 없는 메일의 다이제스트만 계산합니다. 또한 전체 다이제스트 저장소(사용자 메일함에 영향을 주지 않는 범위에서)를 지우는 옵션도 있습니다.

이 명령의 구문은 다음과 같습니다.

relinker [-p partitionname] [-d]

여기서 partitionname은 처리될 분할 영역(기본값: 모든 분할 영역)을 지정하고 -d는 다이제스트 저장소가 삭제됨을 지정합니다. 출력 예는 다음과 같습니다.


# relinker

Processing partition: primary
Scanning digest repository...
Processing user directories..............................
---------------------------------------------------------
Partition statistics           Before            After 
---------------------------------------------------------
Total messages                 4531898         4531898
Unique messages                4327531         3847029
Message digests in repository        0         3847029
Space used                       99210Mb         90481Mb
Space savings from single-copy    3911Mb         12640Mb
---------------------------------------------------------


# relinker -d 
Processing partition: primary
Purging digest repository...
---------------------------------------------------------
Partition statistics                 Before         After
---------------------------------------------------------
Message digests in repository       3847029             0
---------------------------------------------------------

특히 저장소에 메일이 하나도 없는 처음에는 relinker 실행에 시간이 많이 걸릴 수 있습니다. 이는 모든 메일마다 다이제스트를 계산(relinker 기준이 모든 메일을 포함하도록 구성된 경우)해야 하기 때문입니다. relinker 기준 구성에 대한 자세한 내용은 relinker 구성을 참조하십시오.예를 들어, 100GB의 메일 저장소를 처리하는 데는 6시간 정도가 걸립니다. 그러나 런타임 재연결을 활성화한 경우( 실시간 모드에서 relinker 사용 참조)에는 relinker 명령을 실행할 필요가 없습니다.

relinker 명령줄 모드가 예외적으로 사용되고 런타임 옵션이 아닌 경우에는 다이제스트 저장소( =md5)를 삭제할 필요가 있습니다. 그 외의 경우에는 저장소에서 삭제된 메일(=user)에 해당 다이제스트 저장소의 연결이 그대로 있으므로(고아 메일이 됨) 사용 가능한 디스크 공간이 되지 않습니다. relinker를 한 번만 실행할 수 있는 저장소의 일회 최적화를 수행하는 경우(예: 마이그레이션 후)에는 relinker -d를 사용하여 전체 저장소를 삭제하십시오. 반복된 삭제의 경우(마이그레이션 도중)에는 relinker 명령을 반복적으로 수행하는 것만으로도 충분합니다. 이 명령을 실행할 때마다 만료된 메일이나 고아 메일을 저장소에서 삭제하기 때문입니다.

처리되는 다른 분할 영역마다 병행하여 relinker의 여러 인스턴스를 실행(-p 옵션 사용)하는 것이 안전합니다. 메일은 같은 파티션 안에서만 재연결됩니다.

실시간 모드에서 relinker 사용

relinker 기능은 configutil 매개 변수 local.store.relinker.enabledyes로 설정함으로써 실시간 모드에서 활성화될 수 있습니다. 실시간 모드에서 relinker를 사용하면 구성된 relinker 기준( relinker 구성)에 맞게 배달된(또는 복원되거나 IMAP 추가된) 모든 메일의 다이제스트를 계산한 다음 해당 다이제스트가 이미 존재하는지 여부를 저장소에서 확인하게 됩니다. 이 다이제스트가 존재하는 경우에는 해당 메일의 새 사본을 만들지 않고 그에 대한 링크를 대상 메일함에 만듭니다. 다이제스트가 없을 때는 메일을 만들고 나중에 그에 대한 링크를 저장소에 추가합니다.

stored는 각 분할 영역의 다이제스트 저장소를 스캔하고 링크 수가 한 개인 메일(즉, relinker 기준에 맞지 않는 메일)을 삭제합니다. 스캔은 구성 가능한 시간 동안 한 번에 한 디렉토리씩 수행됩니다. 이로써 I/O 로드가 공평하게 분산되고 다른 서버 작업에 별다른 영향을 주지 않게 됩니다. 기본적으로 삭제 주기는 24시간이며 이는 저장소에서 메일이 삭제되거나 구성된 최대 캐시 사용 기간을 초과해도 최대 24시간까지는 그대로 남아 있다는 의미입니다. 이 작업은 relinker 실시간 모드가 활성화되어 있는 경우 사용 가능합니다.

relinker 구성

표 18–13은 relinker 기준을 설정하는 데 사용된 매개 변수를 보여 줍니다.

표 18–13 relinker configutil 매개 변수

매개 변수 

설명 

local.store.relinker.enabled

추가 코드 및 stored 삭제에서 메일의 실시간 재연결을 활성화합니다. 이 옵션이 설정 해제되어 있는 경우에도 relinker 명령줄 도구를 실행할 수는 있지만, stored가 저장소를 삭제하지 않기 때문에 이 작업에는 relinker -d를 사용해야 합니다. 이 옵션을 설정하면 디스크 공간이 절감되는 대신 메일 배달 성능이 떨어집니다.

기본값: no

local.store.relinker.maxage

저장소에 메일이 저장될 최대 캐시 사용 기간(시간)으로, relinker 명령줄에서 고려합니다. -1은 제한이 없다는 뜻으로 저장소에서 고아 메일만 삭제합니다. relinker의 경우 이는 캐시 사용 기간에 관계 없이 기존 메일을 처리한다는 의미가 됩니다. 값을 적게 할수록 저장소가 작아지므로 relinker 또는 stored 삭제가 더 빨리 실행되고 디스크 공간을 더 빨리 재생 이용할 수 있습니다. 반면, 값을 크게 할수록 긴 시간(예를 들어, 사용자가 같은 메일을 며칠 간격으로 저장하거나 며칠 또는 몇 주에 걸쳐 마이그레이션을 실행할 때)에 걸쳐 메일 재연결이 중복됩니다.

기본값: 24 

local.store.relinker.minsize

런타임 또는 명령줄 relinker에서 고려하는 메일의 최소 크기(KB). 0이 아닌 값을 설정하면 저장소는 작아지는 대신 규모가 작은 메일에 대한 relinker 혜택은 늘어납니다.

기본값: 0 

local.store.relinker.purgecycle

전체 stored 삭제 주기의 대략적인 지속 시간. 실제 지속 시간은 저장소의 각 디렉토리를 스캔하는 데 걸리는 시간에 따라 달라집니다. 값이 적을수록 더 많은 I/O를 사용하게 되고 값이 클수록 디스크 공간의 재생 이용이 느려집니다. 0은 디렉토리 사이에 일시 중지 없이 계속적으로 삭제가 실행된다는 의미입니다. -1은 stored에서 삭제가 실행되지 않는다는 뜻입니다. 따라서 삭제는 relinker -d 명령을 사용하여 수행해야 합니다.

기본값: 24