docker 建立activemq集群

来源:互联网 发布:陈坤长相知乎 编辑:程序博客网 时间:2024/06/06 10:38

docker 建立activemq集群

因为对activemq的queue和topic有所疑问,所以想使用docker建立activemq的集群。

环境上使用ubuntu系统进行搭建。

安装docker部分

  1. 执行安装命令: wget -qO- https://get.docker.com/ | sh

  2. 启动服务: sudo service docker start

拉取activemq镜像

  1. 使用阿里云的镜像 docker pull registry.cn-hangzhou.aliyuncs.com/daydayup/activemq

搭建集群并验证

activemq这里采用三台的模式进行搭建。

主机 IP 角色 职责 A 192.168.1.2 集群 消费者 B 192.168.1.3 master 生产者、消费者 C 192.168.1.4 slave 生产者(预备)、消费者

这里说一下我理解的activemq的集群原理。
1. master和slave共享存储
2. master和cluster、slave和cluster消息同步, 使用的是网络连接器。

再说一下docker集群的搭建方法:

  1. 使用dockerfile和docker-compose命令进行搭建
  2. 使用commit镜像

我们这里使用比较简单的手动方法,将主机的文件映射到docker容器里

  1. 首先启动activemq docker run -it -d registry.cn-hangzhou.aliyuncs.com/daydayup/activemq
  2. 得到容器id,进入容器 docker -exec -it 容器id /bin/bash
  3. 讲容器里activemq的配置文件拿出来. docker cp xxx:/opt/apache-activemq-5.13.3/conf/activemq.xml /myConfig/activemq/activemq-cluster-a.xml
  4. 将配置文件增加两份,分别为active-master-b.xmlactive-slave-c.xml
  5. 修改配置

    active-cluster-a.xml

         <transportConnectors>        <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->        <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>       <!-- <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>        <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>        <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>        <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>        <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> -->    </transportConnectors>      <!-- 配置网络代理,cluster 节点需要与 master 跟 slave 进行穿透 -->    <networkConnectors>            <networkConnector uri="static:(tcp://192.168.1.3:61617,tcp://192.168.1.4:61618)" duplex="true" />    </networkConnectors>

    active-master-b.xml

    <transportConnectors>        <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->        <transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>       <!-- <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>        <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>        <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>        <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>        <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> -->    </transportConnectors>      <!-- 配置网络代理,cluster 节点需要与 master 跟 slave 进行穿透 -->    <networkConnectors>            <networkConnector uri="static:(tcp://192.168.1.2:61616)" duplex="true" />    </networkConnectors>

    active-slave-c.xml

    <transportConnectors>        <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->        <transportConnector name="openwire" uri="tcp://0.0.0.0:61618?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>       <!-- <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>        <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>        <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>        <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>        <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> -->    </transportConnectors>      <!-- 配置网络代理,cluster 节点需要与 master 跟 slave 进行穿透 -->    <networkConnectors>            <networkConnector uri="static:(tcp://192.168.1.2:61616)" duplex="true" />    </networkConnectors>
  6. 创建activemq的共享目录 /usr/share/activemq/kahadb

  7. 创建docker网络进行ip规划.

    docker network create --subnet=192.168.1.0/16 mynet123
  8. 启动三个容器

    docker run -it -d -p 61617:61616 -p 8171:8161 --hostname=master --network="mynet123" --ip="192.168.1.2" -v /myConfig/activemq/activemq-master-b.xml:/opt/apache-activemq-5.13.3/conf/activemq.xml -v /usr/share/activemq/kahadb:/opt/apache-activemq-5.13.3/data/kahadb registry.cn-hangzhou.aliyuncs.com/daydayup/activemqdocker run -it -d -p 61616:61616 -p 8161:8161 --hostname=cluster --network="mynet123" --ip="192.168.1.3" -v /myConfig/activemq/activemq-clusters-a.xml:/opt/apache-activemq-5.13.3/conf/activemq.xml registry.cn-hangzhou.aliyuncs.com/daydayup/activemqdocker run -it -d -p 61618:61616 -p 8181:8161 --hostname=slave --network="mynet123" --ip="192.168.1.4" -v /myConfig/activemq/activemq-slave-c.xml:/opt/apache-activemq-5.13.3/conf/activemq.xml -v /usr/share/activemq/kahadb:/opt/apache-activemq-5.13.3/data/kahadb registry.cn-hangzhou.aliyuncs.com/daydayup/activemq 
  9. 然后就可以通过nestat -an |grep 61616这样的命令来检查,我这里搭建的控制台的地址提示是0.0.0.0:8161, 0.0.0.0:8171这样进行访问

  10. 使用idea编写java客户端进行生产和消费。

notes:

  1. 在设置activemq的静态网络时候两个之间不能有空格,否则会报错。(tcp://192.168.1.3:61617,tcp://192.168.1.4:61618)
  2. 在出现容器起来马上就退出了是因为activemq没有启动成功。
  3. 查错可以使用 docker logs -f 容器id进行查看日志。查看所有容器的命令是docker ps -a
  4. 参见的博文

留下来的问题:

  1. 不了解broker的具体作用
  2. docker网络需要再了解
  3. 容器的hostname怎么设置
  4. 使用dockerfile和docker-compose进行搭建集群
原创粉丝点击