基于zookeeper+leveldb的activemq集群

1.为什么选择zookeepr+leveldb,构建activemq主从集群

官网关于主从集群的描述的原文地址为:http://activemq.apache.org/masterslave.html。下面是我的翻译.

activemq有3中主从配置方式

主从类型

必备条件

优点

缺点

Shared File System Master Slave(共享文件系统)

需要一个共享文件系统 例如:SAN

可按需运行多个从节点,并能从故障中自动恢复

需要一个SAN

JDBC Master Slave

需要个共享的数据库

可按需运行多个从节点, 并能从故障中自动恢复

需要一个共享数据库。 性能急剧下降。

Replicated LevelDB Store(复制的leveldb存储)

需要一个ZooKeeper服务

可按需运行多个从节点, 并能从故障中自动恢复。非常的快

需要一个zookeeper服务

官方建议:

  • 如果你使用共享文件系统,例如SAN,我们建议使用 Shared File System Master Slave(共享文件系统主从)。
  • 如果你乐于降低高性能并且使用纯JDBC作为持久化引擎,你可以使用JDBC主从进行持久化。(我公司做过测试,1s也就不到200条,严重受到Mysql性能制约。)
  • 对于那些愿意尝试新技术的人,可以使用复制的leveldb存储。速度与SAN差不多,并且不需要安装高可用的共享文件系统。

注:

