跳到主要内容

对保证送达消息暂存进行碎片整理

Solace PubSub+事件代理用于存储保证消息的池文件可能会随着时间的推移变得“碎片化”,尤其是当消费者频繁离线且不重新连接时。碎片化可能发生是因为等待离线消费者交付的少量消息被保留,这阻止了已经消费且也在池文件中的大量消息被移除。这导致了已交付给消费者的消息占用大量磁盘空间的不良效果。

要从池文件中移除已交付的消息并回收磁盘空间,您可以手动触发碎片整理(见手动碎片整理)或配置事件代理自动碎片整理消息池(见自动碎片整理)。

通常情况下:

  • 所有手动和自动(基于计划和基于阈值规则)的碎片整理行为可以共存并一起工作。
  • 如果碎片整理运行已经在进行中(无论由什么触发),任何自动碎片整理运行(自动或手动)都会被忽略(跳过)。
  • 所有手动和自动碎片整理运行都可以被管理员手动停止。

手动碎片整理

要手动触发碎片整理,请输入以下命令。当开始后,消息池文件碎片整理将在后台运行。

solace(admin)# system message-spool
solace(admin/system/message-spool)# defragment-spool-files start

要停止活动的池文件碎片整理过程,请输入以下命令:

solace(admin/system/message-spool)# defragment-spool-files stop
  • 如果存在与开放事务相关的入队消息,碎片整理可能无法完全碎片整理消息池。碎片整理从最旧的入队消息开始,并按它们到达的顺序整理消息,直到它到达最新的消息或一个开放事务的一部分消息。关于最近碎片整理的开放事务的信息可以在您发出show message-spool命令时的Exit Condition字段中获得。一旦事务被提交或回滚,可以再次运行碎片整理。在某些情况下,如果事务没有处于准备状态,可能无法提交或回滚事务。在这些情况下,可能需要客户端断开来解决阻塞的事务。
  • 当使用HA冗余设备对时,只能在活动设备上执行消息池碎片整理。如果发生HA故障转移,消息池碎片整理将停止。要重新启动碎片整理过程,您必须再次使故障设备活动,然后再次执行defragment-spool-files start命令。要在备份设备上碎片整理消息池,发起HA故障转移以使备份设备活动。这只适用于设备。当在活动软件事件代理上发起碎片整理时,活动和备用的消息池都会被碎片整理。

以下是如何手动启动碎片整理池文件,以及检查其状态和停止运行的CLI示例:

solace(admin)# system message-spool
solace(admin/system/message-spool)# defragment-spool-files start
Defragmentation has been initiated.
solace# show message-spool detail

Config Status: Enabled (Primary)
Maximum Spool Usage: 60000 MB

. . .

Operational Status: AD-Active
Datapath Status: Up
Synchronization Status: Synced

. . .

Defragmentation:
Status: Active (8.8%)
Schedule Enabled: No
Days: daily
Times: 0:00
Threshold Enabled: No
Fragmentation: 50%
Spool Usage: 50%
Minimum Interval: 15 minutes
Estimated Fragmentation: 12%
Estimated Recoverable Space: 123 MB
Last Result:
Completed On: May 10 2020 10:11:12
Completion %: 100%
Exit Condition: Success
Number of delete in-progress: 0

. . .

ADB Disk Total
Current Persistent Store Usage (MB) 0.0000 0.0000 0.0000
Number of Messages Currently Spooled 0 0 0

. . .
solace(admin/system/message-spool)# defragment-spool-files stop
Defragmentation has been stopped.
solace# show message-spool detail

Config Status: Enabled (Primary)
Maximum Spool Usage: 60000 MB

. . .

Operational Status: AD-Active
Datapath Status: Up
Synchronization Status: Synced

. . .

Defragmentation:
Status: Idle
Schedule Enabled: No
Days: daily
Times: 0:00
Threshold Enabled: No
Fragmentation: 50%
Spool Usage: 50%
Minimum Interval: 15 minutes
Estimated Fragmentation: 12%
Estimated Recoverable Space: 123 MB
Last Result:
Completed On: May 10 2020 10:11:12
Completion %: 58%
Exit Condition: Unmovable XA Transaction
XID:XXX-XXXXXXX
Number of delete in-progress: 0

. . .

ADB Disk Total
Current Persistent Store Usage (MB) 0.0000 0.0000 0.0000
Number of Messages Currently Spooled 0 0 0

. . .

自动碎片整理

您可以配置事件代理自动碎片整理消息池,触发方式有两种:

  • 基于固定时间计划,例如每天凌晨1点(见基于计划的碎片整理)。
  • 基于碎片化和使用量超出阈值(见基于阈值的碎片整理)。

您可以配置事件代理执行计划和基于阈值的碎片整理,这两种选项并不互斥。

基于计划的碎片整理

要安排一周中触发碎片整理运行的日期,请输入以下命令:

solace(config)# hardware
solace(config/hardware)# message-spool
solace(config/hardware/message-spool)# defragment-spool-files
solace(.../message-spool/defragment-spool-files)# schedule
solace(...spool/defragment-spool-files/schedule)# days <days-of-week>

其中:

<days-of-week>daily或一周中的日子或数字的逗号分隔列表,其中0是星期日,1是星期一,等等。

该命令的否定形式no days将值返回到默认值,daily

要安排每天触发碎片整理运行的时间,请输入以下命令:

solace(...spool/defragment-spool-files/schedule)# times <times-of-day>

其中:

<times-of-day>hourly或最多四个时间的逗号分隔列表,格式为hh:mm,其中hh在0到23之间,mm在0到59之间。

该命令的否定形式no times将值返回到默认值,0:00

默认情况下,基于计划的碎片整理是禁用的。要启用基于计划的碎片整理,请输入以下命令:

solace(...spool/defragment-spool-files/schedule)# no shutdown

要禁用基于计划的碎片整理,请输入以下命令:

solace(...spool/defragment-spool-files/schedule)# shutdown

基于阈值的碎片整理

一旦启用,基于阈值的碎片整理运行是由以下三个条件全部为真触发的:

  • 碎片化量达到了某个百分比。
  • 池使用量达到了某个百分比。
  • 自上一次碎片整理运行以来,已经过去了最少的时间(无论其触发因素如何)。

要配置触发碎片整理运行的碎片化百分比,请输入以下命令:

solace(config)# hardware
solace(config/hardware)# message-spool
solace(config/hardware/message-spool)# defragment-spool-files
solace(.../message-spool/defragment-spool-files)# threshold
solace(...pool/defragment-spool-files/threshold)# fragmentation-percentage <percentage>

其中:

<percentage>是30到100之间的碎片化百分比。

该命令的否定形式no fragmentation-percentage将值返回到默认值,50百分比。

要配置触发碎片整理运行的池使用百分比,请输入以下命令:

solace(...pool/defragment-spool-files/threshold)# usage-percentage <percentage>

其中:

<percentage>是30到100之间的池使用百分比。

该命令的否定形式no usage-percentage将值返回到默认值,50百分比。

要配置自上次碎片整理运行以来必须经过的最短时间,请输入以下命令:

solace(...pool/defragment-spool-files/threshold)# min-interval <interval>

其中:

<interval>是分钟数。

该命令的否定形式no min-interval将值返回到默认值,15分钟。

默认情况下,基于阈值的碎片整理是禁用的。要启用基于阈值的碎片整理,请输入以下命令:

solace(...pool/defragment-spool-files/threshold)# no shutdown

要禁用基于阈值的碎片整理,请输入以下命令:

solace(...pool/defragment-spool-files/threshold)# shutdown