• activemq 高可用集群部署


    环境准备

    服务器IP

    服务器 IP 域名
    mysql-130 192.168.86.130
    zk-100 192.168.86.100 zk-100.com
    zk-101 192.168.86.101 zk-101.com
    zk-102 192.168.86.102 zk-102.com
    activemq-155 192.168.86.155 activemq-155.com
    activemq-156 192.168.86.156 activemq-156.com
    activemq-157 192.168.86.157 activemq-157.com

    基于 jdbc 的集群方案

    img

    1. 不特殊说明情况下,以下所有操作均在三台 activemq 服务器上操作

    2. 上传安装包到服务器的 /opt 目录

    3. 解压安装包,并且移动到 /usr/local 目录

      cd /opt
      tar -zxvf apache-activemq-5.16.2-bin.tar.gz
      mv apache-activemq-5.16.2 /usr/local/apache-activemq-5.16.2
      
    4. 修改 activemq.xml 配置

      cd /usr/local/apache-activemq-5.16.2/conf
      vi activemq.xml
      
      1. 在 节点后面增加数据源配置,内容如下:

        	<!-- 这里使用了activemq 自带的连接池,可以根据需要配置为其它连接池,但注意要在 /usr/local/apache-activemq-5.16.2/lib 引入相关连接池的包 -->
        	  <bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
                <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        	    <property name="url" value="jdbc:mysql://192.168.86.130/activemq?relaxAutoCommit=true"/>
        	    <property name="username" value="root"/>
        	    <property name="password" value="root"/>
                <property name="maxTotal" value="200"/>
        	    <property name="poolPreparedStatements" value="true"/>
        	  </bean>
        
      2. 修改 里面的内容,修改之后内容如下:

        <persistenceAdapter>
            <jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds" /> 
        </persistenceAdapter>
        
    5. 修改 jetty.xml 以便其它机器可以访问到 8161 前台管理界面

      vi /usr/local/apache-activemq-5.16.2/conf/jetty.xml
      找到 <bean id="jettyPort" ... 的节点,修改 host 参数从 127.0.0.1到 0.0.0.0 
      
    6. 上传 mysql-connector-java-8.0.20.jar 到 /usr/local/apache-activemq-5.16.2/lib 目录下 (如果使用了其它连接池,则一并上传)

    7. 在数据库中创建一个 activemq 的数据库

      create database activemq
      
    8. 启动

      cd /usr/local/apache-activemq-5.16.2/bin
      ./activemq start
      
    9. 查看数据库是否自动生成了3张表

      ​ activemq_acks:订阅表

      ​ activemq_lock:用于记录当前哪台机器获取到了锁

      ​ activemq_msgs:持久化消息的存放表

    10. 查看日志

      cd /usr/local/apache-activemq-5.16.2/data
      tail -1000 activemq.log
      

      会发现除了master 之外,其它的两台 slave 都在尝试获取数据库锁

      image-20210601171200124

    11. 访问前台管理界面,会发现只有 master可以正常访问,其余两台 slave均无法访问

    12. 此时关闭 master,两台 slave 中一台会获取到锁,进而成为 master

    基于 zookeeper + 可复制的 LevelDB 的集群部署

    replicated-leveldb-store

    1. 不特殊说明情况下,以下所有操作均在三台 activemq 服务器上操作

    2. 上传安装包到服务器的 /opt 目录

    3. 解压安装包,并且移动到 /usr/local 目录

      cd /opt
      tar -zxvf apache-activemq-5.16.2-bin.tar.gz
      mv apache-activemq-5.16.2 /usr/local/apache-activemq-5.16.2
      
    4. 修改 activemq.xml 配置

      cd /usr/local/apache-activemq-5.16.2/conf
      vi activemq.xml
      
      1. 修改 节点的 brokerName属性,三台机器需要完全一样

      2. 修改 里面的内容,每台机器的 hostname 需要修改为自己的 ,修改之后内容如下:

         <!-- directory: 数据文件存放目录; replicas: 集群中节点数量,不能少于3; bind: 当此节点成为主节点时,它将绑定配置的地址和端口来为复制协议提供服务,支持动态端口;hostname:当此节点成为主节点时用于通告复制服务的主机名,支持自动获取 --> 
         <persistenceAdapter>
            <replicatedLevelDB
              directory="${activemq.data}"
              replicas="3"
              bind="tcp://0.0.0.0:0"
              zkAddress="zk-100.com:2181,zk-101.com:2181,zk-102.com:2181"
              zkPath="/activemq/leveldb-stores"
              hostname="activemq-155.com"
              />
          </persistenceAdapter>
        
      3. 修改 jetty.xml 以便其它机器可以访问到 8161 前台管理界面

        vi /usr/local/apache-activemq-5.16.2/conf/jetty.xml
        找到 <bean id="jettyPort" ... 的节点,修改 host 参数从 127.0.0.1到 0.0.0.0 
        
    5. 为了解决后续集群启动之后关闭之后出现的报错,可以先上传 failureaccess-1.0.1 jar包 到 /usr/local/apache-activemq-5.16.2/lib 目录下,可以等到后面真正报错的时候再执行

    6. 启动

      cd /usr/local/apache-activemq-5.16.2/bin
      ./activemq start
      
    7. 查看日志

      cd /usr/local/apache-activemq-5.16.2/data
      tail -1000 activemq.log
      

      ​ 如果只启动了一台的话,日志如下:

      image-20210601173457086

      ​ 如果启动两台到三台,会发现 slave 会从 master 中同步数据:

      image-20210601180131176

    8. 查看 zookeeper

      image-20210601183018263前台管理界面也只有 master 机器能够访问,关闭 master 之后,其中一个 slave 变为 master

      image-20210601183130487

    常见问题

    1. 基于 jdbc 的集群启动时,抛出了 Cannot create PoolableConnectionFactory 以下异常:

      image-20210601164846415

      解决:在mysql 数据库中执行以下操作

      set time_zone=SYSTEM;
      set global time_zone='+8:00';
      flush privileges;
      
    2. 基于 zookeeper 的集群,master 宕机之后,集群启动报错:java.io.IOException:com/google/common/util/concurrent/internal/InternalFutureFailureAccess

      解决:上传 failureaccess-1.0.1 jar包

    -- 整理于网络,加上自己的理解,大家一起学习,进步就好
  • 相关阅读:
    Using Change Management and Change Control Within a Project
    swift3.0 label改变行间距
    swift清理缓存
    Alamofire的get请求,post请求,以及上传字典
    swift跳转时隐藏tabbar,跳回时显示
    swift获取当前的Version
    swift回收键盘
    OC中常用的设计模式
    关于iOS多线程
    理解 : UDID、UUID、IDFA、IDFV
  • 原文地址:https://www.cnblogs.com/shulipeng/p/14840324.html
Copyright © 2020-2023  润新知