文档章节

zookeeper+activemq+levelDB集群消息中间件搭建

 王华超
发布于 2016/07/15 16:09
字数 2201
阅读 26
收藏 0
点赞 0
评论 0

方法/步骤

  1. 下载activemq 和zookeeper,levelDB会activemq自带有,所以不需要下载,把下载好的压缩包发送到所有的linux上,(我这里是把下载好的压缩包放在当前window下的tomcat,root目录下,可在linux终端上使用命令:curl -o activeMq.tar.gz http://10.0.10.37:8080/apache-linux-activemq-5.11.1-bin.tar.gz把activemq下载下来)关键就是配置好zookeeper集群和activemq集群

  2. 登录linux系统,在某个目录下新建文件activemq,使用curl -o activeMQ.tar.gz  http://10.0.10.37:8080/apache-linux-activemq-5.11.1-bin.tar.gz 下载activeMQ.tar.gz,相应的把zookeeper.tar.gz下载到activemq目录下,分别解压这两个文件放在activeMQ文件夹下,和zookeeper文件夹下。

  3. 当linux系统的所有的压缩包都解压好了,所有的文件都准备好了, zookeeper比如在目录/home/activemq/zookeeper目录下,activemq在/home/activemq/activemq目录下,那么我们先来配置zookeeper,在zookeeper/conf目录下找到zoo_sample.cfg文件,使用命令cp  -f zoo_sample.cfg zoo.cfg 复制成zoo.cfg文件,使用命令vi zoo.cfg  再按键盘I,进入编辑状态,修改zoo.cfg内容为

    # The number of milliseconds of each tick

    tickTime=2000

    # The number of ticks that the initial

    # synchronization phase can take

    initLimit=10

    # The number of ticks that can pass between

    # sending a request and getting an acknowledgement

    syncLimit=5

    # the directory where the snapshot is stored.

    # the port at which the clients will connect

    clientPort=2181

    # the directory where the snapshot is stored.

    dataDir=/home/ activemq/zookeeper/data/data

    # the port at which the clients will connect

    dataLogDir=/home/activemq/zookeeper/data/log

    # add diffenrent server

    这里有dataDir=/home/ activemq/zookeeper/data/data和

    dataLogDir=/home/activemq/zookeeper/data/log

    如果没有这些目录,我们需要新建这些目录

             建好目录之后,在dataDir目录下,新建myid文件,使用命令:touch  myid 新建文件,内容为当前机子ip所对应的zoo.cfg中server.x中的x,比如:按照上面配置zoo.cfg当前电脑ip为10.0.88.12,则myid的内容就为3,这里注意:myid文件中不能留任何空格,空行,zoo.cfg文件中的注释#与注释内容之间需要加一个空格,不是注释的,前面不能留空格和不能重写相同的变量。

  4. 上面配置完之后,需要配置一下环境变量,方便操作,先使用命令才cd /进入根目录,使用root权限,使用vi /etc/profile,编辑profile文件,在PATH面前添加配置如下:

    export ZOOKEEPER=/home/activemq/zookeeper

    export PATH=$PATH:$ZOOKEEPER/bin:$ZOOKEEPER/conf

    这里注意conf目录也要添加进来,要不可能会报错的

    配置好之后,使用命令:source  /etc/profile 使配置生效。

  5. 配置好上述之后,接下来就是测试了

    使用zkServer.sh start 命令启动zookeeper,中途可能会出现一些错误,当出现错误或者查看zkServer.sh status命令的时候,不正常,可以查看dataDir或者dataLogDir目录下的zookeeper.out文件,里面有相应的启动记录,启动每个电脑的zookeeper服务器时,使用zkServer.sh status 查看状态,如果如图有出现红圈中的mode字样说明配置成功了:

    zookeeper+activemq+levelDB集群消息中间件搭建

  6. 在配置过程中,我遇到的问题,有端口被占用的,弄了好久,后来还是解决了,端口占用的进程名QuorumPeerMain这也是zookeeper进程名称,使用命令

    ps -ef | grep QuorumPeerMain 查出进程ID,使用kill -9  进程ID  结束进程。

    Zookeeper配置大概就这些了

     

    下面我们配置activemq

    配置activemq比较简单

     自从activemq5.9.0开始,activemq的集群实现方式取消了传统的Master-Slave方式,增加了基于zookeeper+leveldb的实现方式,其他两种方式:目录共享和数据库共享依然存在。本文主要阐述基于zookeeper和leveldb搭建activemq集群,这里需要特别提醒,本文实现的集群仅提供主备功能,避免单点故障,没有负载均衡功能。

    在conf目录下找到activemq.xml 把里面内容的

    <kahaDB directory="${activemq.data}/kahadb"/>

    替换成

    <replicatedLevelDB

     

          directory="${activemq.data}/leveldb"

     

          replicas="3"

     

          bind="tcp://0.0.0.0:0"

     

          zkAddress="10.0.88.10:2181,10.0.88.11:2181,10.0.88.12:2181"

     

         <!-- zkPassword="password"-->

     

     hostname="10.0.88.10"

     

          sync="local_disk"

     

          zkPath="/activemq/leveldb-stores"

     

          />

    这里的hostname要写当前机子ip

    接下来配置环境变量,方便操作。由于我的系统是64位的,所以我在profile后新添加一条语句:

    export  $PATH:/home/ activemq /activemq /bin/linux-x86-64

    不同的位数系统,选择不同的activemq,如果是32位的好像是

    export  $PATH:/home/ activemq /activemq /bin/linux-x86-32

    那么配置完成了,使用source  /etc/profile使命令生效

    activemq start 启动

    在这里要先启动zookeeper 在启动activemq

    配置好了,测试一下,使用命令:http://10.0.88.10:8161/admin/index.jsp如果能运行,说明activemq启动成功,如果把10.0.88.10上的activemq关闭了,这个链接还可以访问,说明配置已经成功。

  7. 注意事项:如果activemq启动出错的,我们可以在启动目录下的wrapper.log文件查看哪里出错。

    配置注意事项

    1、  zoo.cfg文档开头和结尾不能留空格

    2、  myid前后不能留换行和空格

    3、  zookeeper 进程名为QuorumPeerMain

    4、  zoo.cfg配置文件写法需要注意,不能重写同一个变量

    activemq在不同权限下可以启动两个不同的activemq服务,如果某个机子上有activemq关闭了,客户端还可以访问,说明还有一个activemq在启动

    优化配置待续:

    修改activemq文件改变内存ACTIVEMQ_OPTS_MEMORY="-Xms256M -Xmx384M -XX:PermSize=256M -XX:MaxPermSize=384M"

    注意的问题:

    1、         通过failover方式进行连接,多个AMQ实例地址使用英文逗号隔开,当某个实例断开时会自动重连,但如果所有实例都失效,failover默认情况下会无限期的等待下去,不会有任何提示

    2、        不要频繁的建立和关闭连接JMS使用长连接方式,一个程序,只要和JMS服务器保持一个连接就可以了,不要频繁的建立和关闭连接。频繁的建立和关闭连接,对程序的性能影响还是很大的。这一点和jdbc还是不太一样的。

    3、      JMS的Connection的start()和stop()方法代价很高,不能经常调用。我们试用的时候,写了个jms的connection pool,每次将connection取出pool时调用start()方法,归还时调用stop()方法,然而后来用jprofiler发现,一般的 cpu时间都耗在了这两个方法上

  8. 代码:activemq.xml

    <!--

        Licensed to the Apache Software Foundation (ASF) under one or more

        contributor license agreements.  See the NOTICE file distributed with

        this work for additional information regarding copyright ownership.

        The ASF licenses this file to You under the Apache License, Version 2.0

        (the "License"); you may not use this file except in compliance with

        the License.  You may obtain a copy of the License at

     

        http://www.apache.org/licenses/LICENSE-2.0

     

        Unless required by applicable law or agreed to in writing, software

        distributed under the License is distributed on an "AS IS" BASIS,

        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

        See the License for the specific language governing permissions and

        limitations under the License.

    -->

    <!-- START SNIPPET: example -->

    <beans

      xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

      http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

     

        <!-- Allows us to use system properties as variables in this configuration file -->

        <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

            <property name="locations">

                <value>file:${activemq.conf}/credentials.properties</value>

            </property>

        </bean>

     

       <!-- Allows accessing the server log -->

        <bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery"

              lazy-init="false" scope="singleton"

              init-method="start" destroy-method="stop">

        </bean>

     

        <!--

            The <broker> element is used to configure the ActiveMQ broker.

        -->

            

        <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" persistent="true" >

            <destinationPolicy   >

                <policyMap>

                  <policyEntries>

                                 

                    <policyEntry topic=">" topicPrefetch="10000" producerFlowControl="false" useCache="true" >

                        <!-- The constantPendingMessageLimitStrategy is used to prevent

                             slow topic consumers to block producers and affect other consumers

                             by limiting the number of messages that are retained

                             For more information, see:

     

                             http://activemq.apache.org/slow-consumer-handling.html

     

                        -->

                                                   <!-- http://www.csdn123.com/html/exception/704/704841_704836_704834.htm-->

                                                   <pendingSubscriberPolicy> 

                        <vmCursor /> 

                      </pendingSubscriberPolicy>

                                                   <pendingDurableSubscriberPolicy>

                                                   <storeDurableSubscriberCursor/> 

                                                   </pendingDurableSubscriberPolicy> 

                     <!-- <pendingMessageLimitStrategy>

                        <constantPendingMessageLimitStrategy limit="1000"/>

                      </pendingMessageLimitStrategy>-->

                    </policyEntry>

                                         <policyEntry queue=">" producerFlowControl="true" queuePrefetch="10000" memoryLimit="100mb" useCache="true">

                                         <pendingQueuePolicy> 

                        <vmQueueCursor/> 

                      </pendingQueuePolicy>

                                          

                                           <pendingDurableSubscriberPolicy>

                                                   <storeDurableSubscriberCursor/> 

                                                   </pendingDurableSubscriberPolicy> 

     

                                                   <pendingQueuePolicy> 

                                                   <storeCursor /> 

                                         </pendingQueuePolicy> 

     

                                         <slowConsumerStrategy> 

                                <abortSlowConsumerStrategy  abortConnection="false"/><!-- 30second --> 

                                </slowConsumerStrategy>

                                         </policyEntry>

                  </policyEntries>

                </policyMap>

            </destinationPolicy>

    <networkConnectors>

          <networkConnector uri="static:(tcp://10.0.88.10:61616,tcp://10.0.88.11:61616,tcp://10.0.88.12:61616)"/>

    </networkConnectors>

     

     

            <!--

                The managementContext is used to configure how ActiveMQ is exposed in

                JMX. By default, ActiveMQ uses the MBean server that is started by

                the JVM. For more information, see:

     

                http://activemq.apache.org/jmx.html

            -->

            <managementContext>

                <managementContext createConnector="false"/>

            </managementContext>

     

            <!--

                Configure message persistence for the broker. The default persistence

                mechanism is the KahaDB store (identified by the kahaDB tag).

                For more information, see:

     

                http://activemq.apache.org/persistence.html

            -->

            <persistenceAdapter>

              <replicatedLevelDB

     

          directory="${activemq.data}/leveldb"

     

          replicas="3"

     

          bind="tcp://0.0.0.0:0"

     

          zkAddress="10.0.88.10:2181,10.0.88.11:2181,10.0.88.12:2181"

     

          hostname="10.0.88.12"

     

          sync="local_disk"

     

          zkPath="/activemq/leveldb-stores"

     

          />

                               

            </persistenceAdapter>

     

     

              <!--

                The systemUsage controls the maximum amount of space the broker will

                use before disabling caching and/or slowing down producers. For more information, see:

                http://activemq.apache.org/producer-flow-control.html

              -->

              <systemUsage>

                <systemUsage>

                    <memoryUsage>

                        <memoryUsage percentOfJvmHeap="70" />

                    </memoryUsage>

                    <storeUsage>

                        <storeUsage limit="100 gb"/>

                    </storeUsage>

                    <tempUsage>

                        <tempUsage limit="50 gb"/>

                    </tempUsage>

                </systemUsage>

            </systemUsage>

     

            <!--

                The transport connectors expose ActiveMQ over a given protocol to

                clients and other brokers. For more information, see:

     

                http://activemq.apache.org/configuring-transports.html

            -->

            <transportConnectors>

                <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->

                <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=10000&amp;wireFormat.maxFrameSize=1048576000"/>

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

     

            <!-- destroy the spring context on shutdown to stop jetty -->

            <shutdownHooks>

                <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />

            </shutdownHooks>

     

        </broker>

     

        <!--

            Enable web consoles, REST and Ajax APIs and demos

            The web consoles requires by default login, you can disable this in the jetty.xml file

     

            Take a look at ${ACTIVEMQ_HOME}/conf/jetty.xml for more details

        -->

            

        <import resource="jetty.xml"/>

     

    </beans>

本文转载自:

共有 人打赏支持
粉丝 4
博文 10
码字总数 1601
作品 0
朝阳
高级程序员
(一)RocketMQ初步认识

rocketMQ是一个消息中间件。其产生的动机在github官方文档有如下阐述: 在早期阶段,我们在ActiveMQ 5.x(小于5.3)的基础上构建了分布式消息传递中间件。我们的国际业务使用它来进行异步通信...

萧沐垚 ⋅ 2016/11/28 ⋅ 0

单台服务器部署 Zookeeper 伪集群服务及 kafka 消息中间件服务

在开发环境中,为减少服务器成本和提高开发效率,通常在一台测试服务器部署各种服务,使用不同的本地 IP 和不同端口号将涉及到集群的服务往往跑在一台机器上模拟集群,在这里我们称做伪集群。...

hww_面条酱 ⋅ 01/10 ⋅ 0

消息中间件(Kafka/RabbitMQ)收录集

本篇主要整理工作中遇到的一些消息中间件的相关知识,包括Kafka, RabbitMQ, RocketMQ, ActiveMQ等,不排除收录其他消息中间件的可能。 这里会持续收录相关知识,包括安装、部署、使用示例、监...

u013256816 ⋅ 2017/01/26 ⋅ 0

KAFKA集群搭建

一、简介 Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloud...

Jx战壕 ⋅ 2017/06/12 ⋅ 0

kafka实时日志处理

1.概述 在《Kafka实战-简单示例》 一文中给大家介绍来Kafka的简单示例,演示了如何编写Kafka的代码去生产数据和消费数据,今天给大家介绍如何去整合一个完整的项目,本篇博客我打 算为大家介...

lgscofield ⋅ 2015/07/29 ⋅ 0

MQ-RabbitMq部署安装配置

环境准备 本次实验使用的是VMvare虚拟机。详情如下 hostname: node1.server ip地址:192.168.0.150 网卡:eth0,eth1 系统及硬件:CentOS 7.2 内存2G,硬盘50G 一、 什么是RabbitMq 消息队列又...

linuxzkq ⋅ 2016/10/31 ⋅ 0

消息中间件—RabbitMQ(集群原理与搭建篇)

摘要:实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理 一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确性那么在本地环境或者测试...

癫狂侠 ⋅ 05/25 ⋅ 0

flume+kafka+storm运行实例

概述 在基于Hadoop平台的很多应用场景中,我们需要对数据进行离线和实时分析,离线分析可以很容易地借助于Hive或者mr来实现统计分析,但是对于实时的需求Hive和mr就不合适了。实时应用场景可...

张欢19933 ⋅ 2016/02/04 ⋅ 0

架构师必备词汇和知识点

01 高可用 负载均衡(负载均衡算法) 反向代理 服务隔离 服务限流 服务降级(自动优雅降级) 失效转移 超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时) 回滚机...

