6장. 메시지 데이터 저장
AMQ Broker에는 메시지 데이터를 저장(즉, 저장)하기 위한 두 가지 옵션이 있습니다.
- 저널에 메시지 저장
- 이 옵션이 기본 옵션입니다. 저널 기반 지속성은 파일 시스템의 저널에 메시지를 쓰는 고성능 옵션입니다.
- 데이터베이스에 메시지 저장
- 이 옵션은 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(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를 사용하고 있고 이 매개변수가 구성에 명시적으로 지정되지 않은 경우 기본값은500
입니다.
- 이전 설명을 기반으로 스토리지 장치에 필요에 따라 지속성 구성을 조정합니다.
추가 리소스
- 저널 기반 지속성 구성에 사용할 수 있는 모든 매개변수에 대한 자세한 내용은 부록 E. 메시징 저널 구성 요소 을 참조하십시오.
6.1.3. 바인딩 저널 정보
바인딩 저널은 브로커 및 해당 속성에 배포된 큐 세트와 같은 바인딩 관련 데이터를 저장하는 데 사용됩니다. ID 시퀀스 카운터와 같은 데이터도 저장합니다.
바인딩 저널은 메시지 저널과 비교할 때 일반적으로 처리량이 낮기 때문에 항상 NIO를 사용합니다. 이 저널의 파일 앞에는 typical -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 저널의 파일 앞에는 typical -jms
가 붙습니다. 각 파일에는 .jms
확장자가 있으며 기본 크기는 1048576바이트입니다.
JMS 저널은 해당 구성을 바인딩 저널과 공유합니다.
추가 리소스
- 바인딩 저널에 대한 자세한 내용은 6.1.3절. “바인딩 저널 정보” 을 참조하십시오.
6.1.5. 저널 파일 압축
AMQ Broker에는 저널에서 중단된 공간을 제거하고 디스크 공간을 줄일 수 있도록 데이터를 압축하는 압축 알고리즘이 포함되어 있습니다.
다음 하위 섹션에서는 다음을 수행하는 방법을 보여줍니다.
6.1.5.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.5.2. 명령줄 인터페이스에서 압축 실행
다음 절차에서는 CLI(명령줄 인터페이스)를 사용하여 압축된 저널 파일을 사용하는 방법을 보여줍니다.
절차
<
broker_instance_dir> 디렉터리의
소유자로서 브로커를 중지합니다. 아래 예제에서는 user 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.6. 디스크 쓰기 캐시 비활성화
대부분의 디스크에는 하드웨어 쓰기 캐시가 포함되어 있습니다. 쓰기 캐시는 나중에 디스크에 쓰기가 지연되므로 디스크의 명백한 성능을 향상시킬 수 있습니다. 기본적으로 많은 시스템은 디스크 쓰기 캐시가 활성화된 상태로 제공됩니다. 즉, 운영 체제에서 동기화한 후에도 데이터가 실제로 디스크에 해당되도록 보장할 수 없습니다. 따라서 오류가 발생하면 중요한 데이터가 손실될 수 있습니다.
더 비싼 디스크에는 오류가 발생할 경우 데이터를 손실하지 않아도 되는 비휘발성 또는 배터리 지원 쓰기 캐시가 있지만 테스트해야 합니다. 디스크에 이러한 기능이 없는 경우 쓰기 캐시가 비활성화되었는지 확인해야 합니다. 디스크 쓰기 캐시를 비활성화하면 성능에 부정적인 영향을 미칠 수 있습니다.
다음 절차에서는 Windows의 Linux에서 디스크 쓰기 캐시를 비활성화하는 방법을 보여줍니다.
절차
-
Linux에서 디스크 쓰기 캐시 설정을 관리하려면
hdparm
( IDE 디스크용) 또는sdparm
또는sginfo
(Sginfo의 경우)를 사용하십시오. - Windows에서 디스크 작성기 캐시 설정을 관리하려면 디스크를 마우스 오른쪽 버튼으로 클릭합니다. 속성 을 선택합니다.