ActiveMQ--多节点集群
- 面试题
- 引入消息队列之后该如何保证其高可用性(高可用即是集群,主从)
- 是什么
- 基于Zookeeper和levelDB搭建的ActiveMQ集群,集群仅提供主备方式的高可用集群功能,避免单点故障。
- Zookeeper+replicated-leveldb-store的主从集群
- 三种集群的对比
- 基于sharedFileSystem共享文件系统(kahaDB)
- 基于JDBC
- 基于可复制的levelDB
- 本次案例采用Zk+Replicated LevelDB store
- sharedFileSystem
- 是什么:
-
http://activemq.apache.org/replicated-leveldb-store.html
-
- 官网集群原理图
- 部署规划和步骤(zk+levelDB )
- 环境和版本
- 关闭防火墙并保证win可以ping 通Activemq服务器
- 要求具备zk集群并可以成功启动
- 集群部署规划列表
-
- 创建三台集群目录
-
mkdir /mq_ cluster/
-
cd /mq_ cluster/
-
cp -r /opt/apache-activemq-5.15.9 mq_ node01
-
cp -r mq_ node01 mq_ node02
-
cp -r ma. node01 mq_ node03
-
最终结果
-
- 修改管理控制台端口
-
mq_ node01全部默认不动
-
mq_ node02
-
mq_ node03
-
- hostname名字映射
- ActiveMQ集群配置
- 01/02/03/路径
- 3个节点的BrokerName要求全部一直 (vim activemq.xml)
- 3个节点的持久化配置
- 修改各节点的消息端口
-
mq_ node01 全部默认不动
-
mq_ node02
-
mq_ node03
-
- 按顺序启动3个activeMQ节点,到这一步前提是zk集群已经成功启动运行
- 启动zookeeper集群:
-
启动activemq
- 启动zookeeper集群:
- zk集群的节点状况说明
- 3台zookeeper连接任意一台,查看节点变化
- 注册成功activemq,说明我们这三个节点挂上了
-
查看arivemq集群那个时master,使用get命令
-
集群可用性测试
- 客户端只能访问master的管理控制台后端:8161 ,能访问监听的只有在mster的8161
- 我们只能访问8161,8161的时主机其他是从机。我们只能访问master的端口号,从机之时和主机的数据一样,是能访问器端口号的
-
正常情况:
-
代码测试队列上生产者生产代码、
-
查看后台情况
-
消费者执行消费消息的代码
-
- 正常情况下一切消息队列正常生产和消费
- 第二种,特殊情况干掉一台ActiveMQ节点,他会自动切换到一个活的节点(单点故障迁移)
- 利用命令将msater干掉,查看剩余俩台的从机的状态
- 选举于00000016号从机作为master
- 这是我们访问后台的管理页面不能访问8161了,是访问不到的因为我们,停掉了maseter所以他的端口号也无法访问
- 这是出现了新的主机master,我们可以访问新的master的管理控制台端口号,000000016的端口号是192.168.56.130:8162
- 并且只有新的master管理控台端口号能访问,其他的端口号仍无法访问
-
挂掉一台master会有另一台master,实现高可用,
-
执行生产者代码 ,仍可以发送消息,不受影响
-
执行消费者代码,仍让不受影响和先前没有挂掉一台服务器一样,这就是实现了高可用性(和三台服务器的情况是一样的)
-
- 和前面三台机器是一样只不过访问的端口号变成了新的master消息端口号
- 利用命令将msater干掉,查看剩余俩台的从机的状态
-
- sharedFileSystem
- 三种集群的对比