高可用笔记(4)rabbitmq

简介: RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。 它是一个异步消息处理中心,史上最好的。对软件模块间的异步处理和解耦非常有帮助。

RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。
它是一个异步消息处理中心,史上最好的。对软件模块间的异步处理和解耦非常有帮助。

当然本笔记的主题不是如何使用,而是高可用。

安装rabbitmq

测试环境:
host1 192.168.30.1 (rabbitmq-server/master)
host2 192.168.30.2 (rabbitmq-server/slave)
host3 192.168.30.3 (rabbitmq-server/slave)

感谢系统部的周大帅整了一个本地yum仓库,使得安装非常简单快速,两条命令足矣。

$ yum install -y erlang
$ yum install -y rabbitmq-server

没有本地仓库怎么办?那就老老实实源码安装吧!-_-
或者还有周大帅第二个福利,整理好的rpm包附件下载吧。

继续,启动rabbitmq-server

$ systemctl enable rabbitmq-server
$ systemctl start rabbitmq-server

查看rabbitmq-server的状态

$ rabbitmqctl status
#输出太多,不贴了哈!

开启成功,默认端口5672

web管理工具

rabbitmqctl是rabbitmq自带的一个cli式的管理命令。尽管挺好用的,但是不够直观啊。
rabbitmq还自带了一个web管理工具rabbitmq_management,默认没有开启,需要手动开启。

$ rabbitmq-plugins enable rabbitmq_management
$ systemctl restart rabbitmq-server

用浏览器打开http://192.168.30.1:15672/,默认账号guest,密码guest
screenshot
screenshot

rabbitmq集群

  • 修改3台主机的/etc/hosts
host1 192.168.30.1
host2 192.168.30.2
host3 192.168.30.3
  • 关闭3个rabbitmq
$ rabbitmqctl stop
  • detached
$ rabbitmqctl -detached
  • 复制cookie
$ scp root@192.168.30.1:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie
$ chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
$ chmod 400 /var/lib/rabbitmq/.erlang.cookie
  • join cluster

把host2, host3加入到host1的集群

$ rabbitmqctl cluster_status
Cluster status of node 'rabbit@host2' ...
[{nodes,[{disc,['rabbit@host2']}]},
 {running_nodes,['rabbit@host2']},
 {cluster_name,<<"rabbit@host2">>},
 {partitions,[]}]
... done.

$ rabbitmqctl stop_app
# 可以是--ram或者--disc
$ rabbitmqctl join_cluster --ram rabbit@host1
# 后期也可以修改格式
$ rabbitmqctl change_cluster_node_type disc
  • 在启动host2和host3的rabbitmq-server
$ rabbitmqctl change_cluster_node_type disc
$ rabbitmqctl start_app
  • 查看cluster_status
$ rabbitmqctl cluster_status
Cluster status of node 'rabbit@host2' ...
[{nodes,[{disc,['rabbit@host1','rabbit@host2']}]},
 {running_nodes,['rabbit@host1','rabbit@host2']},
 {cluster_name,<<"rabbit@host1">>},
 {partitions,[]}]
...done.
  • 设置同步策略
$ rabbitmqctl set_policy my-ha-all "^" '{"ha-mode":"all"}'

ha-mode有三种:
screenshot

至此,高可用配置完成。
如果应用支持配置多个rabbitmq,那么到这里可以结束了。
如果不支持多个rabbitmq,那么继续配置nginx代理。

nginx代理

  • rabbitmq代理

host1增加nginx配置文件/etc/nginx/conf.d/rabbitmq_proxy.conf:

        upstream rabbitmq-server {
                server 192.168.30.1:5672 weight=1;
                server 192.168.30.2:5672 weight=1;
                server 192.168.30.3:5672 weight=1;
        }

        server {
                listen       0.0.0.0:35672;
                proxy_pass rabbitmq-server;
        }
$ nginx -s reload

测试一下:

  1. 添加一个队列:testqueue
    screenshot
  2. 可以看到已经队列创建成功,此时它是属于rabbitmq-01(这里用了rabbitmq-01替代host01,下同)的
    screenshot
  3. 停掉rabbitmq-01的服务后,可以看到testqueue在rabbitmq-02上被激活
    screenshot

代理配置完成,应用中配置rabbitmq设置为nginx代理的ip和port即可。

  • rabbitmq_management代理

host1增加nginx配置文件/etc/nginx/conf.d/rabbitmq_mgr_proxy.conf:

upstream rabbitmq-mgr-server{

        server 192.168.30.1:15672 weight=1;
        server 192.168.30.2:15672 weight=1;
        server 192.168.30.3:15672 weight=1;
}
server {
        listen 80;
        server_name localhost;

        location /rabbitmq_management {
            proxy_pass http://rabbitmq-mgr-server;
        }
}
$ nginx -s reload

用浏览器打开http://192.168.30.1/rabbitmq_management
screenshot

done !

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 存储 负载均衡
一文读懂RocketMQ的高可用机制——消息发送高可用
一文读懂RocketMQ的高可用机制——消息发送高可用
371 1
|
消息中间件 存储 Kafka
如何保证MQ消息队列的高可用?
如何保证MQ消息队列的高可用?
270 0
|
2月前
|
消息中间件 JSON Java
|
3月前
|
消息中间件 存储 算法
一文详解 RocketMQ 如何利用 Raft 进行高可用保障
本文介绍 RocketMQ 如何利用 Raft(一种简单有效的分布式一致性算法)进行高可用的保障,总结了 RocketMQ 与 Raft 的前世今生。可以说 Raft 的设计给 RocketMQ 的高可用注入了非常多的养分,RocketMQ 的共识算法与高可用设计在 2023 年也得到了学术界的认可,被 CCF-A 类学术会议 ASE 23' 录用。
438 10
|
6月前
|
消息中间件 存储 运维
深入理解MQ消息队列的高可用与可靠性策略
深入理解MQ消息队列的高可用与可靠性策略
1340 3
|
6月前
|
消息中间件 Java
RabbitMQ笔记
RabbitMQ笔记
48 2
RabbitMQ笔记
|
6月前
|
消息中间件 Java API
【微服务系列笔记】MQ消息可靠性
消息可靠性涉及防止丢失,包括生产者发送时丢失、未到达队列以及消费者消费失败处理后丢失。 确保RabbitMQ消息可靠性的方法有:开启生产者确认机制,确保消息到达队列;启用消息持久化以防止未消费时丢失;使用消费者确认机制,如设置为auto,由Spring确认处理成功后ack。此外,可开启消费者失败重试机制,多次失败后将消息投递到异常交换机。
111 1
|
6月前
|
消息中间件 运维 应用服务中间件
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
915 1
|
消息中间件 Java Spring
搭建高可用rabbitmq集群及spring boot实现集群配置
搭建高可用rabbitmq集群及spring boot实现集群配置
233 0
|
存储 消息中间件 缓存
一文读懂RocketMQ的高可用机制——消息存储高可用
一文读懂RocketMQ的高可用机制——消息存储高可用
1132 1