6장. 메시지 데이터 유지
AMQ Broker에는 유지(즉, 저장) 메시지 데이터를 위한 두 가지 옵션이 있습니다.
- 저널에 메시지 유지
- 이는 기본 옵션입니다. journalctl 기반 지속성은 파일 시스템의 저널에 메시지를 쓰는 고성능 옵션입니다.
- 데이터베이스에 메시지 유지
- 이 옵션은 JDBC( Java Database Connectivity ) 연결을 사용하여 선택한 데이터베이스에 대한 메시지를 유지합니다.
또는 메시지 데이터를 유지하지 않도록 브로커를 구성할 수도 있습니다. 자세한 내용은 6.3절. “지속성 비활성화”의 내용을 참조하십시오.
브로커는 메시지 저널 외부에서 큰 메시지를 유지하는 데 다른 솔루션을 사용합니다. 자세한 내용은 8장. 대용량 메시지 처리를 참조하십시오.
브로커는 메모리 부족 상황에서 디스크에 메시지를 페이징하도록 구성할 수도 있습니다. 자세한 내용은 7.1절. “메시지 페이징 구성”를 참조하십시오.
AMQ Broker에서 지원하는 데이터베이스 및 네트워크 파일 시스템에 대한 최신 정보는 Red Hat Customer Portal에서 Red Hat AMQ 7 지원 구성을 참조하십시오.
6.1. 저널에 메시지 데이터 유지
브로커 저널은 디스크의 추가 전용 파일 집합입니다. 각 파일은 고정된 크기로 미리 생성되며 처음에는 패딩으로 채워집니다. 메시징 작업이 브로커에서 수행되므로 레코드가 저널 끝에 추가됩니다. 레코드를 추가하면 브로커는 일반적으로 디스크에서 가장 느린 작업인 디스크 헤드 이동 및 임의 액세스 작업을 최소화할 수 있습니다. 하나의 저널 파일이 가득 차면 브로커는 새 파일을 생성합니다.
저널 파일 크기는 구성할 수 있으므로 각 파일에서 사용하는 디스크 순환기 수를 최소화합니다. 그러나 최신 디스크 토폴로지는 복잡하며 브로커는 파일이 매핑되는 사이클러를 제어할 수 없습니다. 따라서 저널 파일 크기를 정확하게 제어하기가 어렵습니다.
브로커가 사용하는 다른 지속성 관련 기능은 다음과 같습니다.
- 특정 저널 파일이 아직 사용 중인지 여부를 결정하는 가비지 수집 알고리즘입니다. 저널 파일을 더 이상 사용하지 않는 경우 브로커는 재사용할 파일을 회수할 수 있습니다.
- 저널에서 손상된 공간을 제거하고 데이터를 압축하는 압축 알고리즘입니다. 이렇게 하면 저널이 디스크에 있는 파일을 더 적게 사용합니다.
- 로컬 트랜잭션을 지원합니다.
- JMS 클라이언트를 사용할 때 XA(Extended Architecture) 트랜잭션을 지원합니다.
저널의 대부분은 Java로 작성됩니다. 그러나 연결 가능한 다른 구현을 사용할 수 있도록 실제 파일 시스템과의 상호 작용이 요약됩니다. AMQ Broker에는 다음과 같은 구현이 포함됩니다.
- NIO
- NIO(신규 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 라이브러리 설치
지속성 성능을 높이기 위해 AIO 저널(NIO 대신)을 사용하는 것이 좋습니다.
다른 운영 체제 또는 이전 버전의 Linux 커널과 함께 AIO 저널을 사용할 수 없습니다.
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. 메시징 jert 구성 을 참조하십시오.
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
로 설정되면 브로커는 아직 존재하지 않는 경우bindings-directory
에 지정된 위치에 바인딩 디렉터리를 자동으로 생성합니다. 기본값은true
입니다.
6.1.4. JMS 저널 정보
JMS 저널은 JMS 대기열, 주제 및 연결 팩토리와 이러한 리소스에 대한 모든 JNDI 바인딩을 포함한 모든 JMS 관련 데이터를 저장합니다. 관리 API를 통해 생성된 모든 JMS 리소스는 이 저널에 유지되지만 구성 파일을 통해 구성된 리소스는 그렇지 않습니다. 브로커는 JMS가 사용 중인 경우에만 JMS 저널을 생성합니다.
JMS 저널의 파일 앞에는 activemq-jms
가 붙습니다. 또한 각 파일에는 .jms
의 확장과 기본 크기가 1048576바이트입니다.
JMS 저널은 바인딩 저널과 구성을 공유합니다.
추가 리소스
- 바인딩 저널에 대한 자세한 내용은 6.1.3절. “바인딩 저널 정보” 을 참조하십시오.
6.1.5. 저널 보존 구성
생성된 각 저널 파일의 사본을 유지하도록 AMQ 브로커를 구성할 수 있습니다. 저널 보존을 구성한 후 저널 파일 복사본의 메시지를 재생하여 브로커에 메시지를 보낼 수 있습니다.
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
및 CloudEventONDS
입니다. directory
- 저널 파일 복사본의 파일 시스템 위치입니다. 지정된 디렉터리는 < broker_instance_dir> 디렉터리를 기준으로 합니다.
storage-limit
- 모든 저널 파일 복사본에서 사용할 수 있는 최대 스토리지입니다. 스토리지 제한에 도달하면 브로커는 가장 오래된 저널 파일을 제거하여 새 저널 파일 사본을 위한 공간을 제공합니다. 스토리지 제한을 설정하는 것은 저널 파일 보존으로 인해 브로커가 디스크 공간이 부족하여 종료되지 않도록 하는 효과적인 방법입니다.
6.1.5.2. 브로커에 존재하는 주소에 대한 저널 파일 복사본에서 메시지 재생
저널 파일 복사본에서 재생하려는 메시지 주소가 AMQ Broker에 있는 경우 다음 절차를 사용하여 메시지를 재생합니다. 브로커의 원래 주소 또는 다른 주소로 메시지를 재생할 수 있습니다.
절차
- AMQ 관리 콘솔에 로그인합니다. 자세한 내용은 AMQ 관리 콘솔 액세스를 참조하십시오.
- 메인 메뉴에서 Artemis 를 클릭합니다.
- 폴더 트리에서 주소를 클릭하여 주소 목록을 표시합니다.
- 주소 탭을 클릭합니다.
- 메시지를 재생하려는 주소에 대한 Action 열에서 작업을 클릭합니다.
재생 작업을 선택합니다.
- 재생 작업에서 모든 저널 파일 복사본에서 재생할 메시지를 검색하려면 replay(String,String) 작업을 클릭합니다.
- 재생 작업에서 특정 기간 내에 생성된 저널 파일 복사본에서만 재생할 메시지를 검색하려면 replay(String,String, String,String) 작업을 선택합니다. startScanDate 및 endScanDate 필드에서 기간을 지정합니다.
재생 옵션을 지정합니다.
- 대상 필드에서 재생된 메시지를 보낼 브로커의 주소를 지정합니다. 이 필드를 비워 두면 브로커의 원래 주소로 메시지가 재생됩니다.
-
(선택 사항) 필터 필드에서 필터 문자열과 일치하는 메시지만 재생하는 문자열을 지정합니다. 예를 들어 메시지에 storeID 속성이 있는 경우
storeID="1000"
필터를 사용하여 저장소 ID 값이 1000인 모든 메시지를 재생할 수 있습니다. 필터를 지정하지 않으면 검사된 저널 파일 복사본의 모든 메시지가 AMQ Broker에 재생됩니다.
- Execute 를 클릭합니다.
추가 리소스
- AMQ 관리 콘솔 사용에 대한 자세한 내용은 AMQ 관리 콘솔 사용을 참조하십시오.
6.1.5.3. 브로커에서 제거된 주소에 대한 저널 파일 복사본에서 메시지 재생
저널 파일 사본에서 재생하려는 메시지 주소가 AMQ Broker에서 제거된 경우 다음 절차를 사용하여 메시지를 브로커의 다른 주소로 재생합니다.
절차
- AMQ 관리 콘솔에 로그인합니다. 자세한 내용은 AMQ 관리 콘솔 액세스를 참조하십시오.
- 메인 메뉴에서 Artemis 를 클릭합니다.
- 폴더 트리에서 최상위 서버를 클릭합니다.
- Operations 탭을 클릭합니다.
재생 작업을 선택합니다.
- 재생 작업에서 모든 저널 파일 복사본에서 재생할 메시지를 검색하려면 replay(String,String,String,String) 작업을 클릭합니다.
- 재생 작업에서 특정 기간 내에 생성된 저널 파일 복사본에서만 재생할 메시지를 검색하려면 replay(String,String, String,String,String,String) 작업을 선택합니다. startScanDate 및 endScanDate 필드에서 기간을 지정합니다.
재생 옵션을 지정합니다.
- address 필드에서 재생할 메시지의 주소를 지정합니다.
- 대상 필드에서 재생된 메시지를 보낼 브로커의 주소를 지정합니다.
-
(선택 사항) 필터 필드에서 필터 문자열과 일치하는 메시지만 재생하는 문자열을 지정합니다. 예를 들어 메시지에 storeID 속성이 있는 경우
storeID="1000"
필터를 사용하여 저장소 ID 값이 1000인 모든 메시지를 재생할 수 있습니다. 필터를 지정하지 않으면 검사된 저널 파일 복사본의 모든 메시지가 AMQ Broker에 재생됩니다.
- Execute 를 클릭합니다.
추가 리소스
- AMQ 관리 콘솔 사용에 대한 자세한 내용은 AMQ 관리 콘솔 사용을 참조하십시오.
6.1.6. 저널 파일 압축
AMQ Broker에는 저널에서 손상된 공간을 제거하고 디스크 공간을 적게 차지하도록 데이터를 압축하는 압축 알고리즘이 포함되어 있습니다.
다음 하위 섹션에서는 다음을 수행하는 방법을 보여줍니다.
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-
file의 구성된 값에 도달)로 간주되면 압축이 시작됩니다. 기본값은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
(Sginfo/SATA 디스크용)를 사용합니다. - Windows에서 디스크 작성기 캐시 설정을 관리하려면 디스크를 마우스 오른쪽 버튼으로 클릭합니다. 속성을 선택합니다.