ACTIVEMQ高可用均衡负载集群配置

  1. 环境

    • zookeeper-3.4.10

    • jdk1.8.0_201

    • apache-activemq-5.15.8

    • linux centos7

    • 架构实现:3台zookeeper 分别布置在3台linux服务器上,每台服务器安装2台 Activemq服务

  2. Zookeeper、jdk、activemq 环境变量配置

    • 添加如下内容:(安装目录根据实际情况改变)
      [root@localhost ~]# vi /etc/profile
      
      export JAVA_HOME=/opt/jdk1.8.0_201
      export ZOOKEEPER_HOME=/opt/zookeeper-3.4.10
      export ACTIVEMQ_HOME=/opt/apache-activemq-5.15.8
      export JRE_HOME=${JAVA_HOME}/jre
      export CLASSPATH=.{JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
      export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${ZOOKEEPER_HOME}/bin:${ACTIVEMQ_HOME}/bin
      export PATH=$PATH:${JAVA_PATH}
      
  3. 配置第一台zookeeper,编辑ZK安装目录中conf目录下的zoo.cfg文件(复制一份zoo.simple.cfg改名为zoo.cfg)

    • 重点关注标红处配置
      [root@localhost zookeeper]# vi conf/zoo.cfg
      tickTime=2000
      initLimit=10
      syncLimit=5
      clientPort=2181
      dataDir=/opt/zookeeper-3.4.10/data(此目录不能写错!!!!)
      dataLogDir=/opt/zookeeper-3.4.10/logs
      server.1=192.168.182.2:2888:3888(对应服务器文件myid内容写入1)
      server.2=192.168.182.3:2888:3888(对应服务器文件myid内容写入2)
      server.3=192.168.182.4:2888:3888(对应服务器文件myid内容写入3)
      
  4. 然后在data目录下创建myid文件然后内容写入1保存退出。(第一台服务器写入1,第二台写入2,第三台写入3,与步骤3处server.X X对应)

  5. 分别启动bin目录下 zkServer.sh 服务,(防火墙端口设置 2181 2888 3888 zookeeper集群端口开放)

    • 启动sh zkServer.sh start
    • 查看当前zookeeper状态sh zkServer.sh status
  6. 正常启动,三台zookeeper服务,应该1 master 2 follwer

  7. 开始部署activemq服务
    集群1
    192.168.182.2 activemq1
    192.168.182.3 activemq1
    192.168.182.4 activemq1
    集群2
    192.168.182.2 activemq2
    192.168.182.3 activemq2
    192.168.182.4 activemq2

    以服务器192.168.182.2上两台active为例:
    

    在这里插入图片描述
    进入conf目录,修改activemq.xml

    • 主要修改broker节点

      <broker xmlns="http://activemq.apache.org/schema/core" brokerName="activemq1" dataDirectory="${activemq.data}">
      
        同一集群的三台activemq brokerName必须统一,不同集群的brokerName需要修改
      
    • 添加节点:networkConnectors,加入activemq内部通信配置 uri 配置集群2三台acticemq的服务地址+端口

      <networkConnectors>
                  <networkConnector uri="static:(tcp://192.168.182.2:51516,tcp://192.168.182.3:51516,tcp://192.168.182.4:51516)"  duplex="true"/>
              </networkConnectors>
      
    • 修改节点:persistenceAdapter

      <persistenceAdapter>
                  <!--<kahaDB directory="${activemq.data}/kahadb"/> -->(注释掉默认的持久化方法)
      	<replicatedLevelDB directory="${activemq.data}/leveldb" replicas="3" bind="tcp://0.0.0.0:51515" zkAddress="192.168.182.2:2181,192.168.182.3:2181,192.168.182.4:2181" hostname="192.168.182.2" zkPath="/activemq/leveldb-stores"/>  </persistenceAdapter>
      
        	directory: 存储数据的路径(集群1与集群2的directory必须不同)
        	replicas:集群中的节点数【(replicas/2)+1公式表示集群中至少要正常运行的服务数量】,3台集群那么允许1台宕机, 另外两台要正常运行  
        	 bind:当该节点成为master后,它将绑定已配置的地址和端口来为复制协议提供服务。还支持使用动态端口。只需使用tcp://0.0.0.0:0进行配置即可,默认端口为61616。 
        	zkAddress:ZK的ip和port, 如果是集群,则用逗号隔开(这里作为简单示例ZooKeeper配置为单点, 这样已经适用于大多数环境了, 集群也就多几个配置)  
        	zkPah:ZK选举信息交换的存贮路径,启动服务后actimvemq会到zookeeper上注册生成此路径   (集群1与集群2的zkPah必须不同)
        	hostname: ActiveMQ所在主机的IP
      
    • 修改节点:transportConnectors

      <transportConnectors>
           <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
           <transportConnector name="openwire" uri="tcp://192.168.182.2:51515?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>
      
        只需修改name为openwire 的tcp 请求uri值,改为本机ip 这里设置本台activemq的服务端口号为51515,其余的请求方式可以注释掉
      
    • 在apache-activemq-5.15.8目录下复制一份conf,命名为conf2

    • 进入conf2目录,修改/conf2/jetty.xml文件里jettyPort端口为8162,默认为8161(activemq1已经占用,这里需要修改)

      <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>
      
    • 修改 /conf2/activemq.xml 文件

      • 修改broker 节点属性brokerName, 与集群1brokerName区别,例如 activemq2
      • 修改networkConnector 节点里 uri属性,配置为集群1的三台activemq服务地址+端口
      • 修改节点:persistenceAdapter,修改bind端口号为51516;directory 目录 和zkPath 目录 与集群1 区别
        <persistenceAdapter>
         <!--<kahaDB directory="${activemq.data}/kahadb"/> -->(注释掉默认的持久化方法)
        <replicatedLevelDB directory="${activemq.data}/leveldb2" replicas="3" bind="tcp://0.0.0.0:51516" zkAddress="192.168.182.2:2181,192.168.182.3:2181,192.168.182.4:2181" hostname="192.168.182.2" zkPath="/activemq/leveldb-stores2"/>  </persistenceAdapter>
        
      • 修改节点:transportConnectors
        修改tcp 请求uri值,改为本机ip +端口号。这里设置本台activemq的服务端口号为51516与另一台activemq服务区别
    • 进入/bin目录,复制copy 文件activemq env 命名 activemq2 env2

    • 修改env2文件,端口号改为51516,与/conf2/activemq.xml 文件下端口一致

      if [ -z "$ACTIVEMQ_QUEUEMANAGERURL" ]; then
          		ACTIVEMQ_QUEUEMANAGERURL="--amqurl tcp://localhost:51516"
      	Fi
      
    • 修改activemq2文件

      if [ -z "$ACTIVEMQ_CONFIG_DIR" ] ; then
            	  	ACTIVEMQ_CONF="$ACTIVEMQ_BASE/conf2"
         	 else
             	 	ACTIVEMQ_CONF="$ACTIVEMQ_CONFIG_DIR"
          	Fi
      
        修改ACTIVEMQ_CONF="$ACTIVEMQ_BASE/conf2" 这里目录改为conf2
      
      if [ -z "$ACTIVEMQ_PIDFILE" ]; then
        		ACTIVEMQ_PIDFILE="$ACTIVEMQ_DATA/activemq2.pid"
      	Fi
      
        修改这里ACTIVEMQ_PIDFILE的值,默认为activemq.pid ,改为activemq2.pid
      
      ACTIVEMQ_CONFIGS="/etc/default/activemq $HOME/.activemqrc $ACTIVEMQ_HOME/bin/env2"
      
        修改这里ACTIVEMQ_CONFIGS的值,默认为bin/env 这里改为bin/env2
      
    • 设置防火墙端口号 51515 51516 8161 8162

    • 按照相同方式配置另外两台服务器

    • bin目录下分别启动3台服务器的6台activemq目录

      • 启动集群1MQsh activemq start
      • 启动集群2MQsh activemq2 start
    • 登录activemq控制台
      集群1:http://192.168.182.2:8161http://192.168.182.3:8161http://192.168.182.4:8161
      集群2:http://192.168.182.2:8162http://192.168.182.3:8162http://192.168.182.4:8162
      两个集群中应该只有1台master服务能进入控制台,其余都是slave服务待机

  • 客服端配置链接池:
<property name="brokerURL" value="failover:(tcp://192.168.182.2:51515,tcp://192.168.182.3:51515,tcp://192.168.182.4:51515,tcp://192.168.182.2:51516,tcp://192.168.182.3:51516,tcp://192.168.182.4:51516)?randomize=true"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值