SAN(https://baike.baidu.com/item/%E5%AD%98%E5%82%A8%E5%8C%BA%E5%9F%9F%E7%BD%91%E7%BB%9C/6091260?fr=aladdin)主要用于存储量大的工作环境,如ISP、银行等,成本高、标准尚未确定等问题影响了SAN的市场,不过,随着这些用户业务量的增大,SAN也有着广泛的应用前景。

出于成本性能考虑 ,我们使用zookeeper+leveldb实现activemq的主从集群。

zookeepr+leveldb如何工作:

官方原文出处为:http://activemq.apache.org/replicated-leveldb-store.html

使用zookeeper确定集群中的那个节点是主节点。被选举出来的主节点接收客户端连接。其他节点进入从节点模式,连接主节点,同步他们的持久状态。从节点不接收客户端连接。所有持久化操作会复制到从节点中。如果主节点失效,最新更新的从节点将作为主节点。失效的节点恢复后,将作为从节点。

所有需要持久化的消息,都将同步到额定的从节点。

如果你配置的replicas=‘3’,额度节点数为:

(3/2+1)=2,主将本地存储更新,之后等待另外一个从节点更新成功,后才会返回调用方处理成功。

换言之,主与一个额定节点之间是同步更新,其他节点是异步更新。

当一个新的主节点被选举出来后,也需要至少一个额定节点有效,用于找到最近一次更新的节点作为备选主节点。

因此建议至少运行3个activemq,如果一个宕机不会造成服务停机。

配置属性说明

复制的leveldb配置的属性(Replicated LevelDB Store Properties)

下列参数,所有节点必须一致

属性名称

默认值

备注

replicas

3

集群中节点数量。至少需要 (replicas/2)+1 ,节点才不会宕机

securityToken

安全token,所有节点必须一致,用于互相访问

zkAddress

127.0.0.1:2181

zk地址,用","隔开多个地址

zkPassword

连接zk时使用的密码

zkPath

/default

zookeeper上存储主从信息的目录。

zkSessionTimeout

2s

zookeeper多长时间会认为一个节点失效,5.11之后加入

sync

quorum_mem

用于控制同步的区域,以“,”分割多个区域。 可选项有:local_mem, local_disk, remote_mem, remote_disk, quorum_mem, quorum_disk. 如果你配置多个区域,将更强的保证机制将被触发。 例如: local_mem, local_disk 与 local_disk 等同 quorum_mem 与local_mem, remote_mem 等同 quorum_disk  与local_disk, remote_disk等同

下面的配置是每个节点特殊的配置

属性名称

默认值

备注

bind

tcp://0.0.0.0:61619

当该节点成为主节点时,绑定的地址和端口,用于服务复制协议 还支持使用动态端口,只需配置tcp:/ / 0.0.0.0:0

hostname

The host name used to advertise the replication service when this node becomes the master. I f not set it will be automatically determined. 个人认为上述原文的意思为: 当该节点成为主节点时,主机名用于暴露主从服务。 如果不设置,它将自动确定(注意,不设置的话,Spring连接不上)

weight

1

权重 具有最高权重的最新更新的从节点将成为主节点。 给设置,使某些节点更容易成为主节点。

特别注意,该集群的缺点:

不支持,延迟与计划消息(Delay and Schedule Message Delivery.)

配置示例

用例版本:  

  1. apache-activemq-5.9.0-bin.tar.gz下载地址:http://activemq.apache.org/activemq-590-release.html
  2. zookeeper-3.4.11.tar.gz下载地址:http://mirror.bit.edu.cn/apache/zookeeper/
  3. jdk1.8.0_151下载地址http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

节点分配

activemq节点分配

ip地址

activemq的tcp端口号

管理界面端口

192.168.1.8

51511

8161

192.168.1.9

51512

8161

192.168.1.10

51513

8161

zk节点配置

节点IP

端口地址

192.168.1.8

2181

192.168.1.9

2181

192.168.1.10

2181

详细配置说明

JDK配置不做赘述,这里仅仅说明activemq的高可用配置。 zk集群配置  

  • 创建zookeeper目录,我这里在usr下
cd /usr
mkdir zookeeper
  • 上传zk,并解压
cd /usr/zookeeper
# 利用rz命令上传本地tar包到虚拟机
rz
# 若没有rz命令可以先安装
# yum -y install lrzsz
tar -xzvf zookeeper-3.4.11.tar.gz
```
3. 修改zoo.cfg文件配置集群信息(所有几点可以一致)
注意zoo.cfg的server.X,的X对应myid中的值
  •  配置zoo.cfg
cd /usr/zookeeper/zookeeper-3.4.11/conf
# 初次配置,拷贝zoo_sample.cfg
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
# 在zoo.cfg中加入必备配置
server.1=192.168.1.8:2888:3888
server.2=192.168.1.9:2888:3888
server.3=192.168.1.10:2888:3888
  • 配置myid文件标示当前server号  
# 切换到zoo.cfg中配置的dataDir目录,这里是默认的/tmp/zookeeper
cd /tmp/zookeeper  
touch myid
# 这里以192.168.1.8为准
echo 1 > myid
  •  重复上述几步,配置其余zookeeper服务。

zk集群启动已验证

  • 启动

分别启动,3个机子上的zookeeper,使用bin目录下的zkServer.sh start

cd /usr/zookeeper/zookeeper-3.4.11/bin
./zkServer.sh start
  • 查看集群状态

./zkServer.sh status命令 其中的Mode会标识节点状态leader为主节点,follow为从节点。   leader 会显示类似信息:

ZooKeeper JMX enabled by default Using config: /usr/zookeeper/zookeeper-3.4.11-02/bin/../conf/zoo.cfg Mode: leader

follower 会显示类似信息  

ZooKeeper JMX enabled by default Using config: /usr/zookeeper/zookeeper-3.4.11-03/bin/../conf/zoo.cfg Mode: follower

# activemq配置

  • 创建activemq 目录,并上传文件解压。

        方法类似zookeeper安装的步骤。         示例命令如下:

cd /usr
mkdir activemq
cd /usr/activemq
# 利用rz命令上传本地文件到虚拟机
rz
# 若没有rz命令可以先安装
# yum -y install lrzsz
tar -xzvf apache-activemq-5.9.0-bin.tar.gz
  • 进行Leveldb配置

        在conf/activemq.xml中配置replicatedLevelDB         activemq.xml中加入如下配置         本例以192.168.1.8为例,不同的节点其hostname的ip地址不同。、

<persistenceAdapter>
    <replicatedLevelDB
            directory="/usr/activemq/leveldb"
            replicas="3"
            bind="tcp://0.0.0.0:0"
            zkAddress="192.168.1.8:2181,192.168.1.9:2181,192.168.1.10:2181"
            zkPassword=""
            zkPath="/activemq/leveldb-stores"
            hostname="192.168.1.8"
             />
</persistenceAdapter>
  • 修改activemq的端口号

        下边以192.168.1.8位例,按照上边的分配为51511,在conf/activemq.xml中配置

   <transportConnectors>
            <!-- DOS protection, limit concurrent 
connections to 1000 and frame size to 100MB -->
            <transportConnector name="openwire" 
uri="tcp://0.0.0.0:51511?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
.........
<transportConnectors/>
  • client配置,这里以springBoot,maven示例为例

        在pom.xml中加入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 支持spring.activemq.pool.enabled属性 -->
<dependency>  
<groupId>org.apache.activemq</groupId>  
<artifactId>activemq-pool</artifactId>  
</dependency>  
  • 在application.properties配置连接信息如下:
# activemq的配置
spring.activemq.broker-url=failover:(tcp://192.168.1.8:51511,
tcp://192.168.1.9:51512,tcp://192.168.1.10:51513)

spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.pool.enabled=true
spring.activemq.pool.max-connections=50

activemq集群启动,校验

逐个启动使用bin/activemq 命令进行启动 示例如下:

cd /usr/activemq/apache-activemq-5.9.0/bin
./acteivemq start

校验单个节点以./activemq status确定,如果节点运行会显示如下:

[root@localhost bin]# ./activemq status INFO: Using default configuration (you can configure options in one of these file: /etc/default/activemq /root/.activemqrc) INFO: Invoke the following command to create a configuration file ./activemq setup [ /etc/default/activemq | /root/.activemqrc ] INFO: Using java '/usr/java/jdk1.8.0_151/bin/java' ActiveMQ is running (pid '2774')

集群判断利用zookeeper监控工具,ZooInspector.jar,连接192.168.1.8进行查看。

只有主节点才有在address中显示连接,从节点address为null。 注意:ZooInspector.jar 的下载地址: https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

总结

本文描述了zookeeper+leveldb搭建集群的方式。

与zookeeper+leveldb如何运行。

注意,以该模式搭建的主从集群,不能保证延迟与计划消息的同步。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木制robot技术杂谈

懒人神器 autoenv

前言 每次去不同的项目下运行程序都要更改相对应的 Python 环境,那么有什么办法可以省去这繁琐的一步吗?答案肯定是有的,Kenneth Reitz 已经为我...

4026
来自专栏惨绿少年

NFS存储服务部署

第1章 NFS介绍 1.1 NFS服务内容的概述 □ RPC服务知识概念介绍说明,以及RPC服务存在价值(必须理解掌握) □ NFS服务工作原理讲解(必须理解掌...

4450
来自专栏FreeBuf

XSS利用之延长Session生命周期

1.0 话题准备 —— session 和 cookie 的原理 —— ▌1.1 session介绍 ---- 简单介绍:PHP session 变量用于存储...

1919
来自专栏从零开始学 Web 前端

#pragma的一些用法

message 参数:Message参数能够在编译信息输出窗口输出相应的信息,这对于源代码的信息控制特别重要,其使用方法为:

813
来自专栏区块链

Web安全常见漏洞修复建议

看各大发布漏洞的平台,发现众多挖洞大神精彩的漏洞发掘过程,但在修复建议或者修复方案处,给出千奇百怪神一般的回复,故而总结一下修复建议(才疏学浅不算太全敬请谅解,...

2776
来自专栏LinXunFeng的专栏

hexo+github 搭建个人技术博客

1633
来自专栏Django Scrapy

Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息

最简单的一个操作: sudo ufw status(如果你是root,则去掉sudo,ufw status)可检查防火墙的状态,我的返回的是:inactive(...

6556
来自专栏JavaEdge

Spring Security权限框架理论与实战演练1 Spring Security权限管理框架介绍2 Spring Security常用权限拦截器讲解

本章首先让大家学习到Spring Security权限框架的架构,之后大家可以学习到Spring Security权限框架的核心概念,包括拦截器、数据库管理、缓...

2072
来自专栏安恒网络空间安全讲武堂

翻译 | Linux利用动态链接共享对象库提权

Linux利用动态链接共享对象库提权 RPATH和弱文件权限会导致系统的损害。Linux应用程序可以利用动态链接的共享对象库(我们从现在开始称它们为共享库)来提...

2295
来自专栏云计算教程系列

如何在Ubuntu 16.04上安装Bro

Bro是一个开源网络分析框架和安全监控应用程序。它将OSSEC和osquery的一些最佳功能集成到一个包中。

1985

扫码关注云+社区