RabbitMQ 3.77 集群部署 镜像队列安装 实现基于erlang21.0版本 Centos7.5

Last modified date

Comments: 0

一、前言

RabbitMQ做为一款高灵活性的消息中件间,索然在吞吐量上不如KAFKA的性能强大。但其支持ExChange RouteKEY BingKey的模式在实际的应用场景中还是相当方便的。

但在实际生产中我们还是希望能有一套高可用的消息中间件,这里来说一下RabbitMQ的集群部署。

总体架构图如下:


imagesRabbitMQ之间可以做3台的集群模式,通过HAProxy高效代理软件进行负载,再实际生产环境中这套方便还是比较可靠的。

二、集群模式部署

1、环境准备

本次准备了2台阿里云服务器做为部署的节点

RabbitMQ 节点 IP 地址 工作模式
node1 172.16.162.4 DISK CentOS 7.5 – 64位
node2 172.16.213.226 DISK CentOS 7.5 – 64位

2、首先分别在2台服务器安装单机版的RabbitMQ。安装方法见

3、修改2台服务器的hostname

vi /etc/hostname

分别修改2台主机的hostname为node1和node2

4、修改本机hosts

vi /etc/hosts

172.16.162.4 node1
172.16.213.226 node2

5、修改并统一cooke

 vi /var/lib/rabbitmq/.erlang.cookie

将node1节点上的值拷贝至node2使cookie的结果统一,否则后续会报错

6、停止2台节点的服务并重新在后台运行

rabbitmqctl stop
rabbitmq-server -detached

7、以node1服务器为节点加入node2节点

rabbitmqctl stop_app
rabbitmqctl reset 
rabbitmqctl join_cluster rabbit@node2
rabbitmqctl start_app

8、查看集群状态

rabbitmqctl cluster_status


Cluster status of node rabbit@izkvv55ro8smpvz ...
[{nodes,[{disc,[rabbit@izkvv55ro8smpvz,rabbit@node2]}]},
 {running_nodes,[rabbit@node2,rabbit@izkvv55ro8smpvz]},
 {cluster_name,<<"rabbit@izkvv55ro8smpvz">>},
 {partitions,[]},
 {alarms,[{rabbit@node2,[]},{rabbit@izkvv55ro8smpvz,[]}]}]

说明node2节点已经加入到了集群,在管理界面可以看到节点也已经加入了

images三、镜像队列

有了集群模式后交换器、队列都可以多台同步,但有消息是无法进行同步的。在某些场景下如果消息的数据很重要的话我们也需要对消息的数据进行同步。这个时候说需要用到镜像队列了。

1、通过命令行的方式进行镜像队列

以下命令是将所有队列名称以“queue_”开头的所有队列进行镜像,并在集群的两个节点上完成进行,policy的设置命令为:

rabbitmqctl set_policy --priority 0 --apply-to queues mirror_queue "^queue_" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

设置完成后在Web端的效果如下

images

也可以直接通过Web管理工具进行镜像队列的设置

images

以上实现的效果都是一样的。

四、HAProxy实现负载

HAProxy 是一个免费的负载均衡软件,可以运行于大部分主流的 Linux 操作系统上。他比Nginx好的地方在于他的代理可以实现TCP的代理。

1、安装HAProxy

yum -y install haproxy

2、配置负载

vi /etc/haproxy/haproxy.cfg

配置参考如下:

global
    log     127.0.0.1  local0 info
    log     127.0.0.1  local1 notice
    daemon
    maxconn 4096

defaults
    log     global
    mode    tcp
    option  tcplog
    option  dontlognull
    retries 3
    option  abortonclose
    maxconn 4096
    timeout connect  5000ms
    timeout client  3000ms
    timeout server  3000ms
    balance roundrobin

listen private_monitoring
    bind    0.0.0.0:8100
    mode    http
    option  httplog
    stats   refresh  5s
    stats   uri  /stats
    stats   realm   Haproxy
    stats   auth  admin:admin

listen rabbitmq_admin
    bind    0.0.0.0:8102
    server  node1 node1:15672
    server  node2 node2:15672

listen rabbitmq_cluster
    bind    0.0.0.0:8101
    mode    tcp
    option  tcplog
    balance roundrobin
    timeout client  3h
    timeout server  3h
    server  node1  node1:5672  check  inter  5000  rise  2  fall  3
    server  node2  node2:5672  check  inter  5000  rise  2  fall  3

3、启动Haproxy

systemctl start haproxy

 

4、应用程序只需要连接Haproxy的8101端口即可实现负载

admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Post comment