t4i2b10X4c22nF6A ⋅ 2017/11/24 ⋅ 0

消息中间件—RabbitMQ(集群监控篇1)

摘要:任何没有监控的系统上线,一旦在生产环境发生故障,那么排查和修复问题的及时性将无法得到保证 一、为何要对消息中间件进行监控? 上线的业务系统需要监控,然而诸如消息队列、数据库、...

癫狂侠 ⋅ 05/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java NIO之字符集

1 字符集和编解码的概念 首先,解释一下什么是字符集。顾名思义,就是字符的集合。它的初衷是把现实世界的符号映射为计算机可以理解的字节。比如我创造一个字符集,叫做sex字符集,就包含两个...

士别三日 ⋅ 39分钟前 ⋅ 0

Spring Bean基础

1、Bean之间引用 <!--如果Bean配置在同一个XML文件中,使用local引用--><ref bean="someBean"/><!--如果Bean配置在不同的XML文件中,使用ref引用--><ref local="someBean"/> 其实两种......

霍淇滨 ⋅ 44分钟前 ⋅ 0

05、基于Consul+Upsync+Nginx实现动态负载均衡

1、Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/local/srcwget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip 解压consu......

北岩 ⋅ 47分钟前 ⋅ 0

Webpack 4 api 了解与使用

