16.2.2. 使用基于 UDP 的动态发现创建代理集群
您可以创建一个代理集群,其中代理通过 UDP 多播动态发现彼此。
步骤
-
打开
<broker-instance-dir>/etc/broker.xml
配置文件。 在
<core>
元素中,添加连接器。此连接器定义其他代理可用于连接到此代理的连接信息。这些信息将在发现过程中发送到集群中的其他代理。
<configuration> <core> ... <connectors> <connector name="netty-connector">tcp://localhost:61617</connector> </connectors> ... </core> </configuration>
添加 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
- 之前配置的群集连接器应该被广播。
添加 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 秒)。
把它设置为比广播组的
广播期间
值高得多。否则,即使代理仍然广播(由于时间略有差异),代理可能会定期从列表中消失。
创建集群连接并将其配置为使用动态发现。
默认情况下,集群连接将加载对称拓扑中所有地址的消息。
<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
- 此代理用来定位集群其他成员的发现组。只有当集群使用动态发现时,才需要配置此属性。
配置集群连接的任何其他属性。
这些额外的集群连接属性具有适用于大多数常见用例的默认值。因此,如果您不希望默认行为,您只需要配置这些属性。如需更多信息,请参阅 附录 C, Cluster Connection Configuration 元素。
创建集群用户和密码。
AMQ Broker 附带默认集群凭证,但您应该更改它们以防止未授权的远程客户端使用这些默认凭证来连接代理。
重要集群密码必须与集群中的每个代理相同。
<configuration> <core> ... <cluster-user>cluster_user</cluster-user> <cluster-password>cluster_user_password</cluster-password> ... </core> </configuration>
在每个额外代理上重复此步骤。
您可以将集群配置复制到每个额外代理中。但是,不要复制其他 AMQ Broker 数据文件(如绑定、日志和大型消息目录)。这些文件在集群中的节点之间必须是唯一的,否则集群无法正确表单。
其他资源
-
有关使用带有 UDP 动态发现的代理集群配置示例,请参阅 cluster
-queue
AMQ Broker 示例程序。