RabbitMQ高可用集群化

RabbitMQ有三种模式

  • 单一模式:即单机情况不做集群,就单独运行一个rabbitmq而已。
  • 普通模式:默认模式,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。(消息同步采用被动拉取的模式)
  • 镜像模式:把需要的队列做成镜像队列,存在与多个节点属于RabbitMQ的HA方案。该模式解决了普通模式中的问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步。(消息同步采用主动推送的模式)

RabbitMQ使用了那些端口号

  • client端通信口5672
  • 管理口15672
  • server间内部通信口25672
  • erlang发现口:4369

集群化的实现

第一步:保证.erlang.cookie一致
在$HOME中或者在/var/lib/rabbitmq中,文件名称为.erlang.cookie,他是一个隐藏文件。 erlang集群是通过这个cookie进行通信认证的,因此我们做集群的第一步就是干cookie。 所以要保证集群中所有节点中.erlang.cookie文件中cookie值一致,且权限为owner只读。

cd /var/lib/rabbitmq
cat .erlang.cookie

chmod 600 .erlang.cookie

第二步 配置/etc/host

192.168.25.100 master
192.168.25.101 cluster

#通过查看rabbitmq状态验证
rabbitmqctl status -n rabbit@master
rabbitmqctl status -n rabbit@clutser

第三步 建立集群

rabbitmqctl stop_app(注意硬盘节点先不要执行)
rabbitmqctl join_cluster --ram rabbit@master(连接到任意一个已经加入集群的节点均可)
rabbitmqctl start_app
rabbitmqctl cluster_status //查看集群状态
//RAM是磁盘节点,Disc是内存节点(默认) 
//在RabbitMQ集群里,必须至少有一个磁盘节点存在(磁盘节点用来存储集群状态)。

内存节点将所有的队列,交换器,绑定关系,用户,权限,和vhost的元数据信息保存在内存中,而磁盘节点将这些信息保存在磁盘中。
内存节点性能更优但不安全,所以单节点时只有磁盘节点,集群环境中可以有内存节点,但至少有一个是节点是磁盘节点。

在这里插入图片描述

第四步 设置成镜像模式(根据业务需要选择是否设定)

#在集群任意节点
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

结合Haproxy实现RabbitMQ负载均衡

HAProxy 安装在服务器上,安装命令:

rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm//
yum -y install haproxy

配置 HAProxy:

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
vi /etc/haproxy/haproxy.cfg

将下面的配置添加到/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 #Haproxy负载均衡信息
mode http
option httplog
stats refresh 5s
stats uri /stats
stats realm Haproxy
stats auth admin:admin #Haproxy用户即密码

listen rabbitmq_admin
bind 0.0.0.0:8102 #RabbitMQ集群 对外提供服务的接口
server master master:15672
server cluster cluster:15672

listen rabbitmq_cluster
bind 0.0.0.0:8101 #RabbitMQ Server Web 管理界面(基于负载均衡)
mode tcp
option tcplog
balance roundrobin
timeout client 3h
timeout server 3h
server master master:5672 check inter 5000 rise 2 fall 3 #5672端口是节点之间用来通讯的端口
server cluster cluster:5672 check inter 5000 rise 2 fall 3

然后启动 HAProxy:

service haproxy start 启动
service haproxy stop 停止
service haproxy restart 重启

在这里插入图片描述

发布了226 篇原创文章 · 获赞 40 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_40990818/article/details/101350558