首页 文章 精选 留言 我的

精选列表

搜索[安装],共10000篇文章
优秀的个人博客,低调大师

分布式架构高可用架构篇_activemq高可用集群(zookeeper+leveldb)安装、配置、高可用测试

样例视频教程可参考架构实战29-41节: http://www.roncoo.com/course/view/85d6008fe77c4199b0cdd2885eaeee53 从ActiveMQ 5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式,增加了基于ZooKeeper + LevelDB的Master-Slave实现方式,其他两种方式目录共享和数据库共享依然存在。 三种集群方式的对比: (1)基于共享文件系统(KahaDB,默认): <persistenceAdapter> <kahaDB directory="${activemq.data}/kahadb"/> </persistenceAdapter> (2)基于JDBC: <bean id="MySQL-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/amq?relaxAutoCommit=true"/> <property name="username" value="root"/> <property name="password" value="root"/> <property name="maxActive" value="20"/> <property name="poolPreparedStatements" value="true"/> </bean> <persistenceAdapter> <jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds" createTablesOnStartup="false"/> </persistenceAdapter> (3)基于可复制的LevelDB(本文采用这种集群方式): LevelDB是Google开发的一套用于持久化数据的高性能类库。LevelDB并不是一种服务,用户需要自行实现Server。是单进程的服务,能够处理十亿级别规模Key-Value型数据,占用内存小。 <persistenceAdapter> <replicatedLevelDB directory="${activemq.data}/leveldb" replicas="3" bind="tcp://0.0.0.0:62621" zkAddress="localhost:2181,localhost:2182,localhost:2183" hostname="localhost" zkPath="/activemq/leveldb-stores"/> </persistenceAdapter> 本文主要讲解基于ZooKeeper和LevelDB搭建ActiveMQ集群。集群仅提供主备方式的高可用集 群功能,避免单点故障,没有负载均衡功能。 官方文档:http://activemq.apache.org/replicated-leveldb-store.html 集群原理图: 高可用的原理:使用ZooKeeper(集群)注册所有的ActiveMQ Broker。只有其中的一个Broker可以提供 服务,被视为Master,其他的Broker处于待机状态,被视为Slave。如果Master因故障而不能提供服务, ZooKeeper会从Slave中选举出一个Broker充当Master。 Slave连接Master并同步他们的存储状态,Slave不接受客户端连接。所有的存储操作都将被复制到 连接至Master的Slaves。如果Master宕了,得到了最新更新的Slave会成为Master。故障节点在恢复后 会重新加入到集群中并连接Master进入Slave模式。 所有需要同步的disk的消息操作都将等待存储状态被复制到其他法定节点的操作完成才能完成。所以,如果你配置了replicas=3,那么法定大小是(3/2)+1=2。Master将会存储并更新然后等待(2-1)=1个Slave存储和更新完成,才汇报success。至于为什么是2-1,熟悉Zookeeper的应该知道,有一个node要作为观擦者存在。当一个新的Master被选中,你需要至少保障一个法定node在线以能够找到拥有最新 状态的node。这个node可以成为新的Master。因此,推荐运行至少3个replica nodes,以防止一个node失败了,服务中断。(原理与ZooKeeper集群的高可用实现方式类似) 1、ActiveMQ集群部署规划: 环境:CentOS 6.6 x64、JDK7 版本:ActiveMQ 5.11.1 ZooKeeper集群环境:192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183 2、防火墙打开对应的端口 edu-zk-01: -A INPUT -m state --state NEW -m tcp -p tcp --dport 8161 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 51511 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 62621 -j ACCEPT edu-zk-02: -A INPUT -m state --state NEW -m tcp -p tcp --dport 8162 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 51512 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 62622 -j ACCEPT edu-zk-03: -A INPUT -m state --state NEW -m tcp -p tcp --dport 8163 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 51513 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 62623 -j ACCEPT 3、分别在三台主机中创建/home/yxq/activemq目录 # mkdir /home/yxq/activemq 上传apache-activemq-5.11.1-bin.tar.gz到/home/yxq/activemq目录\ 4、解压并按节点命名 # tar -xvf apache-activemq-5.11.1-bin.tar.gz #cd /home/yxq/activemq #tar -xvf apache-activemq-5.11.1-bin.tar.gz #mv apache-activemq-5.11.1 node-0X#(X代表节点号1、2、3,下同) 5、修改管理控制台端口(默认为8161)可在conf/jetty.xml中修改,如下: node-01管控台端口: <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="8161"/> </bean> node-02管控台端口: <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> node-03管控台端口: <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="8163"/> </bean> 6、集群配置: 在3个ActiveMQ节点中配置conf/activemq.xml中的持久化适配器。修改其中bind、zkAddress、hostname和zkPath。注意:每个ActiveMQ的BrokerName必须相同,否则不能加入集群。 所有节点中activemq.xml配置 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="DubboEdu" dataDirectory="${activemq.data}"> node-01中的持久化配置: node-02中的持久化配置: node-03中的持久化配置: 修改各节点的消息端口(注意,避免端口冲突): node-01中的消息端口配置: node-02中的消息端口配置: node-03中的消息端口配置: 7、按顺序启动3个ActiveMQ节点:(zookeeper集群已经启动) #/home/yxq/zookeeper/node-01/bin/zkSeerver.sh start #/home/yxq/zookeeper/node-02/bin/zkSeerver.sh start #/home/yxq/zookeeper/node-03/bin/zkSeerver.sh start # /home/yxq/activemq/node-01/bin/activemq start # /home/yxq/activemq/node-02/bin/activemq start # /home/yxq/activemq/node-03/bin/activemq start 监听日志: #tail -f /home/yxq/activemq/node-01/data/activemq.log #tail -f /home/yxq/activemq/node-02/data/activemq.log #tail -f /home/yxq/activemq/node-03/data/activemq.log 8、集群的节点状态分析: 集群启动后对ZooKeeper数据的抓图 ,可以看到ActiveMQ的有3个节点,分别是00000000000,00000000001,00000000002。 我这里是00000000005,00000000006,00000000007。 以下第一张图展现了000000000005的值,可以看到elected的值是不为空,说明这个节点是Master, 其他两个节点是Slave。 9.集群可用性测试 ActiveMQ的客户端只能访问Master的Broker,其他处于Slave的Broker不能访问,所以客户端连接的Broker应该使用failover协议(失败转移) failover:(tcp://192.168.1.81:51511,tcp://192.168.1.82:51512,tcp://192.168.1.83:51513)?randomize=false 10.集群高可用测试 当一个ActiveMQ节点挂掉,或者一个Zookeeper节点挂掉,ActiveMQ服务依然正常运转,如果仅剩一个ActiveMQ节点,因为不能选举Master,ActiveMQ不能正常运行:同样的,如果Zookeeper仅剩一个节点活动,不管ActiveMQ各节点存活,ActiveMQ也不能正常提供服务。(ActiveMQ集群的高可用,依赖于Zookeeper集群的高可用) 11.设置开机启动 #vi /etc/rc.local su - yxq -c '/home/yxq/activemq/node-01/bin/activemq start' su - yxq -c '/home/yxq/activemq/node-02/bin/activemq start' su - yxq -c '/home/yxq/activemq/node-03/bin/activemq start' 12.ActiveMQ集群测试 13、负载均衡集群 配置放在 集群 1链接集群 2: 集群 2链接集群 1: 集群2(伪集群)连接集群1配置 集群2(伪集群)端口放开 启动集群1(伪集群)启动 集群1连接集群2配置 集群2连接集群1配置 ActiveMQ集群负载均衡原理图 集群1,集群2负载均衡高可用测试: 消息生产者B 欢迎关注:

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册