RabbitMQ镜像集群搭建
消息队列: 在消息的传输过程中保存消息的容器
MQ角色
Broker:即消息队列服务器实体
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
配置节点hosts解析
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.101 rabbitmq1
192.168.10.102 rabbitmq2
192.168.10.103 rabbitmq3
修改三台集群节点主机名
[root@localhost ~]# hostnamectl set-hostname rabbitmq1
[root@localhost ~]# hostnamectl set-hostname rabbitmq2
[root@localhost ~]# hostnamectl set-hostname rabbitmq3
安装rabbitmq依赖环境elang
[root@rabbitmq1 ~]# wget https://github.com/rabbitmq/erlang-rpm/releases/download/v21.0.2/erlang-21.0.2-1.el7.centos.x86_64.rpm
[root@rabbitmq1 ~]# rpm -ivh erlang-21.0.2-1.el7.centos.x86_64.rpm
安装RabbitMQ-3.7.7
[root@rabbitmq1 ~]# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.7/rabbitmq-server-3.7.7-1.el7.noarch.rpm
[root@rabbitmq1 ~]# yum -y install rabbitmq-server-3.7.7-1.el7.noarch.rpm
### 开启用户远程访问
默认情况下,RabbitMQ的默认的`guest`用户只允许本机访问, 如果想让`guest`用户能够远程访问的话,只需要将配置文件中的loopback_users`列表置为空即可,如下:
cp /usr/share/doc/rabbitmq-server-3.7.7/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
vim /etc/rabbitmq/rabbitmq.config
61 {loopback_users, []} #删除两个百分号和后边的逗号
安装web插件
[root@rabbitmq1 ~]# rabbitmq-plugins enable rabbitmq_management
http://192.168.10.101:15672/
[root@rabbitmq1 ~]# systemctl start rabbitmq-server
查看集群状态
[root@rabbitmq1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
{running_nodes,[rabbit@rabbitmq3,rabbit@rabbitmq2,rabbit@rabbitmq1]},
{cluster_name,<<"rabbit@rabbitmq1">>},
{partitions,[]},
{alarms,[{rabbit@rabbitmq1,[]} ## 目前只有自己数据一个集群
以上步骤,配置集群的三台服务器操作都是一致的
将其他节点加入rabbitmq1集群中
因为rabbitmq集群是基于erlang同步的,所以先配置使各个节点 中 .erlang.cookie文件一致
[root@rabbitmq2 ~]# scp /var/lib/rabbitmq/.erlang.cookie rabbitmq2:/var/lib/rabbitmq/.erlang.cookie
[root@rabbitmq3 ~]# scp /var/lib/rabbitmq/.erlang.cookie rabbitmq3:/var/lib/rabbitmq/.erlang.cookie
以下步骤在RabbitMQ2 和RabbitMQ3 上执行
[root@rabbitmq2 ~]# rabbitmqctl stop_app #关闭应用
[root@rabbitmq2 ~]# rabbitmqctl reset #清除所有队列
[root@rabbitmq2 ~]# rabbitmqctl join_cluster --disc rabbit@rabbitmq1 #添加到集群中为磁盘节点 如果要添加为内存节点 则--disc更改为--ram
[root@rabbitmq2 ~]# rabbitmqctl start_app ###启动应用
[root@rabbitmq3 ~]# rabbitmqctl stop_app #关闭应用
[root@rabbitmq3 ~]# rabbitmqctl reset #清除所有队列
[root@rabbitmq3 ~]# rabbitmqctl join_cluster --disc rabbit@rabbitmq1 #添加到集群中为磁盘节点 如果要添加为内存节点 则--disc更改为--ram
[root@rabbitmq3 ~]# rabbitmqctl start_app ###启动应用
查看节点RabbitMQ的集群状态 #任意节点查看
[root@rabbitmq1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
{running_nodes,[rabbit@rabbitmq3,rabbit@rabbitmq2,rabbit@rabbitmq1]},
{cluster_name,<<"rabbit@rabbitmq1">>},
{partitions,[]},
{alarms,[{rabbit@rabbitmq3,[]},{rabbit@rabbitmq2,[]},{rabbit@rabbitmq1,[]}]}] ##看到三个节点表示集群搭建成功
登录RabbitMQ的WEB页面 看到三个节点
前端代理使用HAproxy+keepalive
使用四层TCP模式 不多介绍
listen rabbitmq_cluster
# 定义监听地址和端口,本机的5672端口
bind 0.0.0.0:5672
# 配置 tcp 模式
mode tcp
# 简单的轮询
balance roundrobin
#rabbitmq集群节点配置 #inter 每隔五秒对mq集群做健康检查,2次正确证明服务器可用,
#2次失败证明服务器不可用,并且配置主备机制
server rabbitmq1 192.168.10.101:5672 check inter 5000 rise 2 fall 2
server rabbitmq2 192.168.10.102:5672 check inter 5000 rise 2 fall 2
server rabbitmq3 192.168.10.103:5672 check inter 5000 rise 2 fall 2 #可以加backup 为备用模式