• ActiveMQ消息队列集群搭建


    ActiveMQ的集群是依赖于Zookeeper的,ActiveMq的集群是,主从集群的方式,主的挂掉,才会自动切换到从,从的才开始运行。

     3个Activemq服务, 同一时间仅Master队列提供服务,当Master队列挂掉后,其它2个Slaver自动选举出1个成为Master,整个队列服务依然可用。

    当挂掉的队列重新恢复后,自动加入集群。当集群仅剩下1个队列时,整个队列不可用!

    zookeeper架构

    服务器名称

    端口

    IP地址

    主从状态

    db1

    2181

    10.51.52.224

    主服务器

    db2

    2181

    10.51.52.220

    从服务器

    db3

    2181

    10.51.52.223

    从服务器

    activemq架构

    服务器名称

    端口

    IP地址

    主从状态

    db1

    61616

    10.51.52.224

    主服务器

    db2

    61616

    10.51.52.220

    从服务器

    db3

    61616

    10.51.52.223

    从服务器

     

    安装ActiveMq

    官网下载地址:https://activemq.apache.org/components/classic/download
    本次使用的安装包为apache-activemq-5.13.0-bin.tar.gz

     #解压安装包,解压到node1目录,注意-C是大写的
    tar -zxvf apache-activemq-5.13.0-bin.tar.gz  -C /opt
    mv apache-activemq-5.13.0 activemq
    
    #修改jetty
    vim /opt/activemq/conf/jetty.xml
    #修改管控台端口 ,同样其他几个节点也修改
    

      <property name="host" value="0.0.0.0"/>
      <property name="port" value="8161"/>

    #修改brokername
    #3个MQ实例的brokerName必须一致,要不然你会在集群启动时出现:
    #Not enough cluster members when using LevelDB replication 这样的错误。
    vim /opt/activemq/conf/activemq.xml

    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="activemq-cluster" dataDirectory="${activemq.data}"> #修改persistenceAdapter # replicas 节点数 # bind 绑定地址 # zkAddress zookeeeper的集群地址 # hostname 主机名称 # zkPath mq在zookeeepr上存储的地址

      directory="${activemq.data}/leveldb"
      replicas="3"
      bind="tcp://0.0.0.0:0"
      zkAddress="10.51.52.223:2181,10.51.52.224:2181,10.51.52.220:2181"
      zkPath="/opt/activemq/leveldb-stores"
      hostname="10.51.52.224"

    
    #修改通信端口
    

      <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="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>

    综上

    配置文件:/opt/activemq/conf/activemq.xml、/opt/activemq/conf/jetty.xml
    数据目录:/opt/activemq/data
    启动:/opt/activemq/bin/activemq start
    关闭:/opt/activemq/bin/activemq stop

    查看日志

    /opt/activemq/data/activemq.log

    查看启动进程信息

    root@xxx /opt]# jps 
    15826 activemq.jar
    23042 Jps
    21763 QuorumPeerMain
    28260 Main
    4892 startup.jar
    15695 Elasticsearch

    连接zookeeper查看节点信息

    ./zkCli.sh
    [zk: localhost:2181(CONNECTED) 1] ls /opt/activemq/leveldb-stores
    [00000000036, 00000000039, 00000000037]

    然后就是测试了!

    activemq控制台

    http://192.168.1.1:8161/admin

    一次问题排查过程记录

    突然部分客户反映收不到验证码,经测试,部分能收到,部分不能收到

    解决过程:

    1.检查集群搭建问题

      activemq+zookeeper集群因为以前一直在使用,是突然发现部分客户偶尔收不到验证码,可以大概知道不是集群搭建的问题。

    2.检查程序是否运行异常

      查看程序运行日志,并无异常,重启服务,发现收到很多条之前未接受到的验证码,怀疑是消息队列阻塞问题。

    3.进入acctivemq控制台查看队列情况,如下图

     

     之前有一千多条,可以看出是消息队列中的数据未被消费者消费,点击进去可查看具体运行程序的线程端口号是多少,

    由于之前解决时未截图,现在没有了,此处就省略了

    得到远程运行程序线程号为55270,去服务器后台查看对应远程程序的线程

    netstat -na |grep 55270
    netstat -natp |grep 55270

    上面可以查到对应的进程号ESTABLISHED 28490/java ,28490,然后通过该进程号查看对应服务

    ps -ef |grep 28490

    之后就是进去看这个服务有啥问题了

    问题到这儿就解决了!

    好记性不如烂笔头,最难不过坚持
  • 相关阅读:
    Android编译系统分析四:实战-新增一个产品
    Android编译系统分析三:make完整编译android系统
    Android编译系统分析二:mm编译单个模块
    【python】-文件操作1
    【python】-文件操作
    【python】-集合操作
    【python】-字典的使用
    【python】-字符串常用操作
    【python】-编程练习
    解释型语言与编译型语言
  • 原文地址:https://www.cnblogs.com/dannylinux/p/15783753.html
Copyright © 2020-2023  润新知