webpack 最近升级到了 v4.5+版 01 官方不再支持 node4 以下版本 官方不再支持 node4 以下版本官方不再支持 node4 以下的版本,所以如果你的node版本太低,先开始升级node吧!话说node10 ...

NDweb ⋅ 56分钟前 ⋅ 0

使用nodeJs安装Vue-cli

Vue脚手架就是一个Vue框架开发环境 脚手架的意思是帮你快速开始一个vue的项目,也就是给你一套vue的结构,包含基础的依赖库,只需要 npm install就可以安装,让我们不需要为了编辑或者一些其...

木筏笔歆 ⋅ 今天 ⋅ 0

【微信小程序开发实战】0x00.开发前准备工作

写在开始 本人资深后端码农一枚,近期项目需求,接触到了微信小程序,将学习过程整理成文分享给小伙伴们,由于是边学边整理难免有表述不对的地方,望大家及时指正,感谢。 本人微信号: dream...

dreamans ⋅ 今天 ⋅ 0

linux redis的安装和php7下安装redis扩展

安装redis服务器 (1)下载安装包: $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz (2)编译程序: $ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17 $ make $ cd src &&......

concat ⋅ 今天 ⋅ 0

Guava EventBus源码解析

一、EventBus使用场景示例 Guava EventBus是事件发布/订阅框架,采用观察者模式,通过解耦发布者和订阅者简化事件(消息)的传递。这有点像简化版的MQ,除去了Broker,由EventBus托管了订阅&...

SaintTinyBoy ⋅ 今天 ⋅ 0

http怎么做自动跳转https

Apache 版本 如果需要整站跳转,则在网站的配置文件的<Directory>标签内,键入以下内容: RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)?$ https://%{SERVER_NAME......

Helios51 ⋅ 今天 ⋅ 0

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部