6장. 메시지 데이터 유지
AMQ Broker에는 메시지 데이터를 유지(즉, 저장)하기위한 두 가지 옵션이 있습니다.
- 저널에 메시지 저장
- 이는 기본 옵션입니다. 저널 기반 지속성은 파일 시스템의 저널에 메시지를 쓰는 고성능 옵션입니다.
- 데이터베이스에 메시지 저장
- 이 옵션은 JDBC( Java Database Connectivity ) 연결을 사용하여 선택한 데이터베이스에 메시지를 저장합니다.
또는 메시지 데이터를 유지하지 않도록 브로커를 구성할 수도 있습니다. 자세한 내용은 6.3절. “지속성 비활성화”의 내용을 참조하십시오.
브로커는 메시지 저널 외부에 큰 메시지를 저장하기 위해 다른 솔루션을 사용합니다. 자세한 내용은 8장. 대용량 메시지 처리를 참조하십시오.
메모리 부족 상황에서 브로커를 디스크에 메시지를 페이징하도록 구성할 수도 있습니다. 자세한 내용은 7.1절. “메시지 페이징 구성”를 참조하십시오.
AMQ Broker에서 지원하는 데이터베이스 및 네트워크 파일 시스템에 대한 최신 정보는 Red Hat 고객 포털에서 Red Hat AMQ 7 지원 구성 을 참조하십시오.
6.1. 저널에 메시지 데이터 유지
브로커 저널은 디스크의 추가 전용 파일 집합입니다. 각 파일은 고정된 크기로 미리 생성되며 처음에 패딩으로 채워집니다. 브로커에서 메시징 작업이 수행되면 기록이 저널 끝에 추가됩니다. 레코드를 추가하면 브로커가 디스크 헤드 이동 및 임의의 액세스 작업을 최소화할 수 있으며 일반적으로 디스크에서 가장 느린 작업입니다. 하나의 저널 파일이 가득 차면 브로커는 새 파일을 생성합니다.
저널 파일 크기는 구성 가능하며 각 파일에서 사용하는 디스크의 수를 최소화합니다. 그러나 최신 디스크 토폴로지는 복잡하며 브로커는 파일이 매핑되는 것을 제어할 수 없습니다. 따라서 저널 파일 크기 조정은 정확하게 제어하기 어렵습니다.
브로커에서 사용하는 기타 지속성 관련 기능은 다음과 같습니다.
- 특정 저널 파일이 아직 사용 중인지 여부를 결정하는 가비지 컬렉션 알고리즘입니다. 저널 파일이 더 이상 사용되지 않는 경우 브로커는 재사용할 수 있도록 파일을 회수할 수 있습니다.
- 저널에서 종료된 공간을 제거하고 데이터를 압축하는 압축 알고리즘입니다. 그러면 저널에서 디스크에서 파일을 더 적게 사용합니다.
- 로컬 트랜잭션을 지원합니다.
- JMS 클라이언트를 사용할 때 XA(확장 아키텍처) 트랜잭션 지원.
대부분의 저널은 Java로 작성됩니다. 그러나 다양한 플러그형 구현을 사용할 수 있도록 실제 파일 시스템과의 상호 작용이 요약됩니다. AMQ Broker에는 다음 구현이 포함됩니다.
- NIO
- NIO(New I/O)는 표준 Java NIO를 사용하여 파일 시스템과 연결합니다. 이는 매우 우수한 성능을 제공하며 Java 6 이상 런타임을 사용하는 모든 플랫폼에서 실행됩니다. Java NIO에 대한 자세한 내용은 Java NIO 를 참조하십시오.
- AIO
AIO(Aynshcronous I/O)는 씬 네이티브 래퍼를 사용하여 Linux 비동기 I/O 라이브러리(
libaio
)와 통신합니다. AIO를 사용하면 데이터를 디스크로 만든 후 브로커가 다시 호출되어 명시적 동기화를 완전히 방지합니다. 기본적으로 브로커는 AIO 저널을 사용하려고 하며 AIO를 사용할 수 없는 경우 NIO를 사용합니다.AIO는 일반적으로 Java NIO보다 더 나은 성능을 제공합니다.
libaio
를 설치하는 방법에 대한 자세한 내용은 6.1.1절. “Linux 비동기 I/O 라이브러리 설치” 을 참조하십시오.
다음 하위 섹션의 절차에서는 저널 기반 지속성을 위해 브로커를 구성하는 방법을 보여줍니다.
6.1.1. Linux 비동기 I/O 라이브러리 설치
Red Hat은 지속성 성능을 위해 AIO 저널(NIO 대신)을 사용하는 것이 좋습니다.
AIO 저널을 다른 운영 체제 또는 이전 버전의 Linux 커널과 함께 사용할 수 없습니다.
AIO 저널을 사용하려면 Linux 비동기 I/O 라이브러리(libaio
)를 설치해야 합니다. libaio
를 설치하려면 다음과 같이 yum
명령을 사용합니다.
yum install libaio
6.1.2. 저널 기반 지속성 구성
다음 절차에서는 브로커가 저널 기반 지속성에 사용하는 기본 구성을 검토하는 방법을 설명합니다. 이 설명을 사용하여 필요에 따라 구성을 조정할 수 있습니다.
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다.기본적으로 브로커는 다음과 같이 저널 기반 지속성을 사용하도록 구성됩니다.
<configuration> <core> ... <persistence-enabled>true</persistence-enabled> <journal-type>ASYNCIO</journal-type> <bindings-directory>./data/bindings</bindings-directory> <journal-directory>./data/journal</journal-directory> <journal-datasync>true</journal-datasync> <journal-min-files>2</journal-min-files> <journal-pool-files>-1</journal-pool-files> <journal-device-block-size>4096</journal-device-block-size> <journal-file-size>10M</journal-file-size> <journal-buffer-timeout>12000</journal-buffer-timeout> <journal-max-io>4096</journal-max-io> ... </core> </configuration>
persistence-enabled
-
이 매개변수의 값이
true
로 설정된 경우 브로커는 메시지 지속성을 위해 파일 기반 저널을 사용합니다. journal-type
-
사용할 저널 유형입니다.
ASYNCIO
로 설정하면 브로커가 먼저 AIO를 사용하려고 시도합니다. AIO를 찾을 수 없는 경우 브로커는 NIO를 사용합니다. bindings-directory
-
바인딩 저널의 파일 시스템 위치입니다. 기본값은 <
broker_instance_dir> 디렉터리에 상대적 값
입니다. journal-directory
-
메시지 저널의 파일 시스템 위치입니다. 기본값은 <
broker_instance_dir> 디렉터리에 상대적 값
입니다. journal-datasync
-
이 매개변수의 값이
true
로 설정된 경우 브로커는fdatasync
함수를 사용하여 디스크 쓰기를 확인합니다. journal-min-files
- 브로커가 시작될 때 처음에 생성할 저널 파일 수입니다.
journal-pool-files
-
사용되지 않는 파일을 회수한 후 보관할 파일 수입니다. 기본값
-1
은 정리 중에 파일이 삭제되지 않음을 의미합니다. journal-device-block-size
- 스토리지 장치의 저널에서 사용하는 데이터 블록의 최대 크기(바이트)입니다. 기본값은 4096바이트입니다.
journal-file-size
- 지정된 저널 디렉터리에 있는 각 저널 파일의 최대 크기(바이트)입니다. 이 제한에 도달하면 브로커가 새 파일을 시작합니다. 이 매개변수는 바이트 표기법(예: K, M, G) 또는 바이너리 동등한 바이너리(Ki, Mi, Gi)도 지원합니다. 이 매개변수가 구성에 명시적으로 지정되지 않은 경우 기본값은 10485760바이트(10MiB)입니다.
journal-buffer-timeout
- 나노초 단위에서 브로커가 저널 버퍼를 플러시하는 빈도를 지정합니다. AIO는 일반적으로 NIO보다 높은 플러시 속도를 사용하므로 브로커는 NIO 및 AIO 모두에 대해 다른 기본값을 유지합니다. 이 매개변수가 구성에 명시적으로 지정되지 않은 경우 NIO의 기본값은 3333333 나노초입니다(즉, 초당 300회). AIO의 기본값은 50000 나노초(즉, 초당 2000회)입니다.
journal-max-io
한 번에 IO 큐에 있을 수 있는 최대 쓰기 요청 수입니다. 큐가 가득 차면 브로커는 공간을 사용할 수 있을 때까지 추가 쓰기를 차단합니다.
NIO를 사용하는 경우 이 값은 항상
1
이어야 합니다. 구성에 명시적으로 지정되지 않은 AIO 및this 매개변수를 사용하는 경우 기본값은500
입니다.
- 이전 설명을 기반으로 스토리지 장치에 필요한 대로 지속성 구성을 조정합니다.
추가 리소스
- 저널 기반 지속성 구성에 사용할 수 있는 모든 매개변수에 대한 자세한 내용은 부록 E. 메시징 저널 구성 Cryostat 을 참조하십시오.
6.1.3. 바인딩 저널 정보
바인딩 저널은 브로커 및 해당 속성에 배포된 대기열 세트와 같은 바인딩 관련 데이터를 저장하는 데 사용됩니다. ID 시퀀스 카운터와 같은 데이터도 저장합니다.
바인딩 저널은 일반적으로 메시지 저널에 비해 처리량이 낮기 때문에 항상 NIO를 사용합니다. 이 저널의 파일은 activemq-bindings
접두사가 붙습니다. 각 파일에는 .bindings
의 확장자와 기본 크기가 1048576바이트가 있습니다.
바인딩 저널을 구성하려면 < broker_instance_dir> /etc/broker.xml
구성 파일의 core
요소에 다음 매개변수를 포함합니다.
bindings-directory
-
바인딩 저널의 디렉터리입니다. 기본값은 <
broker_instance_dir>/data/bindings
입니다. create-bindings-dir
-
이 매개변수의 값을
true
로 설정하면 브로커가 바인딩 디렉터리에 지정된 위치에바인딩
디렉터리를 자동으로 생성합니다(아직 없는 경우). 기본값은true
입니다.
6.1.4. JMS 저널 정보
JMS 저널은 JMS 대기열, 주제, 연결 팩토리를 비롯한 모든 JMS 관련 데이터와 이러한 리소스에 대한 JNDI 바인딩을 저장합니다. 관리 API를 통해 생성된 모든 JMS 리소스는 이 저널에 유지되지만 구성 파일을 통해 구성된 리소스는 유지되지 않습니다. 브로커는 JMS가 사용되는 경우에만 JMS 저널을 생성합니다.
JMS 저널의 파일 앞에 activemq-jms
가 붙습니다. 각 파일에는 .jms
의 확장자와 기본 크기 1048576바이트도 있습니다.
JMS 저널은 바인딩 저널과 구성을 공유합니다.
추가 리소스
- 바인딩 저널에 대한 자세한 내용은 6.1.3절. “바인딩 저널 정보” 을 참조하십시오.
6.1.5. 저널 보존 구성
생성된 각 저널 파일의 사본을 유지하도록 AMQ Broker를 구성할 수 있습니다. 저널 보존을 구성한 후 저널 파일 복사본에서 메시지를 재생하여 브로커로 메시지를 보낼 수 있습니다.
6.1.5.1. 저널 보존 구성
특정 기간 동안 또는 스토리지 제한에 도달하거나 둘 다에 도달할 때까지 저널 파일의 사본을 유지하도록 AMQ Broker를 구성할 수 있습니다.
프로세스
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. -
core
요소 내에서journal-retention-directory
특성을 추가합니다. 저널 파일의 보존을 제어하려면마침표
또는스토리지 제한을
지정합니다. 또한 저널 파일 사본의 파일 시스템 위치를 지정합니다. 다음 예제에서는 AMQ Broker를 구성하여 저널 파일 복사본을7
일 동안 또는 파일에10GB
의 스토리지를 사용할 때까지데이터/
유지 관리 디렉토리에 보관합니다.
<configuration> <core> ... <journal-retention-directory period="7" unit="DAYS" storage-limit="10G">data/retention</journal-retention-directory> ... </core> </configuration>
기간
- 저널 파일 사본을 보관하기 위한 기간입니다. 시간 기간이 만료되면 AMQ Broker는 지정된 기간보다 오래된 파일을 제거합니다.
단위
-
보존 기간에 적용할 측정값 단위입니다. 기본값은
DAYS
입니다. 다른 유효한 값은HOURS
,MINUTES
및SECONDS
입니다. 디렉터리
- 저널 파일 복사의 파일 시스템 위치입니다. 지정된 디렉터리는 < broker_instance_dir> 디렉터리를 기준으로 합니다.
storage-limit
- 모든 저널 파일 사본에서 사용할 수 있는 최대 스토리지입니다. 스토리지 제한에 도달하면 브로커는 가장 오래된 저널 파일을 제거하여 새 저널 파일 사본의 공간을 제공합니다. 스토리지 제한을 설정하는 것은 저널 파일 보존으로 인해 브로커가 디스크 공간이 부족하고 종료되지 않도록 하는 효과적인 방법입니다.
6.1.5.2. 브로커에 존재하는 주소에 대한 저널 파일 사본의 메시지 재생
저널 파일 사본에서 재생하려는 메시지의 주소가 AMQ Broker에 존재하는 경우 다음 절차를 사용하여 메시지를 재생합니다. 브로커의 원래 주소 또는 다른 주소로 메시지를 재생할 수 있습니다.
프로세스
- AMQ 관리 콘솔에 로그인합니다. 자세한 내용은 AMQ 관리 콘솔 액세스를 참조하십시오.
- 메인 메뉴에서 Artemis 를 클릭합니다.
- 폴더 트리에서 주소를 클릭하여 주소 목록을 표시합니다.
- 주소 탭을 클릭합니다.
- 메시지를 재생하려는 주소의 Action 열에서 작업을 클릭합니다.
재생 작업을 선택합니다.
- 재생 작업에서 모든 저널 파일 복사본에서 재생할 메시지를 검색하려면 재생(문자열, 문자열) 작업을 클릭합니다.
- 재생 작업에서 특정 기간 내에 생성된 저널 파일 복사본에서만 재생할 메시지를 검색하려면 재생(문자열, 문자열, 문자열, 문자열) 작업을 선택합니다. startScanDate 및 endScanDate 필드에서 기간을 지정합니다.
재생 옵션을 지정합니다.
- 대상 필드에서 재생된 메시지를 보낼 브로커의 주소를 지정합니다. 이 필드를 비워 두면 브로커의 원래 주소로 메시지를 재생합니다.
-
(선택 사항) 필터 필드에서 필터 문자열과 일치하는 메시지만 재생할 문자열을 지정합니다. 예를 들어 메시지에 storeID 속성이 있는 경우
storeID="1000"
필터를 사용하여 저장소 ID 값이 1000인 모든 메시지를 재생할 수 있습니다. 필터를 지정하지 않으면 스캔한 저널 파일 복사본의 모든 메시지가 AMQ Broker로 재생됩니다.
- 실행을 클릭합니다.
추가 리소스
- AMQ Management Console 사용에 대한 자세한 내용은 AMQ 관리 콘솔 사용을 참조하십시오.
6.1.5.3. 브로커에서 제거된 주소의 저널 파일 사본에서 메시지 재생
저널 파일 사본에서 재생하려는 메시지의 주소가 AMQ Broker에서 제거된 경우 다음 절차를 사용하여 브로커의 다른 주소로 메시지를 재생합니다.
프로세스
- AMQ 관리 콘솔에 로그인합니다. 자세한 내용은 AMQ 관리 콘솔 액세스를 참조하십시오.
- 메인 메뉴에서 Artemis 를 클릭합니다.
- 폴더 트리에서 최상위 서버를 클릭합니다.
- Operations 탭을 클릭합니다.
재생 작업을 선택합니다.
- 재생 작업에서 모든 저널 파일 복사본에서 재생할 메시지를 검색하려면 재생(String,String,String) 작업을 클릭합니다.
- 재생 작업에서 특정 기간 내에 생성된 저널 파일 복사본에서만 재생되도록 하려면 재생(String,String, string,String,String,String) 작업을 선택합니다. startScanDate 및 endScanDate 필드에서 기간을 지정합니다.
재생 옵션을 지정합니다.
- 주소 필드에서 재생할 메시지의 주소를 지정합니다.
- 대상 필드에서 재생된 메시지를 보낼 브로커의 주소를 지정합니다.
-
(선택 사항) 필터 필드에서 필터 문자열과 일치하는 메시지만 재생할 문자열을 지정합니다. 예를 들어 메시지에 storeID 속성이 있는 경우
storeID="1000"
필터를 사용하여 저장소 ID 값이 1000인 모든 메시지를 재생할 수 있습니다. 필터를 지정하지 않으면 스캔한 저널 파일 복사본의 모든 메시지가 AMQ Broker로 재생됩니다.
- 실행을 클릭합니다.
추가 리소스
- AMQ Management Console 사용에 대한 자세한 내용은 AMQ 관리 콘솔 사용을 참조하십시오.
6.1.6. 저널 파일 압축
AMQ Broker에는 저널에서 dead space를 제거하고 디스크 공간을 줄일 수 있도록 데이터를 압축하는 압축 알고리즘이 포함되어 있습니다.
다음 하위 섹션에서는 다음을 수행하는 방법을 보여줍니다.
6.1.6.1. 저널 파일 압축 구성
브로커는 다음 기준을 사용하여 압축 작업을 시작할 시기를 결정합니다.
- 저널에 대해 생성된 파일 수입니다.
- 저널 파일에 있는 라이브 데이터의 백분율입니다.
이러한 기준 모두에 대해 구성된 값에 도달한 후 압축 프로세스는 저널을 구문 분석하고 모든 종료된 레코드를 제거합니다. 결과적으로 저널은 더 적은 파일로 구성됩니다.
다음 절차에서는 저널 파일 압축을 위해 브로커를 구성하는 방법을 보여줍니다.
프로세스
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. core
요소 내에서journal-compact-min-files
및journal-compact-percentage
매개변수를 추가하고 값을 지정합니다. 예를 들면 다음과 같습니다.<configuration> <core> ... <journal-compact-min-files>15</journal-compact-min-files> <journal-compact-percentage>25</journal-compact-percentage> ... </core> </configuration>
journal-compact-min-files
-
압축이 시작되기 전에 브로커가 생성해야 하는 최소 저널 파일 수입니다. 기본값은
10
입니다. 값을0
으로 설정하면 압축이 비활성화됩니다. 저널의 크기가 무기한 증가할 수 있으므로 압축 기능을 비활성화할 때 주의해야 합니다. journal-compact-percentage
-
저널 파일에 있는 라이브 데이터의 백분율입니다. 이 백분율보다 적은 수의 라이브 데이터(및
journal-compact-min-files
의 구성된 값도 도달한 경우) 압축이 시작됩니다. 기본값은30
입니다.
6.1.6.2. 명령줄 인터페이스에서 압축 실행
다음 절차에서는 CLI(명령줄 인터페이스)를 사용하여 저널 파일을 압축하는 방법을 보여줍니다.
프로세스
<
broker_instance_dir> 디렉터리의
소유자로서 브로커를 중지합니다. 아래 예제에서는 사용자amq-broker
를 보여줍니다.su - amq-broker cd <broker_instance_dir>/bin $ ./artemis stop
(선택 사항) 다음 CLI 명령을 실행하여 데이터 툴의 전체 매개변수 목록을 가져옵니다. 기본적으로 툴은 <
broker_instance_dir> /etc/broker.xml
에 있는 설정을 사용합니다.$ ./artemis help data compact.
다음 CLI 명령을 실행하여 데이터를 압축합니다.
$ ./artemis data compact.
도구가 데이터를 성공적으로 압축한 후 브로커를 다시 시작합니다.
$ ./artemis run
추가 리소스
- AMQ Broker에는 저널 파일을 관리하기 위한 여러 CLI 명령이 포함되어 있습니다. 자세한 내용은 부록의 명령줄 툴 을 참조하십시오.
6.1.7. 디스크 쓰기 캐시 비활성화
대부분의 디스크에는 하드웨어 쓰기 캐시가 포함되어 있습니다. 쓰기는 나중에 디스크에 지연 기록되므로 쓰기 캐시는 디스크의 명확한 성능을 향상시킬 수 있습니다. 기본적으로 많은 시스템은 디스크 쓰기 캐시가 활성화된 상태로 제공됩니다. 즉, 운영 체제에서 동기화한 후에도 데이터가 실제로 디스크에 생성되었음을 보장하지 않습니다. 따라서 오류가 발생하면 중요한 데이터가 손실될 수 있습니다.
일부 더 많은 디스크에는 장애 발생 시 데이터가 손실되는 것은 아니지만 테스트해야 하는 비휘발성 또는 배터리 지원 쓰기 캐시가 있습니다. 디스크에 이러한 기능이 없는 경우 쓰기 캐시가 비활성화되어 있는지 확인해야 합니다. 디스크 쓰기 캐시를 비활성화하면 성능에 부정적인 영향을 미칠 수 있습니다.
다음 절차에서는 Windows에서 Linux에서 디스크 쓰기 캐시를 비활성화하는 방법을 보여줍니다.
프로세스
-
Linux에서 디스크 쓰기 캐시 설정을 관리하려면
hdparm
( IDE 디스크용) 또는sdparm
또는sginfo
(SDSI/SATA 디스크용)를 사용합니다. - Windows에서 디스크 작성기 캐시 설정을 관리하려면 디스크를 마우스 오른쪽 버튼으로 클릭합니다. 속성을 선택합니다.