다음 문제는 클러스터된 브로커에 영향을 줍니다.
이 릴리스에서는 완전히 연결된 브로커 클러스터만 지원됩니다. 즉, 클러스터에 있는 모든 브로커가 해당 클러스터 내의 다른 모든 브로커와 직접 통신해야 합니다. imqbrokerd -cluster 명령줄 인수를 사용하여 브로커를 연결하는 경우 해당 클러스터의 모든 브로커가 포함되어 있는지 확인해야 합니다.
HADB를 사용하는 브로커는 10MB를 초과하는 메시지를 처리할 수 없습니다. (버그 6531734)
클라이언트가 고가용성 브로커에 연결되면 클라이언트 런타임이 imqAddressListIterations 설정 값에 관계 없이 성공할 때까지 재연결을 받습니다.)
클러스터의 일부인 브로커에 연결된 클라이언트는 현재 해당 클러스터에서 원격 브로커에 있는 대기열을 찾아보기 위해 QueueBrowser를 사용할 수 없습니다. 클라이언트는 직접 연결된 브로커에 있는 대기열의 내용만 찾아볼 수 있습니다. 그렇지만 클라이언트는 여전히 모든 대기열로 메시지를 보내거나 클러스터에 있는 모든 브로커의 대기열에서 메시지를 사용할 수 있습니다. 찾아보기만 제한을 받습니다.
기존 클러스터에서 3.x 브로커와 4.1 브로커를 클러스터링하려면 4.1 브로커에 대해 등록 정보 imq.autocreate.queue.maxNumActiveConsumers=1을 설정해야 합니다. 그렇지 않으면 브로커는 클러스터 연결을 설정할 수 없습니다.
고가용성 클러스터로 변환한 경우 Message Queue 관리자 유틸리티(imqdbmgr)를 사용하여 기존의 독립 실행형 HADB 영구 데이터 저장소를 공유 HADB 저장소로 변환할 수 있습니다. 명령은 다음과 같습니다.
imqdbmgr upgrade hastore
이 유틸리티는 다음과 같은 경우에 사용할 수 있습니다.
4.0 독립 실행형 HADB 저장소를 4.1 공유 HADB 저장소로 바꿀 경우. 이 경우 브로커는 저장소를 자동으로 업그레이드합니다. 이때 imqdbmgr 명령을 실행하여 업그레이드된 데이터 저장소가 공유될 수 있도록 변환할 수 있습니다.
4.1 독립 실행형 HADB 저장소를 공유 HADB 저장소로 바꿀 경우. 이 경우에는 위에 표시된 imqdbmgr 명령을 실행하여 데이터 저장소가 공유될 수 있도록 변환하기만 하면 됩니다.
이 명령은 HADB 저장소 변환만을 지원하므로 이를 사용하여 파일 기반의 저장소 또는 다른 JDBC 저장소를 공유 HADB 저장소로 변환할 수 없습니다. 이전에 Message Queue 3.x 버전을 실행 중인 경우 고가용성 기능을 사용하기 위해서는 HADB 저장소를 만든 다음 데이터를 해당 저장소로 수동으로 마이그레이션해야 합니다.
imqdbmgr upgrade hastore 명령을 사용하여 HADB 저장소로 변환한 경우 저장소에 메시지가 10,000개 이상 저장되면 "too many locks are set" 메시지가 발생하면서 작업에 실패할 수 있습니다(버그 아이디 6588856).
해결 방법: 다음 명령을 사용하여 잠금 수를 늘립니다.
hadbm set NumberOfLocks=<desiredNumber>
추가 정보에 대해서는 Sun Java System Application Server 9.1 Enterprise Edition Troubleshooting Guide의 “HADB Problems”를 참조하십시오.
한 트랜잭션에서 원격 메시지가 500개 이상 완결되면 브로커에서 "HADB-E-12815: Table memory space exhausted" 오류가 발생할 수 있습니다.(버그 아이디 6550483)
추가 정보에 대해서는 Sun Java System Application Server 9.1 Enterprise Edition Troubleshooting Guide의 "HADB Problems"를 참조하십시오.
브로커 클러스터에서 브로커는 시작되지 않은 원격 연결에 메시지 대기열을 만듭니다(버그 아이디 4951010).
해결 방법: 일단 연결이 시작되면 사용자가 메시지를 수신합니다. 사용자의 연결이 종료된 경우 메시지는 다른 사용자에게 전달됩니다.
한 트랜잭션 내에서 원격 브로커의 메시지를 두 개 이상 사용할 경우 브로커에 다음 오류 메시지가 기록될 수 있습니다. 이 메시지는 문제를 일으키지 않으며 무시할 수 있습니다.
[26/Jul/2007:13:18:27 PDT] WARNING [B2117]: Message acknowledgement failed from mq://129.145.130.95:7677/?instName=a&brokerSessionUID=3209681167602264320: ackStatus = NOT_FOUND(404)\ Reason = Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed. AckType = MSG_CONSUMED MessageBrokerSession = 3209681167602264320 TransactionID = 3534784765719091968 SysMessageID = 8-129.145.130.95(95:fd:93:91:ec:a0)-33220-1185481094690 ConsumerUID = 3534784765719133952\par [26/Jul/2007:13:18:27 PDT] WARNING Notify commit transaction [8-129.145.130.95(95:fd:93:91:ec:a0)-33220-1185481094690, [consumer:3534784765719133952, type=NONE]] TUID=3534784765719091968 got response: com.sun.messaging.jmq.jmsserver.util.BrokerException: Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed.: com.sun.messaging.jmq.jmsserver.util.BrokerException: Update remote transaction state to COMMITED(6): transaction 3534784765719091968 not found, the transaction may have already been committed.r
이 메시지는 imq.txn.reapLimit 등록 정보가 한 트랜잭션 내의 원격 메시지 수에 비해 낮을 경우 트랜잭션 내의 최근 메시지에 대한 완결을 메시지 홈 브로커에 알릴 때 기록됩니다. (버그 6585449)
해결 방법: 이 메시지를 방지하려면 imq.txn.reapLimit 등록 정보 값을 늘립니다.