16.2.2. 使用基于 UDP 的动态发现创建代理集群


您可以创建一个代理集群,其中代理通过 UDP 多播动态发现彼此。

步骤

  1. 打开 <broker-instance-dir>/etc/broker.xml 配置文件。
  2. <core> 元素中,添加连接器。

    此连接器定义其他代理可用于连接到此代理的连接信息。这些信息将在发现过程中发送到集群中的其他代理。

    <configuration>
        <core>
            ...
            <connectors>
                <connector name="netty-connector">tcp://localhost:61617</connector>
            </connectors>
            ...
        </core>
    </configuration>
  3. 添加 UDP 广播组。

    广播组可让代理将其集群连接的信息推送到集群中的其他代理。这个广播组使用 UDP 广播连接设置:

    <configuration>
        <core>
            ...
            <broadcast-groups>
                <broadcast-group name="my-broadcast-group">
                    <local-bind-address>172.16.9.3</local-bind-address>
                    <local-bind-port>-1</local-bind-port>
                    <group-address>231.7.7.7</group-address>
                    <group-port>9876</group-port>
                    <broadcast-period>2000</broadcast-period>
                    <connector-ref>netty-connector</connector-ref>
                </broadcast-group>
            </broadcast-groups>
            ...
        </core>
    </configuration>

    除非另有说明,否则需要以下参数:

    broadcast-group
    使用 name 属性指定广播组的唯一名称。
    local-bind-address
    绑定 UDP 套接字的地址。如果您的代理上有多个网络接口,则需要指定您要用于广播的接口。如果没有指定此属性,则套接字将绑定到操作系统所选 IP 地址。这是特定于 UDP 的属性。
    local-bind-port
    数据报套接字绑定的端口。在大多数情况下,使用 -1 默认值,它指定了匿名端口。此参数用于与 local-bind-address 的连接。这是特定于 UDP 的属性。
    group-address
    数据要广播的多播地址。它是一类 D IP 地址,范围为 224.0.0.0 - 239.255.255.255 (含)。地址 224.0.0.0 会被保留,不可用。这是特定于 UDP 的属性。
    group-port
    用于广播的 UDP 端口号。这是特定于 UDP 的属性。
    broadcast-period (可选)
    连续广播之间的时间间隔(以毫秒为单位)。默认值为 2000 毫秒。
    connector-ref
    之前配置的群集连接器应该被广播。
  4. 添加 UDP 发现组。

    发现组定义了此代理从其他代理接收连接器信息的方式。代理维护一个连接器列表(每个代理的一个条目)。当从代理接收广播时,它会更新其条目。如果没有从代理接收广播的时间长度,它会删除该条目。

    此发现组使用 UDP 发现集群中的代理:

    <configuration>
        <core>
            ...
            <discovery-groups>
                <discovery-group name="my-discovery-group">
                    <local-bind-address>172.16.9.7</local-bind-address>
                    <group-address>231.7.7.7</group-address>
                    <group-port>9876</group-port>
                    <refresh-timeout>10000</refresh-timeout>
                </discovery-group>
            <discovery-groups>
            ...
        </core>
    </configuration>

    除非另有说明,否则需要以下参数:

    discovery-group
    使用 name 属性指定发现组的唯一名称。
    local-bind-address (可选)
    如果运行代理的机器使用多个网络接口,您可以指定发现组应该侦听的网络接口。这是特定于 UDP 的属性。
    group-address
    要侦听的组的多播地址。它应当与您要侦听的广播组中的 group-address 匹配。这是特定于 UDP 的属性。
    group-port
    多播组的 UDP 端口号。它应当与您要侦听的广播组中的 group-port 匹配。这是特定于 UDP 的属性。
    refresh-timeout (可选)

    发现组在从特定代理接收最后一次广播后等待的时间(以毫秒为单位),然后再从其列表中删除代理的连接器对条目。默认值为 10000 毫秒(10 秒)。

    把它设置为比广播组的 广播期间 值高得多。否则,即使代理仍然广播(由于时间略有差异),代理可能会定期从列表中消失。

  5. 创建集群连接并将其配置为使用动态发现。

    默认情况下,集群连接将加载对称拓扑中所有地址的消息。

    <configuration>
        <core>
            ...
            <cluster-connections>
                <cluster-connection name="my-cluster">
                    <connector-ref>netty-connector</connector-ref>
                    <discovery-group-ref discovery-group-name="my-discovery-group"/>
                </cluster-connection>
            </cluster-connections>
            ...
        </core>
    </configuration>
    cluster-connection
    使用 name 属性指定集群连接的名称。
    connector-ref
    定义其他代理可以如何连接到此代理的连接器。
    discovery-group-ref
    此代理用来定位集群其他成员的发现组。只有当集群使用动态发现时,才需要配置此属性。
  6. 配置集群连接的任何其他属性。

    这些额外的集群连接属性具有适用于大多数常见用例的默认值。因此,如果您不希望默认行为,您只需要配置这些属性。如需更多信息,请参阅 附录 C, Cluster Connection Configuration 元素

  7. 创建集群用户和密码。

    AMQ Broker 附带默认集群凭证,但您应该更改它们以防止未授权的远程客户端使用这些默认凭证来连接代理。

    重要

    集群密码必须与集群中的每个代理相同。

    <configuration>
        <core>
            ...
            <cluster-user>cluster_user</cluster-user>
            <cluster-password>cluster_user_password</cluster-password>
            ...
        </core>
    </configuration>
  8. 在每个额外代理上重复此步骤。

    您可以将集群配置复制到每个额外代理中。但是,不要复制其他 AMQ Broker 数据文件(如绑定、日志和大型消息目录)。这些文件在集群中的节点之间必须是唯一的,否则集群无法正确表单。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.