集群配置方案
采用A、B、C三个节点的集群,其中B和C采用共享文件夹的方式集群,A分别和B、C配置为broker集群进行消息双向同步。
服务端口 | 管理端口 | 存储 | 网络连接器 | 用途 | |
---|---|---|---|---|---|
NodeA | 61616 | 8161 | NodeB、NodeC | 消费者 | |
NodeB | 61617 | 8162 | /share_file/kahadb | NodeA | 生产者、消费者 |
NodeC | 61618 | 8163 | /share_file/kahadb | NodeA | 生产者、消费者 |
集群配置步骤
为了方便,这里采用一台机器进行集群配置(原则上是应该三台机器,分别对应三个IP地址),IP地址用端口号进行区分。说明下,一台机器配置集群跟三台机器配置集群原理是一样的,只是测试的话,用一台模拟配置集群就行了。
步骤1
将activemq包上传到linux服务器并解压,将解压后的文件复制到指定目录(我的目录是在/usr/local/activemq),并且重命名为activemq-a。同理,复制并重命名为activemq-b和activemq-c。
[root@fut local]# cd /root
[root@fut ~]# cp -rf apache-activemq-5.14.0 /usr/local/activemq/activemq-a
[root@fut ~]# cp -rf apache-activemq-5.14.0 /usr/local/activemq/activemq-b
[root@fut ~]# cp -rf apache-activemq-5.14.0 /usr/local/activemq/activemq-c
[root@fut ~]# cd /usr/local/activemq/
[root@fut activemq]# ll
总用量 0
drwxr-xr-x. 10 root root 193 11月 25 10:41 activemq-a
drwxr-xr-x. 10 root root 193 11月 25 10:41 activemq-b
drwxr-xr-x. 10 root root 193 11月 25 10:41 activemq-c
[root@fut activemq]#
步骤2
创建一个共享目录,用于master/slave集群
[root@fut activemq]# mkdir kahadb
[root@fut activemq]# ll
总用量 0
drwxr-xr-x. 10 root root 193 11月 25 10:41 activemq-a
drwxr-xr-x. 10 root root 193 11月 25 10:41 activemq-b
drwxr-xr-x. 10 root root 193 11月 25 10:41 activemq-c
drwxr-xr-x. 2 root root 6 11月 25 12:36 kahadb
[root@fut activemq]#
步骤3(active-a节点里activemq.xml文件配置)
进入到activemq-a/conf目录,编辑activemq.xml文件
- 以下3-6行注释掉,第1行端口号为61616
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<!--<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>-->
</transportConnectors>
......
- 在以上代码</transportConnectors的下面加入网络连接器的配置项
<networkConnectors>
<networkConnector name="local_network" uri="static:(tcp://127.0.0.1:61617,tcp://127.0.0.1:61618)" />
</networkConnectors>
步骤4(active-b节点里activemq.xml文件配置)
进入到activemq-b/conf目录,编辑activemq.xml文件
- 以下3-6行注释掉,第2行端口号为61617
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<!--<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>-->
</transportConnectors>
......
- 在以上代码</transportConnectors的下面加入网络连接器的配置项
<networkConnectors>
<networkConnector name="network_a" uri="static:(tcp://127.0.0.1:61616)" />
</networkConnectors>
- 由于NodeA和NodeB采用共享文件夹方式,所以需要指定持久化地址,找到以下代码并修改成步骤2共享目录的地址。
<persistenceAdapter>
<kahaDB directory="/usr/local/activemq/kahadb"/>
</persistenceAdapter>
步骤5(active-c节点里activemq.xml文件配置)
进入到activemq-c/conf目录,编辑activemq.xml文件
- 以下3-6行注释掉,第2行端口号为61618
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61618?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<!--<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>-->
</transportConnectors>
......
- 在以上代码</transportConnectors的下面加入网络连接器的配置项
<networkConnectors>
<networkConnector name="network_a" uri="static:(tcp://127.0.0.1:61616)" />
</networkConnectors>
- 由于NodeA和NodeB采用共享文件夹方式,所以需要指定持久化地址,找到以下代码并修改成步骤2共享目录的地址。
<persistenceAdapter>
<kahaDB directory="/usr/local/activemq/kahadb"/>
</persistenceAdapter>
步骤6(active-a节点里jetty.xml文件配置)
继续在conf目录下编辑jetty.xml文件,将端口号修改为8161
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<property name="host" value="0.0.0.0"/>
<property name="port" value="8161"/>
</bean>
步骤7(active-b节点里jetty.xml文件配置)
继续在conf目录下编辑jetty.xml文件,将端口号修改为8162
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<property name="host" value="0.0.0.0"/>
<property name="port" value="8162"/>
</bean>
步骤8(active-c节点里jetty.xml文件配置)
继续在conf目录下编辑jetty.xml文件,将端口号修改为8163
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<property name="host" value="0.0.0.0"/>
<property name="port" value="8163"/>
</bean>
运行测试
- 分别启动节点A、B、C的服务
- 查看服务是否都已经启动(能够看到确实都已经启动)
- 查看端口号是否都已经启动
发现节点C端口号61618没有对外提供服务,这是为什么?因为节点B和节点C是master/slave配置,此时节点B获取到了共享文件夹的所有权,所以节点C在等待获得资源并且提供服务。也就是说,节点C没有获得资源之前并不会提供服务。 - 现在我将节点B的服务关闭,观察节点C会不会获得资源并提供服务。
结果,节点C端口号61618开始提供服务了。 - 节点B重新恢复服务后,端口号61617也不会提供服务了,因为这个时候节点C已经占据了共享文件的所有权,而节点B只能先等待。