纯主从

特性 > 集群 > 主从 > 纯主从

警告

LevelDB 存储已从生产环境中移除。此页面仅作为先前版本的存档页面。请改用 共享存储主从

纯主从

此功能已弃用,将在 5.8 版本中移除。

此功能将在 5.8 中移除,因为它尚未发展到生产就绪状态。建议您使用 共享存储主从复制 LevelDB 存储。请参阅 AMQ-4165

纯主从配置提供了一个基本的无共享、完全复制的拓扑结构,它不依赖于共享文件系统或共享数据库。

纯主从的工作原理

  • 主代理的从代理会从主代理中获取所有消息状态 - 消息、确认和事务状态。
    当从代理主动连接到主代理时,它不会允许或启动任何网络或传输连接器,它的唯一目的是复制主代理的状态。

  • 主代理仅在将消息交换成功传递给从代理后才会响应客户端。例如,一个提交
    在客户端事务中,只有在主代理和从代理都处理了提交后才会完成。

  • 如果主代理出现故障(例如硬件故障),从代理可以选择两种操作模式
    1. 启动所有网络和传输连接器 - 允许连接到主代理的客户端在从代理上恢复。
    2. 或者可以配置为关闭。在这种模式下,从代理仅用于复制主代理的状态。
  • 客户端应使用故障转移传输来首先连接到主代理,然后再连接到从代理。例如,使用以下 URL
    failover://(tcp://masterhost:61616,tcp://slavehost:61616)?randomize=false
    

    randomize 属性只是禁用随机性,以便传输始终优先尝试主代理,如果无法连接到主代理,则尝试从代理。请注意,从代理在成为主代理之前不接受连接

纯主从的限制

  • 只有一个从代理可以连接到主代理
  • 失败的主代理无法在不关闭从代理的情况下重新引入(没有自动回退)
  • 代理之间没有自动同步。这是一个手动过程。

恢复纯主从拓扑

这是一个手动过程 - 主代理出现故障后,确保拓扑结构再次同步的唯一方法是手动

  • 关闭从代理(客户端无需关闭 - 如果它们是故障转移客户端,它们将等待拓扑结构重新建立)
  • 将从代理的数据目录复制到主代理的数据目录
  • 重新启动主代理和从代理

配置纯主从

您不应该配置主代理和从代理之间的连接。连接是使用从代理的配置自动建立的。如果您显式配置网络连接,则当主代理负载过重时可能会遇到竞争条件。

主代理不需要任何特殊配置 - 它是一个正常的代理,直到从代理连接到它。
要将代理标识为从代理 - 只需要设置一个属性(见下文),如本 示例所示 - 因此配置非常简单

<broker masterConnectorURI="tcp://masterhost:62001" shutdownOnMasterFailure="false">
  <persistenceAdapter>
      <journaledJDBC journalLogFiles="5" dataDirectory="${activemq.base}/data/broker2" />
    </persistenceAdapter>

    <transportConnectors>
	  <transportConnector uri="tcp://slavehost:61616"/>
   </transportConnectors>
</broker>

代理属性|默认值|描述 —|—|— masterConnectorURI|null|主代理的 URI,例如 tcp://masterhost:62001 shutdownOnMasterFailure|false|如果为 true,则从代理将在主代理出现故障时关闭,否则从代理将接管成为新的主代理。从代理确保在另一台机器上有一个每个消息和确认的单独副本,这可以防止灾难性的硬件故障。如果主代理出现故障,您可能希望从代理也关闭,因为您可能始终希望将消息复制到两个物理位置,以防止在灾难性数据中心或硬件故障时丢失消息。如果您希望系统在主代理出现故障后继续运行,则将此标志保留为 false。 waitForSlave|false|版本 5.2+,如果为 true,则主代理将在从代理连接后完成其启动序列 shutdownOnSlaveFailure|false|版本 5.2+,如果为 true,则主代理将在从代理连接丢失时关闭,确保主代理不会与从代理不同步。

配置从代理的身份验证

在 ActiveMQ Classic 4.1 或更高版本中,您可以使用 <masterConnector/> 元素作为替代 XML 配置机制,如以下 示例所示,来配置从代理用于连接到主代理的用户和密码

<broker brokerName="slave" useJmx="false"  deleteAllMessagesOnStartup="true"  xmlns="https://activemq.apache.org/schema/core">
  <services>
    <masterConnector remoteURI= "tcp://127.0.0.1:62001" userName="James" password="Cheese"/>
  </services>

  <transportConnectors>
    <transportConnector uri="tcp://127.0.0.1:62002"/>
  </transportConnectors>
</broker>

Apache, ActiveMQ, Apache ActiveMQ、Apache 羽毛徽标和 Apache ActiveMQ 项目徽标是 Apache 软件基金会的商标。版权所有 © 2024,Apache 软件基金会。根据 Apache 许可证 2.0 授权。