ActiveMQ笔记62-Replicated LevelDB集群故障迁移和验证

ActiveMQ的客户端只能访问Master的Broker,其他处于Slave的Broker不能访问,所以客户端连接的Broker应该使用failover协议(失败转移协议)。

使用命令lsof -i:端口号,查看ActiveMQ的运行情况,因为前面我们配置的端口号分别是8161,8162,8163,所以这里带的端口号也是这几个,发现有一个命令是有返回结果的,其他两个没有。然后使用192.168.0.123:端口号/admin访问,这里我使用192.168.0.123:8162/admin访问,可以访问到管理页面。尝试8161和8163端口,发现不能访问,此时,ActiveMQ的集群中,只有8162端口下的master可以访问,其余的不能访问,但是数据上保持同步。

当一个ActiveMQ结点挂掉或者一个Zookeeper结点挂掉,ActiveMQ服务依然正常运转,如果仅剩一个ActiveMQ结点,由于不能选举master,所以ActiveMQ不能正常运行。

同样,如果Zookeeper仅剩一个结点活动,不管ActiveMQ结点是否存活,ActiveMQ也不能正常提供服务,因为ActiveMQ集群的高可用依赖于Zookeeper集群的高可用。

修改Producer和Consumer的代码,将ACTIVEMQ_URL属性改为failover协议,代码如下。

public static final String ACTIVEMQ_URL = "failover:(tcp://192.168.0.123:61616,tcp://192.168.0.123:61617,tcp://192.168.0.123:61618)?randomize=false";

然后启动生产者发送消息。再去管理页面查看,可以发现有消息已经发送成功了。再启动消费者,之后消息被消费者消费掉了。此时一切正常。

下面,我们尝试将某一台ActiveMQ干掉,模拟ActiveMQ的故障。使用命令kill -9 进程号杀死ActiveMQ进群的master进程。假设这里杀死了8162这台机器,那么经过Zookeeper的选举后,8161或8163有一个会变成master结点。

使用start-activemq-all.sh启动ActiveMQ集群的时候,会启动失败,不知道为什么,有时候需要重试几次才能都启动起来。

另外,还需要检查Zookeeper中activemq结点里的address是不是null,如果是master的address是null,那么也访问不到,仔细检查配置,实在不行就重头再来。

发布了172 篇原创文章 · 获赞 1 · 访问量 7151

猜你喜欢

转载自blog.csdn.net/qq_36059561/article/details/103982080